2013-05-11 305 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」,而不是「」。 這對我有效....