2016-09-09 10 views
0

リニアアクチュエータの伸長と移動を制御する無限ループを実行しようとしています。延長量はユーザ入力によって0〜9の値で制御されます。つまり、9に達して入力すると、アクチュエータは最大延長まで伸び、5に達して入力すると、アクチュエータは50%延長に戻ります。PythonバージョンのArduinoのSerial.available

私はPi-2バスに接続されたMCP3008を使ってPINE A64 +を使用しています.Arduino +アクチュエータとスタンドアロンの組み込みLinuxセットアップを使って、私が使っていた設定を置き換えようとしています。

バックグラウンドで無限ループを実行しているときに、プログラムがraw_inputを一貫して監視する方法についてはわかりません。私は次のように私のArduinoのコードでこれを行うことができました:

if (Serial.available() > 0) { 
    userInput = Serial.read()-48; 
    Serial.println(userInput); 
} 

は、どのように私はPythonでこのような何かをやって行くのでしょうか?私はPySerialのinWaitingコマンドを使ってみましたが、それは私に同じ結果を与えません。基本的に私はプログラムが2 possibilitesのいずれかをしたい:

  1. 利用ANのみ にユーザの入力がある場合に使用する変数を新しい値を割り当てる、または監視が
  2. にループ内のif文入力がある場合は、ループを中断し、ループが使用する変数に新しい値を割り当て、ループを再入力します。

    # begin loop w/ while True statement 
    
    # using if statement to enter only if there is user input, otherwise pass over 
    if Whatever: 
        Terminal[0] = user input 
    
    getVal = analogRead(0, PI2CLK, PI2MOSI, PI2MISO, PI2CS) 
    
    if (positionArray[Terminal[0]] - 10) < getVal < (positionArray[Terminal[0]] + 10): 
        PWM0A.stop() 
        PWM0B.stop() 
    elif getVal > positionArray[Terminal[0]]: 
        PWM0A.start(100) 
        PWM0B.stop() 
    elif getVal < positionArray[Terminal[0]]: 
        PWM0A.stop() 
        PWM0B.start(100) 
    
    # end loop 
    

    このついて行くの最良の方法は何ですか:

それは次のようになりますか?事前に感謝:)

+0

ハードウェア/ソフトウェアの設定に関する情報をもう少し提供してください。どのようにarduino respでPythonを実行していますか?あなたはどのようにarduinoにインターフェイスしますか? – albert

+0

@albert私はPi-2バスに接続されたMCP3008でPINE A64 +を使用しています。 Arduinoは関与していません。私はArduinoで行った設定をスタンドアロンの組み込みLinuxシステムで置き換えるだけです。 – LUX

答えて

0

the documentationから:自分の質問に答える

in_waiting 
    Getter: Get the number of bytes in the input buffer 
    Type: int 

    Return the number of bytes in the receive buffer. 
0

- 私は私の頭の中でロジックにビットを台無しに気づきました。私は同じ内部シリアルポート(私はpythonスクリプトを実行していたもの)を使って情報を入力しようとしていました。明らかに、これは動作しません。これは私のinWaiting関数が奇妙な結果を出していた理由です。

本来、serial.Serial(ttyS0)を使用して新しいCOMポートを開き、ttyS0にデータを送信する新しいターミナルウィンドウを開き、新しい値が返されるたびにifステートメントを再実行するためにserial.inWaitingコマンドを使用しました。入力されました。今回は正しく動作していました。基本的に私はArduinoのコードで同じことをしました。 Doh :)

関連する問題