私は、シリアルポート経由でWindows 10のpythonからarduino unoにいくつかの番号を送る必要があるプロジェクトに取り組んでいます。簡単なテストとして、私はただ2つを送信してLEDをオンにし、コマンドプロンプトから4を送信してオフにしたいと思いますが、最終的に0-99の数字を異なる目的で使用したいと考えています。ここに私のArduinoのコードです:pySerialとPython 2.7と3.4の違い
const int ledPin = 13;
byte b1, b2;
int val;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (Serial.available() > 1) {
b1 = Serial.read();
b2 = Serial.read();
val = ((b1-48)*10) + (b2-48);
if (val == 2) {
digitalWrite(ledPin, HIGH);
}
if (val == 4) {
digitalWrite(ledPin, LOW);
}
}
これはハックのようなもののように感じているが、「0」が開始されるためのArduinoが実際に受信されているものであるASCIIテーブル(その2 = 50、など)、上の48で動作します私はいくつかの数字を送信するために、次のpythonコードを使用する場合:
import serial
ser = serial.Serial('COM4',9600)
n = 2
s = str(n)
t = s.rjust(2,'0')
ser.write(t.encode())
だから私は、これは確かに私のデスクトップ上のpython 3.4を使用しているとき、私のLEDをオンにし、使用してN = 4がそれをオフにしないことを発見しました。これは、 "2バイトが送信されました"のように、私がnのために選択した番号に関係なく常に2を返します。私が抱えている問題は、これはpython 3.4ですごく素敵なことですが、Python 2.7を使ってこのプロジェクトを自分のラップトップにロードしようとしたとき、私は '2L'の代わりに '2'オンになります。
私のラップトップとデスクトップの両方でpySerial 3.3が使用されていますが、デスクトップ上でPython 2.7を使用すると同じことが起こる(動作しない)ことを確認しました。ラップトップ。
私は後で追加したいハードウェア/ APIのため、このプロジェクトにはPython 2.7を使用する必要があります。この 'L'の意味はシリアルリターンに追加されています。なぜこれがPython 2.7?要するにhttp://playground.arduino.cc/interfacing/python
、3つの文字列はUnicodeとのpython 2文字列ではないですのpython: