我的工作,需要從蟒蛇在Windows 10,通過串口發送一些數據到一個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);
}
}
這感覺就像樣的黑客,但工作於48,因爲「0」開始的ASCII表(SO 2 = 50,等等),這是什麼Arduino是實際接收當我用下面的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時,使用N = 4將其關閉這確實對我的LED轉向。無論我爲n選擇的數字如何,總是返回'2',如「2個字節已發送」,這正是我想要的。我遇到的問題是,這是所有罰款和花花公子在Python 3.4,但是當我試圖使用Python 2.7,我收到了「2L」迴歸,而不是僅僅「2」,以及LED不再裝在我的筆記本電腦項目打開。
我的筆記本電腦和臺式機都使用pySerial 3.3,並且我已經證實,當我在桌面上使用python 2.7時會發生同樣的事情(不起作用),並且在我使用python 3.4筆記本電腦。
我需要爲這個項目使用python 2.7,因爲我想稍後添加一些額外的硬件/ API,那麼這個'L'的附加在串行返回上的意義是什麼,爲什麼這不適用於python 2.7?