Hola a todos nuevamente, esta vez tengo un problema de codigo tonto pero que hoy no acabo de encontar.
He probado con dos while encadenados.
Con varios for,.... i finalmente me he decidido a usar un while con algunos if pero nada de nada.
Vamos a ver la idea es la siguiente:
Con un sensor mido la distancia a una pieza.
Si tengo pieza, doy un pulso a un paso a paso y sube, vuelvo a mirar...... asi hasque no no encuentre pieza.
En ese momento otro motor gira la plataforma donde esta la pieza (imaginaros que era un donut)
Si durante una vuelta entera no encuentro pieza pues ya esta he terminado
Pero si encuentro tengo que volver a ir subiendo otra vez...........
os pongo mi ultimo codigo.
subir = 1;
medida = 0;
while (medida == 0){
if ((subir == 1) && (sensor0.readRangeContinuousMillimeters() <= 180)){
pasoAscenso();
pasosAscensoAcumulados++;
Serial.print("pasosAscensoAcumulados");
Serial.println(pasosAscensoAcumulados);
delay(500);
}
else if ((subir == 1) && (sensor0.readRangeContinuousMillimeters() >= 180)){
subir=0;
girar=1;
}
if ((girar == 1)&&(medida == 0)){
pasoGiro();
pasosGiroAculados++;
Serial.print("pasosGiroAculados");
Serial.print( pasosGiroAculados);
delay(500);
}
if (sensor0.readRangeContinuousMillimeters() >= 180){
subir = 1;
girar = 0;
pasosGiroAculados = 0;
}
else if (pasosGiroAculados == 200){
medida = 1;
}
}
Tanto el sensor como los valores de codigos aculumados pueden variar, el sensor que dada uno saque el que quiera.
Tambien tengo dos pequeñas funciones que son girar:
void pasoGiro() {
digitalWrite(stepPin_M0,HIGH);
delayMicroseconds(700);
digitalWrite(stepPin_M0,LOW);
delayMicroseconds(700);
}
void pasoAscenso() {
digitalWrite(stepPin_M1,HIGH);
delayMicroseconds(700);
digitalWrite(stepPin_M1,LOW);
delayMicroseconds(700);
Falta la parte de inicializar y todo eso pero vamos que el problemas esta en el modo de anidar nada mas. ¿Alguna idea?