2017-10-25 20 views
0

私は単純なPHP/Pythonスクリプトを実行しているRaspberry Piを備えたArduinoを使用しています。 Arduinoのコードはとてもシンプルです。私は「B」、それに手紙を送った場合、青色光が点灯します:Arduinoはスクリプトからの入力を受け付けません

void loop() { 
    char inputMessage = Serial.read(); 
    if (inputMessage == 'b') 
    digitalWrite(2, HIGH); 
    else 
    digitalWrite(2, LOW); 

    // Just so there's some output 
    Serial.println('.'); 
    delay(1000); 

を、私はこれはArduinoのIDEのシリアルモニタ機能を使用してテストするとき、私は「B」に合格したときに、青色の光が点灯します。成功。しかし、私は私のラズベリーパイのPHPスクリプトからこれを制御しようとしていますが、これはうまくいきません。スクリプトは次のようになります。

$comPort = "/dev/ttyACM0"; 
$fp = fopen($comPort, "w+"); 
fwrite($fp, "b"); 
echo fread($fp, 10); 
fclose($fp); 

ここで興味深いのは3つのことです。

  1. 時々、私はエコー(これは私がArduinoとある種の関係を作っていることを証明している)から数えて戻ってきます。
  2. スクリプトを実行すると、ArduinoでLとTXのライトが点滅します。
  3. 青色のライトが点灯しません。

私はここに何が欠けているのですか?すべての入力をいただければ幸いです。

EDIT:Pythonはアルドゥイーノ/ラズベリーパイコミュニティのための選択した言語であると思われるので

、私はPHPの一つとして同じことを行う必要があり、このPythonスクリプトを書いてみました。結果は同じで、ライトが点灯しません。あなたがPythonの人だと、これはあなたが間違ってここにあるものを見ることができます場合は、手を貸すしてください:D

import serial 
ser = serial.Serial('/dev/ttyACM0',9600) 
ser.write(str('b')) 
print ser.readline() 

答えて

0

私はminicomのが実行されていなかった何だった私のためにそれを修正しました。今私はスクリーンで走っている。

私は、実際の問題はArduinoのボードはあなたがレオナルドを使用していないと仮定して、原因の自動リセットのために使用されているRTSとDTR信号にシリアルポートを開くたびにリセットされていることは何だと思い
minicom -b 9600 -o -D /dev/ttyACM0 
0

ボード。これは、自動リセットと 'b'の送信の間に十分な時間がないため、あなたがスクリプトから 'b'を送信したときにボードがリセットされていることを意味します。 IDEでシリアルモニタを開いても、同じリセットが発生します。シリアルモニタウィンドウを開いて文字 'b'を入力してEnterキーを押すと、ボードは長い間リセットされ、あなたの入力を待っているからです。

これを処理するには、スクリプトでポートを開いた後に遅延を追加するなど、問題を引き起こす可能性のあるminicomのインスタンスを別に持つ必要がありません。それは動作します)。私はそれを扱うための良い方法についてはthisの質問を読むことをお勧めします。

関連する問題