我想從python do arduino發送數據以通過繼電器控制電機。想法是發送一個數字,以便識別一個動作和一個數值,最後移動它。不幸的是,我正在努力解決一些問題。數據正在迷失。與arduino的pyserial通信(用於電機控制)
因此,在這個最小的例子中有一個標識符「n」,表示接收到的數據是變量「number」,標識符「c」表示接收到的數據是一個計數器。爲了找出問題所在,我將數據發回Python,並嘗試閱讀它。這是設置僅適用於字符的第一個。所有其他數據都會丟失。
有人可以給我一個提示嗎?這些標識符是否必需?我是否需要延遲一段時間(或者也許還有另一個延遲率)?
我想這是關於第二個標識符的東西。該設置工作正常,如果我只與「計數器」例如。
非常感謝您提前!
Pyhton:
import serial
import time
Port = "/dev/cu.usbserial-A601FZBL"
ser = serial.Serial(Port,9600,timeout=1)
time.sleep(1)
counter = 0
def Test(counter):
ser.write(b"n")
ser.write(str(1).encode())
print("number:", 1)
get = ser.readline().decode()
print("get:", get)
ser.write(b"c")
ser.write(str(counter).encode())
print("counter:", counter)
get = ser.readline().decode()
print("get:", get)
print()
while True:
Test(counter)
counter += 1
的Arduino:
void setup() {
Serial.begin(9600);
}
int number;
int counter;
void loop() {
if (Serial.available() > 0) {
if (Serial.peek() == 'n') {
Serial.read();
number = Serial.parseInt();
Serial.println(number);
if (Serial.peek() == 'c') {
Serial.read();
counter = Serial.parseInt();
Serial.println(counter);
}
while (Serial.available() > 0) {
Serial.read();
}
}
}
}
對不起!這裏是我的樣品運行: (我很困惑,爲什麼有額外的空白行,在輸出打印()旁)
number: 1
get: 1
counter: 0
get:
number: 1
get:
counter: 1
get:
number: 1
get:
counter: 2
get:
number: 1
get:
counter: 3
get:
number: 1
get:
counter: 4
get:
number: 1
get:
counter: 5
您的樣品在哪裏運行? – SamB
謝謝SamB,只是添加了它。 –
我認爲你需要把條件*放在while循環中? – SamB