5

我有通过网站控制 Arduino 二极管的 PHP 脚本,但我遇到了问题。

我的 Arduino 代码是:

int green = 8;
int incomingbyte;

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

void loop()
{
  if(Serial.available() > 0)
  {
    incomingbyte = Serial.read();
  }
  if(incomingbyte == '0'){
  digitalWrite(green,HIGH);
  }
  if(incomingbyte == '1'){
  digitalWrite(green,LOW);
  }
}

我的 PHP 代码是:

<?php

error_reporting(E_ALL); 
ini_set("display_errors", 1);  

if (isset($_GET['action'])) {

    require("php_serial.class.php");

        $serial = new phpSerial();
        $serial->deviceSet("COM3");
        $serial->confBaudRate(9600);
        $serial->deviceOpen();

if ($_GET['action'] == "green1") {

        $serial->sendMessage("0\r");

} else if ($_GET['action'] == "green0") {

        $serial->sendMessage("1\r");
}

$serial->deviceClose();

}

还有我的 HTML 代码:

<!DOCTYPE html>
<html>
<head>
<title>ARDUINO</title>
</head>
<body>

<h1> ARDUINO AND PHP COMMUNICATION </h1>

<a href="led.php?action=green1">ON</a></br>
<a href="led.php?action=green0">OFF</a></br>

</body>
</html>

我有两个问题:

  1. Arduino只得到incomingbyte = 0,所以我可以打开二极管,但我不能把它关掉。我修改了代码以设置incomingbyte = 1 来打开二极管,但它也不起作用。所以我认为 Arduino 只得到了incomingbyte = 0。

  2. 我的网站在运行脚本后关闭。当我单击“ON”或“OFF”时,脚本正在运行并且我得到白色(空白)站点。我应该怎么做才能一直停留在我的 HTML 网站上?

4

2 回答 2

4

回复:2 在您的 php 表单处理程序下添加 html 代码 - 所以所有内容都来自同一个脚本,或者使用

header() 

重新定位到 html 页面 - 但是你不能输出错误。

编辑这样做,以单文件方式:

<?php
// led.php code in here
error_reporting(E_ALL); 
ini_set("display_errors", 1);  

if (isset($_GET['action'])) {
// and so on ...



?>
<!--// now show your html form regardless 
of whether the form was submitted or not // -->
<!DOCTYPE html>
<html>
<head>
<title>ARDUINO</title>
</head>
<body>

<h1> ARDUINO AND PHP COMMUNICATION </h1>

<a href="?action=green1">ON</a></br>
<a href="?action=green0">OFF</a></br>

</body>
</html>

编辑以尝试使解决方案更清晰。请注意,您不必将 led.php 添加到链接中,它们会提交回同一个文件。

于 2013-05-11T11:48:50.200 回答
0

嘿,我刚刚为您的代码找到了两个重要的更改....

1>改变

$serial->sendMessage("0\r");

$serial->sendMessage('0');

发送“1”也是如此。

2>包括睡眠命令。在这里像这样

$serial = new phpSerial();
    $serial->deviceSet("COM3");
    $serial->confBaudRate(9600);
    $serial->deviceOpen();
    sleep(2);

sleep 命令插入延迟。当串口被php打开时

$serial->deviceopen();

命令arduino自动重置。因此,当 php 执行下一个命令时,arduino 将无法接收它们,因此可能无法采取行动。2 是最好的延迟,因为 1 会很短,而其他超过 2 的延迟会很长。使用与上述帖子相同的文件中的 php 和 html 代码,并将其命名为“name.php”,不带“”。这对我有用....

于 2013-07-27T01:54:53.810 回答