11

Pythonを使用してarduinoからポテンショメータの値を読み取ろうとしています。しかし、私のシリアル読み取り値は奇妙です。

Python コード:

import serial

ser = serial.Serial('COM12')

print ( "connected to: " + ser.portstr )
count = 1                    

while True:
    for line in ser.read():
        print( str(count) + str( ': ' ) + str( line ) )
        count = count + 1


ser.close()

Arduino コード:

int potpin = 0;  // analog pin used to connect the potentiometer
int val = 0;       // variable to store the value coming from the sensor
int oldVal = 0;   // used for updating the serial print

void setup() 
{ 
  Serial.begin(9600);
} 

void loop() 
{ 
  val = analogRead(potpin);             
  val = map(val, 0, 1023, 0, 179);     

  if( val != oldVal )
  {
    Serial.print(val);         // print the value from the potentiometer
    oldVal = val;
  }

  delay(100);
}

いくつかの Python 出力: この出力は、ポテンショメータの直線的でゆっくりとした増加からのもので、一度も下げたことはありません。

1: 56
2: 57
3: 49
4: 48
5: 49
6: 49
7: 49
8: 50
9: 49
10: 51

arduino シリアル ターミナルを実行すると、0 ~ 179 の範囲の値が得られます。Python がシリアルポートから正しい値を取得しないのはなぜですか?

ありがとう

編集:

問題を解決しました。48-55 は 1-9 の ASCII 値であるため、値ではなく文字を出力するように Python コードを変更する必要があります。ただし、これは個々の数字を出力するという別の問題を引き起こします。たとえば、数字「10」は単一の「1」と「0」として入ります。これは、arduino スケッチで Serial.print の代わりに Serial.write を使用することで簡単に解決されます。これは、数値の ascii 値ではなく、数値であるバイトを受け取ることも意味するため、インラインで読み取ったものを値から ascii に変換する必要はありません。

お役に立てれば。

4

1 に答える 1

2

同様の問題を抱えている他の人々に役立つかもしれないいくつかのコメントを提供しようとしましょう (この問題は解決されていますが)。まず、シリアル モニターで Arduino スケッチを数回実行してみます。シリアル モニタは、IDE メニューの [ツール] の下にあります。Ctrl-Shift-M を入力して、シリアル モニターを起動することもできます。

表示されるものを見てください。スケッチが Serial.print() 経由でデータを送り返そうとする場合、非常に役立つことがよくあります。いくつかのメモ。シリアル モニタ内で設定されたボー レートが、スケッチのボー レートと正確に一致していることを確認してください (ほとんどの場合、9600 が適切な選択です)。

2番目のメモは重要です。シリアル モニターを起動すると、Arduino ボードが強制的にリセットされます。あなたのスケッチは(常に)最初からやり直されます。毎回新鮮な走りができるので、これは良いことです。ボーレートを 9600 に設定するだけで強制的にリセットできることに注意してください (既に 9600 であっても)。これにより、毎回シリアル モニターを再起動しなくても、シリアル モニター内で多くのテストを実行できます。

元の問題に関しては、おそらく何らかのデータ区切り文字が必要です。たとえば、<53> のような値を送信できます。Python では、'<' をスキャンしてから、'>' を取得するまで数字を読み続けます。これにより、複数の桁を 1 つの数値として送信できます。

于 2013-11-06T15:04:18.803 に答える