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>

2 つの問題があります。

  1. Arduinoはincomingbyte = 0しか取得していないため、ダイオードをオンにすることはできますが、オフにすることはできません。ダイオードをオンにするために、incomingbyte = 1 を設定するようにコードを変更しましたが、それも機能しません。したがって、Arduinoはincomingbyte = 0のみを取得していると思います。

  2. スクリプトを実行した後、Web サイトがシャットダウンします。「オン」または「オフ」をクリックすると、スクリプトが実行され、白い (空白の) サイトが表示されます。HTML サイトに常にとどまるにはどうすればよいですか?

4

2 に答える 2

4

re: 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

やあ、あなたのコードの 2 つの重要な変更を見つけました....

1>変更する

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

$serial->sendMessage('0');

「1」を送信する場合も同じです。

2>sleep コマンドを含めます。

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

sleep コマンドは遅延を挿入します。シリアルポートがphpによって開かれたとき

$serial->deviceopen();

arduinoが自動リセットされるコマンド。したがって、phpが次のコマンドを実行すると、arduinoはそれらを受信できず、アクションを実行できない場合があります。1 は非常に短く、2 を超えると長くなるため、2 が最適な遅延です。上記の投稿と同じファイルで php および html コードを使用し、「 」を除いて「name.php」という名前を付けます。これは私のために働いた....

于 2013-07-27T01:54:53.810 に答える