2013-05-11 176 views
4

我有PHP脚本控制Arduino的二极管通过网站,但我有一个问题。Arduino和PHP通过串行incomingbyte读取

我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只接收传入= 0,所以我可以打开二极管,但我不能关闭它。我修改了代码来设置incomingbyte = 1打开二极管,但它也不能正常工作。所以我认为Arduino只得到incomingbyte = 0.

  2. 运行脚本后,我的网站正在关闭。当我点击“ON”或“OFF”脚本正在运行时,我正在变白(空白)站点。我应该怎么做才能保持我的HTML网站的所有时间?

回答

4

重:2添加HTML代码的PHP的表单处理程序下 - 所以一切都是从同一个脚本服务,或使用

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添加到链接,它们会被提交回相同的文件。

+0

Thx为接受,抱歉,我无法帮助第1部分。建议你阅读一下这个人正在使用PHP/Arduino的一些东西http://www.tinkerfailure.com/我相信你会发现他的代码中最终解决方案的线索。 – Cups 2013-05-11 14:46:59

+0

我现在正在工作;)ty – 2013-05-11 15:27:49

0

嘿,我只是想出了为我们的代码的两个重要的变化....

1>更改

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

$serial->sendMessage('0'); 

和同为发送 '1' 。

2>包括这样

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

睡眠命令睡眠command.here插入延迟。当串口被php打开时

$serial->deviceopen(); 

命令arduino得到autoresetted。因此当PHP执行下一个命令时,arduino将无法接收它们,因此可能无法采取行动。 2是最好的延迟,因为1会很短,而其他的会很长。 在上面的文章中使用相同的文件中的php和html代码,并将其命名为“name.php”,而不是“”。 这对我有效....