php - Arduino 通讯停止工作

标签 php javascript html ajax arduino

我正在运行一个小WAMP服务器采用 Apache 2.2.22 和 PHP 5.3.13。我的问题是我的 JavaScript/Ajax 代码不再将 $POST 发送到我的外部 PHP 文件,该文件应该通过串行方式将消息发送到我的 Arduino。

它工作得很好,然后我只是改变了输入的值,这是我发送的“消息”,突然它不高兴了。我以前遇到过这个问题,所以我只是将值改回原来的值,但现在即使这样也不起作用。我尝试清除所有网络历史记录,重新启动 WAMP 服务器,甚至重新启动计算机,但都不起作用。

无论如何,这是我的代码:

HTML

    <div id="Room1Controls">
        <div id="ControlButton" class="Control1"><a>B
            A
            C
            K</a></div>
        <div class="Room1SwitchContainer">
            <div id="LightsSwitchBox" class="SwitchBox">
            <h1>Lights</h1>
            <input type="checkbox" class="SwitchButton1" value="L11"><a class="SButton1">On</a></input>
            <input type="checkbox" class="SwitchButton2" value="L10"><a class="SButton2">Off</a></input>
        </div>
        <div id="DoorsSwitchBox" class="SwitchBox">
            <h1>Doors</h1>
            <input type="checkbox" class="SwitchButton3" value="D10"><a class="SButton3">Open</a></input>
            <input type="checkbox" class="SwitchButton4" value="D11"><a class="SButton4">Lock</a></input>
        </div>
        <div id="BlindsSwitchBox" class="SwitchBox">
            <h1>Blinds</h1>
            <input type="checkbox" class="SwitchButton5" value="B11"><a class="SButton5">Open</a></input>
            <input type="checkbox" class="SwitchButton6" value="B10"><a class="SButton6">Close</a></input>
        </div>
    </div>
</div>

JavaScript/Ajax

$(document).ready(function(){
    var value;
    $(".SButton1").click(function(){
        $(".SwitchButton1").trigger('click');
    });
    $(".SButton2").click(function(){
        $(".SwitchButton2").trigger('click');
    });
    $(".SButton3").click(function(){
        $(".SwitchButton3").trigger('click');
    });
    $(".SButton4").click(function(){
        $(".SwitchButton4").trigger('click');
    });
    $(".SButton5").click(function(){
        $(".SwitchButton5").trigger('click');
    });
    $(".SButton6").click(function(){
        $(".SwitchButton6").trigger('click');
    });
    $("#Room1Controls input").click(function(){
        value=$(this).val();
        $.post('Inc/Parts/arduino.php',{message:value});
    });
});

PHP

<?php
    $message=$_POST['message'];

    if (isset($_POST['message'])) {
        require("php_serial.class.php");
        $serial = new phpSerial();
        $serial->deviceSet("COM3");
        exec('mode COM3 BAUD=96 PARITY=n DATA=8 STOP=1 xon=off octs=off rts=on');
        $serial->deviceOpen();
        if ($_POST['message'] == "L11") {
            $serial->sendMessage("L");
        } else if ($_POST['message'] == "L10") {
            $serial->sendMessage("l");
        } else if ($_POST['message'] == "D10") {
            $serial->sendMessage("D");
        } else if ($_POST['message'] == "D11") {
            $serial->sendMessage("d");
        } else if ($_POST['message'] == "B11") {
            $serial->sendMessage("B");
        } else if ($_POST['message'] == "B10") {
            $serial->sendMessage("b");
        }
        $serial->deviceClose();
    }
?>

以及在 Arduino Uno 上运行的代码:

int ldr = 0;
int door = 13;
int blind = 12;
int led = 11;
int in = 0;

void setup() {
    pinMode(door, OUTPUT);
    pinMode(blind, OUTPUT);
    pinMode(led, OUTPUT);
    pinMode(ldr, INPUT);

    Serial.begin(9600);
}

void loop() {
    if (Serial.available() > 0) {
        in = Serial.read();
    }

    if (in == 'L')
    {
        int val = (analogRead(ldr));
        val = constrain(val, 150, 500);
        int LightLvl = map(val, 150, 500, 255, 0);
        analogWrite(led, LightLvl);
    }
    else
        if (in == 'l') (analogWrite(led, LOW));

    if (in == 'D')
    {
        digitalWrite(door, LOW);
    }
    else
        if (in == 'd') (digitalWrite(door, HIGH));

    if (in == 'B')
    {
      digitalWrite(blind, HIGH);
    }
    else
        if (in == 'b') (digitalWrite(blind, LOW));
}

如果您能指出我的代码中的任何不一致或错误,那就太好了。另外,我是编码新手,因此如果您对如何改进我的代码以使其更高效或有其他做事方式有任何建议,我将非常感激。

最佳答案

原来是我的 .htaccess 文件出了问题。我有一些脚本来隐藏扩展,但由于某种原因 $POST 不喜欢它。

以下是 .htaccess 文件中的代码:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
</IfModule>

如果有人知道解决这个问题的方法,如果你分享它,我会很高兴;)

关于php - Arduino 通讯停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15048048/

相关文章:

php - 按特定顺序运行 PHPUnit 测试

javascript - 通过 AJAX 使用 JQuery 获取 HTML id

php - PHP中的字符编码

javascript - 获取元素的 innerText,但排除隐藏的子元素

javascript - 如何使用 React 发送 POST 并刷新页面?

javascript - 数据更改时更新页面

javascript - 工具提示数据放置 ="right"不工作[编辑]

php - 仅在 iframe 中设置 php 变量

javascript - 根据包含字符串的值选择 <select> <option>

html - Div 宽度和文本区域对齐并扩展到父级(响应)