A parte il fatto che non leggi i sensori (manca il digitalRead() ), quindi il motore si avvia e mai piu' si ferma.
Anche se li leggi, si ferma al primo sensore che trova e mai più riparte
Ti voglio dare un'aiutino, quindi ti metto una base su cui lavorare. Ho cercato di farla semplice, sperando che tu riesca a comprenderla meglio. Come denominazione dei sensori preferisco quella che usavi prima
# define FP1 2 //Finecorsa1 pedana
# define FP2 3 //Finecorsa2 pedana
# define FP3 4 //Finecorsa3 pedana
# define FP4 5 //Finecorsa4 pedana
# define FPR 6 //Finecorsa RITORNO
# define MPA 9 //Relè Motore avanti pedana
# define MPI 10 //Relè Motore indietro pedana
boolean stato_errore = false ;
unsigned int ritardo = 5000 ; // tempo in cui pedana stà ferma
void setup()
{
Serial.begin (9600);
pinMode(FP1, INPUT_PULLUP); // sensore posizione iniziale
pinMode(FP2, INPUT_PULLUP);
pinMode(FP3, INPUT_PULLUP);
pinMode(FP4, INPUT_PULLUP);
pinMode(FPR, INPUT_PULLUP);
pinMode(MPA, OUTPUT);
pinMode(MPI, OUTPUT);
motore_pedana_stop();
Serial.println("inizia fino alla posizione di Start");
reset_pedana(); // il motore va' fino a posizione di Start
}
void loop() {
// 1° Step *************************************
Serial.println("Inizia Primo Step");
motore_pedana_avanti() ;
while (digitalRead(FP2) == HIGH ) {
if (digitalRead(FP3) == 0 || digitalRead(FP4) == 0 || digitalRead(FPR) == 0 )
{
stato_errore = true ;
break ;
}
}
motore_pedana_stop();
if (stato_errore)
{
errore_sensori();
}
Serial.println("finito Primo Step");
delay(ritardo);
// attivare cubo
// attivare led
// 2° Step *************************************
Serial.println("Inizia Secondo Step");
motore_pedana_avanti() ;
while (digitalRead(FP3) == HIGH ) {
if (digitalRead(FP4) == 0 || digitalRead(FPR) == 0 || digitalRead(FP1) == 0 )
{
stato_errore = true ;
break ;
}
}
motore_pedana_stop();
if (stato_errore)
{
errore_sensori();
}
Serial.println("finito Secondo Step");
delay(ritardo);
// attivare cubo
// attivare led
// 3° Step *************************************
Serial.println("Inizia Terzo Step");
motore_pedana_avanti() ;
while (digitalRead(FP4) == HIGH ) {
if (digitalRead(FPR) == 0 || digitalRead(FP1) == 0 || digitalRead(FP2) == 0 )
{
stato_errore = true ;
break ;
}
}
motore_pedana_stop();
if (stato_errore)
{
errore_sensori();;
}
Serial.println("finito Terzo Step");
delay(ritardo);
// attivare cubo
// attivare led
// 4° Step *************************************
Serial.println("Inizia Quarto Step");
motore_pedana_avanti() ;
while (digitalRead(FPR) == HIGH ) {
if (digitalRead(FP1) == 0 || digitalRead(FP2) == 0 || digitalRead(FP3) == 0 )
{
stato_errore = true ;
break ;
}
}
motore_pedana_stop();
if (stato_errore)
{
errore_sensori();
}
Serial.println("finito Quarto Step");
delay(ritardo);
// attivare cubo
// attivare led
// fine del ciclo. Torna a posizione di Start
Serial.println();
Serial.println("Torna a Start e rincomincia");
reset_pedana();
} // Fine LOOP ***************************
void errore_sensori() { // Se un sensore non richiesto si attiva
Serial.println();
Serial.println("Errore sui sensori");
// tone (pin_buzzer,frequenza); // Attiva un buzzer
while (1); // blocca tutto e aspetta un reset Hardware ( volendo si puo' inserire un Reset software)
}
void reset_pedana() {
while (digitalRead(FP1) == HIGH) { // legge sensore di posizione iniziale
motore_pedana_indietro(); // avvia motore indietro fino al sensore di posizione iniziale
}
Serial.println("finito reset. Posizionato su Start"); // esce dal while quando si attiva il sensore di posizione iniziale
motore_pedana_stop();
}
void motore_pedana_avanti() {
digitalWrite(MPA, LOW);
digitalWrite(MPI, HIGH);
}
void motore_pedana_indietro() {
digitalWrite(MPA, HIGH);
digitalWrite(MPI, LOW);
}
void motore_pedana_stop() {
digitalWrite(MPA, HIGH);
digitalWrite(MPI, HIGH);
}
e visto che ancora devi capire come strutturare un programma, abituati a stendere su carta i vari passaggi