如何从python(arduino-python串行通信)重新启动循环?

如何从python(arduino-python串行通信)重新启动循环?,python,loops,arduino,pyserial,Python,Loops,Arduino,Pyserial,我正在用一个arduino mega编码一个传送带,它用python连接到一个树莓上。当我运行这段代码(首先是arduino代码,然后是python代码)时,它会工作一次,但之后,它会不断请求输入,但会停止工作。我认为这是因为它没有以某种方式结束循环,可能是arduino和python之间的通信有问题。谁知道我能做些什么来解决这个问题 我曾尝试添加` exit()',但我希望代码处于循环中,但当它重复自身时,它就会停止工作 我的python代码是: 导入序列、时间、系统 ser=串行。串行('C

我正在用一个arduino mega编码一个传送带,它用python连接到一个树莓上。当我运行这段代码(首先是arduino代码,然后是python代码)时,它会工作一次,但之后,它会不断请求输入,但会停止工作。我认为这是因为它没有以某种方式结束循环,可能是arduino和python之间的通信有问题。谁知道我能做些什么来解决这个问题

我曾尝试添加` exit()',但我希望代码处于循环中,但当它重复自身时,它就会停止工作

我的python代码是:

导入序列、时间、系统
ser=串行。串行('COM1',9600)
时间。睡眠(2)
尽管如此:
打印(“入口编号2,3 o 4”)
dato=str(输入())
ser.write(dato.encode())
睡眠时间(0.5)
印刷品(“单独数字化的入口”)
dato=str(输入())
ser.write(dato.encode())
睡眠时间(0.5)
印刷品(“Oprima 1第comenzar段”)
dato=str(输入())
ser.write(dato.encode())
睡眠时间(0.5)
塞尔克洛斯()
我在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);

}

}
int estado=0;
国际目的地;
国际组织;
国际田波;
内部位置;
int a=0;
国际备忘录;
布尔zeta;
无符号整数=0;
无符号整数=0;
int der=22;//德恩埃尔针22
int izq=23;//izq en el引脚22
int s4=37;//s1 en el引脚30
int s3=36;//s2 en el引脚31
int s2=35;//s3 en el引脚32
int s1=34;//s4 en el引脚33
无效设置(){
Serial.begin(9600);
连载3.开始(9600);
pinMode(der,OUTPUT);//配置
pinMode(izq,输出);//配置el-izq-como-salida
pinMode(s1,输入);//配置s1-como-entrada
pinMode(s2,输入);//配置s2 como entrada
pinMode(s3,输入);//配置s3 como entrada
pinMode(s4,输入);//配置s4 como entrada
连载3.印刷(“Estado:”);
连载3.println(estado);
}
无效输入数据()
{
序列号3.println(“入口目的地”);
while(Serial.available()==0)
{
}
destino=Serial.parseInt();
序列号3.println(“Ingreetimpo”);
while(Serial.available()==0)
{
}
tiempo=Serial.parseInt();
序列号3.println(“第二段进入”);
while(Serial.available()==0)
{
}
inicio=Serial.read();
而(inicio!=“1”)
{
}
记忆=0;
}
真空传感器(内部传感器)
{
开关(传感器){
案例1:
zeta=数字读数(s1);
打破
案例2:
zeta=数字读数(s2);
打破
案例3:
zeta=数字读数(s3);
打破
案例4:
zeta=数字读数(s4);
打破
}
}
void循环()
{
如果(a==0){Ingreo_datos();}
如果(数字读取(s1)=高){
estado=1;
}否则如果(数字读取(s2)=高){
estado=2;
}否则如果(数字读取(s3)=高){
estado=3;
}否则如果(数字读取(s4)=高){
estado=4;
}else{estado=estado;}
如果(a==0){
posinical=estado;
a=1;}
如果(estado==destino){
数字写入(izq,低);
数字写入(der,低);
如果(a==1){
延迟(tiempo*1000);
记忆=目的;
destino=位置;
a=2;
传感器(存储器);
}否则如果(a==2&&zeta==0){
a=0;
estado=0;
inicio=0;
tiempo=0;
posinical=0;
记忆=0;
zeta=0;
}
}否则如果(estadodestino){
数字写入(der,高);
数字写入(izq,低);
}
}

不管怎样,它缺少一个` Serial.flush()'