我想从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