[英]How do I restart my loop from python (arduino-python serial communication)?
我正在使用连接到树莓派 python 的 arduino mega 编码传输带。 当我运行这段代码时(首先是 arduino 代码,然后是 python 代码),它运行了一次,但它一直要求输入但停止工作。 我假设这是因为它没有以某种方式结束循环,可能是 arduino 和 python 之间的通信问题。 任何人都知道我能做些什么来解决这个问题?
我曾尝试添加“exit()”,但我希望代码处于循环中,但是当它重复时它停止工作。
我在python中的代码是:
import serial, time, sys
ser = serial.Serial('COM1', 9600)
time.sleep(2)
while True:
print ("Ingrese destino 2, 3 o 4")
dato = str(input())
ser.write(dato.encode())
time.sleep(0.5)
print ("Ingrese tiempo en segundos de un solo digito")
dato = str(input())
ser.write(dato.encode())
time.sleep(0.5)
print ("Oprima 1 para comenzar")
dato = str(input())
ser.write(dato.encode())
time.sleep(0.5)
ser.close()
我在arduino中的代码:
int estado = 0;
int destino;
int inicio;
int tiempo;
int posinicial;
int a=0;
int memoria;
boolean zeta;
unsigned int tiempoActual = 0;
unsigned int tiempoAnterior = 0;
int der = 22; // der en el pin 22
int izq = 23; // izq en el pin 22
int s4 = 37; // s1 en el pin 30
int s3 = 36; // s2 en el pin 31
int s2 = 35; // s3 en el pin 32
int s1 = 34; // s4 en el pin 33
void setup() {
Serial.begin(9600);
Serial3.begin(9600);
pinMode(der, OUTPUT); // configura el der como salida
pinMode(izq, OUTPUT); // configura el izq como salida
pinMode(s1, INPUT); // configura s1 como entrada
pinMode(s2, INPUT); // configura s2 como entrada
pinMode(s3, INPUT); // configura s3 como entrada
pinMode(s4, INPUT); // configura s4 como entrada
Serial3.print("Estado: ");
Serial3.println(estado);
}
void ingreso_datos()
{
Serial3.println("Ingrese destino");
while (Serial.available() == 0)
{
}
destino = Serial.parseInt();
Serial3.println("Ingresetiempo");
while (Serial.available() == 0)
{
}
tiempo = Serial.parseInt();
Serial3.println("Ingrese s para iniciar");
while (Serial.available() == 0)
{
}
inicio = Serial.read();
while (inicio != '1')
{
}
memoria=0;
}
void lectura_sensor(int sensor)
{
switch (sensor){
case 1:
zeta=digitalRead(s1);
break;
case 2:
zeta=digitalRead(s2);
break;
case 3:
zeta=digitalRead(s3);
break;
case 4:
zeta=digitalRead(s4);
break;
}
}
void loop()
{
if(a==0){ingreso_datos();}
if(digitalRead(s1)==HIGH){
estado=1;
} else if(digitalRead(s2)==HIGH){
estado=2;
} else if(digitalRead(s3)==HIGH){
estado=3;
} else if (digitalRead(s4)==HIGH){
estado=4;
} else{estado=estado;}
if(a==0){
posinicial=estado;
a=1; }
if(estado==destino){
digitalWrite(izq,LOW);
digitalWrite(der,LOW);
if(a==1){
delay(tiempo*1000);
memoria=destino;
destino=posinicial;
a=2;
lectura_sensor(memoria);
}else if(a==2 && zeta==0){
a=0;
estado=0;
inicio=0;
tiempo=0;
posinicial=0;
memoria=0;
zeta=0;
}
} else if (estado<destino){
digitalWrite(der,LOW);
digitalWrite(izq,HIGH);
} else if (estado>destino){
digitalWrite(der,HIGH);
digitalWrite(izq,LOW);
}
}
没关系,缺少“Serial.flush()”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.