我想转储ROM。 Arduino一直等到收到一位数的密钥。我使用这个数字作为起始命令,并作为参数告诉Arduino ROM有多大。这是我的Arduino代码(简化测试):
void setup() {
Serial.begin(115200);
}
void loop() {
uint8_t key = 10;
while(key > 2){
key = Serial.read();
key -= '0';
}
Serial.print("75 A E8 98 D4 E8 8A E4 E8 EB E4 F9 C3 60 3C 55");
Serial.println("");
Serial.print("74 C E8 35 3 E8 79 E1 88 96 9F 0 EB F E8");
Serial.println("");
Serial.print("0 E8 9 1 FF 76 19 E8 4F DC 8F 46 19 61 F8 C3");
Serial.println("");
Serial.print("E8 5E E1 33 C0 EB 29 B8 1 0 81 BE A0 0 0 51");
Serial.println("");
Serial.println("EOF");
}
这是我的Python代码,告诉Arduino开始转储并阅读响应:
line = " "
ser = serial.Serial("COM10", 115200, timeout=1)
ser.write("1")
ser.flush()
while line != "EOF":
line = ser.readline().strip
print line
ser.close()
问题:它什么都没打印。
PS:已经尝试了不同的超时值,但0或无效。
编辑:邀请其他人参加!我使用的是Python 2.7.6 - Anaconda 1.9.2 32bit @ Win7x64
EDIT2 解决方案是在python中第一次写入之前添加2secs(time.speep(2)
)的延迟。更多详情:pySerial works fine in Python interpreter, but not standalone
答案 0 :(得分:0)
Pyserial肯定没有问题阅读arduino序列...我已经做了很多次
试试这个
ser = serial.Serial("COM10", 115200, timeout=5)
ser.flush()
ser.write("1")
print ser.read(1000)
ser.close()
或进一步抽象
class MySerial:
def __init__(self,*args,**kwargs):
kwargs["timeout"] = kwargs.get("timeout",5) #ensure timeout set
self.ser = serial.Serial(*args,**kwargs)
def query(self,cmd):
self.ser.flush()
self.ser.write(cmd)
return self.ser.read(100000)
ser = MySerial("COM10", 115200, timeout=5)
print ser.query("1")
我也有点好奇你为什么要把字符串写成一个字符串所有空格分开,而不是只写字节...
您可以验证您可以按如下方式获取读数
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.read();
Serial.println("Hello World!\r");
}
这将等待任何事情然后发送hello world字符串...确保你看到至少然后继续调整它以按照你想要的行为(EG。在继续之前从读取中获取特定值,发送消息其他比你好世界...我的猜测是它不会因为某种原因超过你的Serial.read()