从php到arduino的串行通信

从php到arduino的串行通信,php,arduino,serial-communication,Php,Arduino,Serial Communication,我想把一个数字从php传给arduino。目前,我能够通过串口在php和arduino之间进行通信。然而,当我试图将一个数字从php传递给arduino时,arduino无法识别它。然后我尝试传递一个它能够检测到的字符。我已经试过多次了,我不知道代码出了什么问题。下面是我的代码 PHP代码 这是arduino代码 int led =13; int test=0; void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } voi

我想把一个数字从php传给arduino。目前,我能够通过串口在php和arduino之间进行通信。然而,当我试图将一个数字从php传递给arduino时,arduino无法识别它。然后我尝试传递一个它能够检测到的字符。我已经试过多次了,我不知道代码出了什么问题。下面是我的代码

PHP代码 这是arduino代码

int led =13;
int test=0;

void setup()
{
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}
void loop()
{
   while(Serial.available()==0);
   test=Serial.read();

   if(test=='1')
   {
      digitalWrite(led,HIGH);
      delay(500);
      digitalWrite(led,LOW);
      delay(500);
      digitalWrite(led,HIGH);
      delay(500);
      digitalWrite(led,LOW);
   }
}

谁能告诉我怎么了?当我发送1时,指示灯不亮。但是,当我发送“A”时,指示灯亮起。

作为一种快速检查,您可以这样做以确保您处理的数据类型正确,即,如果您发送的是字符串或int,并检查其中一种或

void loop(){

    if (Serial.available()) {

        char ch = Serial.read();

        if(ch == '1'){

            // your led logic here

        }

    }

}
好吧,现在试着把长话短说。我自己测试了这个东西,下面的代码很实用。 我注意到arduino IDE中的串行监视器需要打开才能按预期工作。当它没有打开时,正确的数据没有被读取,PHP脚本也没有退出。 我认为这里的问题是,您的arduino环境正试图通过PHP试图讨论的同一个串行端口与设备通信。您可能需要研究如何在尝试使用PHP脚本时禁用该通信

<?php
include 'PhpSerial.php';

$serial = new PhpSerial;

$serial->deviceSet("/dev/tty.usbserial-A9IL9BF7");

$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");

$serial->deviceOpen();

$read = $serial->readPort();

$serial ->sendMessage('1');

$serial ->deviceClose();

?>


int led = 13;

void setup() {
    pinMode(led, OUTPUT);
    Serial.begin(9600);     
}

void loop() {

    if (Serial.available() == 1) {

        char ch = Serial.read();

        if (ch == '1'){

            digitalWrite(led,HIGH);
            delay(500);
            digitalWrite(led,LOW);
            delay(500);
            digitalWrite(led,HIGH);
            delay(500);
            digitalWrite(led,LOW);

        }

    }
}
Serial.read返回一个int,而不是char

你是说

但是安东尼,它编译你

没错,它确实可以编译,甚至可以运行

但这是因为您正在将字符“1”的ASCII值与Serial.read的int值进行比较

如下图所示,数字1的十进制值等于49

所以当你说

if(test == '1')
你的意思是

if( 1 == 49)
正如你想说的

if( test == 1)
ASCII表

所以这里需要注意的是,它实际上也取决于你如何发送它。如果您作为一种数据类型发送,请在另一种数据类型中接收并将其与另一种数据类型进行比较。你会有可怕的结果


所有这些都在说,求你了,求你了。。。。看在上帝的份上。。。。在php中参数化插入。这就像是PHP的海报子代码。

我正在使用PHP_serial.class.phpof课程,当我发送,那里的arduino将更改为test='A',我正在使用windows 7i。我已经解决了这个问题,将php大小的奇偶校验设置为8N1,将arduino大小设置为7E1,因为任何奇数为1的ASCII代码都会有问题。我已经检查了serial.class.php,它正在发送字符串。
if( test == 1)