我正在制作一个arduino程序,通过USB将一些传感器数据发送到Raspberry pi模型3
我还制作了一个python脚本来将这些数据记录到Raspberry和一个SQL Base
arduino发送1知道何时取第一个值,rPi脚本将模式从0更改为1,然后开始读取4个值,这是问题出现时,因为rPi没有注意到1和永远不会改变到模式1
下面是python代码:
while True:
while mode==0:
x = ser.readline()
if x==1:
//never gets here
print("b")
mode = 1
print("Starting data Gathering at rPi from arduino")
while mode==1:
print("Gathering data")
text1 = "CFL"
ignore1 = ser.readline()
x1 = ser.readline()
x1 = double(x1)
x2 = ser.readline()
x2 = double(x2)
y = ser.readline()
y = int(y)
z = ser.readline()
z = int(z)
time1 = time.time()
date1 = time.strftime('%d-%m-%d')
print("Saving sql data")
sql = "INSERT INTO tempdat(tdate, ttime, zone, DHTtemp, DHThum, SoilHum, Light) VALUES (%s, %s, %s, %d, %d, %d, %d)" %(date1,time1,text1,x1,x2,y,z)
cursor.execute(sql)
db.commit()
和arduino的人:
void loop() {
Serial.println(1);
Serial.println(read_temp());
delay(1000);
Serial.println(read_humidity_DHT());
delay(1000);
Serial.println(read_humidity_soil());
delay(1000);
Serial.println(read_light());
delay(10000);
}
也很想知道是否有人知道,这是标记我发送的信息的最佳方式,来自rPi的传感器来自哪里。提前致谢
*编辑某些代码时,在创建问题时错误地复制了
答案 0 :(得分:0)
Serial.println
发送ASCII代码后跟\r\n
。您正在将ASCII字符与整数值进行比较。试试这个:
x = ''
while ser.inWaiting():
c=ser.read()
if c not in "\r\n":
x += c
if x=='1':
. . .
答案 1 :(得分:0)
放一个break语句,这样你永远不会离开第一个循环。