Errore codice per progetto arduino Pedana mobile

Per il cubo sto usando un motore per saracinesca ridotto comandato da due relè con comune neutro e uno per avanti ed uno per indietro.

i rele' sono sempre gli stessi di un Modulo rele' ?
Perche' si attivano con LOW e quindi qui e' errato, vanno invertiti i LOW ed HIGH
Specialmente il motore_cubo_stop, visto che invece di spegnerli li attivi tutti e due

void motore_cubo_avanti() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, LOW);
}

void motore_cubo_indietro() {
  digitalWrite(MCA, LOW);
  digitalWrite(MCI, HIGH);
}

void motore_cubo_stop() {
  digitalWrite(MCA, LOW);
  digitalWrite(MCI, LOW);
}

in questa parte

// attivare cubo
  Serial.println("Inizia primo step Cubo"); 
  motore_cubo_indietro();
  while (digitalRead(FC1) == HIGH ){
    if (digitalRead(FC2) == 0)
      {
        stato_errore = true;
        break;
      }
    }

Và sempre in errore , perchè sei posizionato su un finecorsa, quello di partenza ( e poi hai invertito FC1 con FC2) e quindi anche se avvii il motore, il sensore e' ancora attivato.
Se ci fai caso, ad esempio al primo step pedana

while (digitalRead(FP2) == HIGH ) {
    if (digitalRead(FP3) == 0 || digitalRead(FP4) == 0 || digitalRead(FPR) == 0 )
    {

il motore è posizionato su FP1, quindi con il while controllo se e' arrivato a FP2 e nell'if nota che non c'è il controllo sul finecorsa in cui sei ( FP1).
La parte di controllo nell'if, in teoria potresti anche toglierla, ma serve se ad esempio un finecorsa non scatta ( potrebbe anche essersi sganciato ), in quel caso si blocca il tutto.

Una cosa non ho capito, quando è che deve partire il motore del cubo ?

comunque ecco lo sketch rivisto

# define FP1 2    //Finecorsa1 pedana
# define FP2 3    //Finecorsa2 pedana
# define FP3 4    //Finecorsa3 pedana
# define FP4 5    //Finecorsa4 pedana
# define FPR 6    //Finecorsa pedana RITORNO
# define MPA 9    //Relè Motore avanti pedana
# define MPI 10   //Relè Motore indietro pedana
# define FC1 8    //Finecorsa1 cubo
# define FC2 7    //Finecorsa2 cubo
# define MCA 11   //Relè Motore avanti cubo
# define MCI 12   //Relè Motore indietro cubo

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);

  pinMode(FC1, INPUT_PULLUP);
  pinMode(FC2, INPUT_PULLUP);
  pinMode(MCA, OUTPUT);
  pinMode(MCI, OUTPUT);


  motore_pedana_stop();
  Serial.println("inizia fino alla posizione di Start");
  reset_pedana(); // il motore va' fino a posizione di Start

  motore_cubo_stop();
  Serial.println("Inizia cubo fino alla posizione di Start");
  reset_cubo(); //Il motore sposta il cubo fino alla 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");

  // attivare cubo
  Serial.println("Inizia primo step Cubo");
  while (digitalRead(FC2) == HIGH ) {
    motore_cubo_indietro();
  }
  motore_cubo_stop();
  Serial.println("finito Primo Step Cubo");
  delay(ritardo);
  // 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
  Serial.println("Inizia Secondo Step Cubo");
  motore_cubo_avanti() ;
  while (digitalRead(FC1) == HIGH ) {
    motore_cubo_avanti() ;
  }
  motore_cubo_stop();
  Serial.println("finito Secondo Step Cubo");
  delay(ritardo);
  // 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");

  // attivare cubo
  Serial.println("Inizia Terzo Step Cubo");
  while (digitalRead(FC2) == HIGH ) {
    motore_cubo_indietro() ;
  }
  motore_cubo_stop();
  Serial.println("finito Terzo Step Cubo");
  delay(ritardo);
  // 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");

  // attivare cubo
  Serial.println("Inizia Quarto Step Cubo");
  while (digitalRead(FC1) == HIGH ) {
    motore_cubo_avanti() ;
  }
  motore_cubo_stop();
  Serial.println("finito Quarto Step Cubo");
  delay(ritardo);
  // attivare led

  // fine del ciclo. Torna a posizione di Start
  Serial.println();
  Serial.println("Torna a Start e rincomincia");
  reset_pedana();

  // fine del ciclo. Torna a posizione di Start
  Serial.println();
  Serial.println("Rimani in posizione per ricominciare da start");
  reset_cubo();

} // 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 reset_cubo() {
  while (digitalRead(FC1) == HIGH)  { // legge sensore di posizione iniziale
    motore_cubo_indietro(); // avvia motore indietro fino al sensore di posizione iniziale
  }
  Serial.println("finito reset. Posizionato cubo su Start"); // esce dal while quando si attiva il sensore di posizione iniziale
  motore_cubo_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);
}

void motore_cubo_avanti() {
  digitalWrite(MCA, LOW);
  digitalWrite(MCI, HIGH);
}

void motore_cubo_indietro() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, LOW);
}

void motore_cubo_stop() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, HIGH);
}

Ciao Brunello, la sequenza del movimento è questa:
Pedana e cubo partono insieme nel loro movimento...
Arrivati tutti e due a destinazione si accendono i faretti e restano in quella posizione per 1 minuto o forse 2....

Tutto questo per ogni step....

Ciao Brunello... stavo provando lo sketch e c'era qualcosa che non andava e mi sono accorto che nel 2° step c'è un delay(ritardo); di troppo...

Adesso provo ad inserire l'accensione dei faretti e vediamo che succede...

Grazie

questo fa' partire i motori insieme

# define FP1 2    //Finecorsa1 pedana
# define FP2 3    //Finecorsa2 pedana
# define FP3 4    //Finecorsa3 pedana
# define FP4 5    //Finecorsa4 pedana
# define FPR 6    //Finecorsa pedana RITORNO
# define MPA 9    //Relè Motore avanti pedana
# define MPI 10   //Relè Motore indietro pedana
# define FC1 8    //Finecorsa1 cubo
# define FC2 7    //Finecorsa2 cubo
# define MCA 11   //Relè Motore avanti cubo
# define MCI 12   //Relè Motore indietro cubo

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(FC1, INPUT_PULLUP);
  pinMode(FC2, INPUT_PULLUP);
  pinMode(MPA, OUTPUT);
  pinMode(MPI, OUTPUT);
  pinMode(MCA, OUTPUT);
  pinMode(MCI, OUTPUT);
  digitalWrite(MCI, HIGH); // disattiva i relè
  digitalWrite(MCA, HIGH);
  digitalWrite(MPI, HIGH);
  digitalWrite(MPA, HIGH);

  motore_cubo_stop();
  motore_pedana_stop();
  Serial.println("inizia pedana fino alla posizione di Start");
  reset_pedana(); // il motore va' fino a posizione di Start

  Serial.println("Inizia cubo fino alla posizione di Start");
  reset_cubo(); //Il motore sposta il cubo fino alla posizione di Start
}


void loop() {

  // 1° Step *************************************
  Serial.println("Inizia Primo Step");
  motore_pedana_avanti() ;
  motore_cubo_avanti();
  while (digitalRead(FP2) != LOW || digitalRead(FC2) != LOW ) {
    if (digitalRead(FP2) == 0 )   {
      motore_pedana_stop();
    }
    if (digitalRead(FC2) == 0 )   {
      motore_cubo_stop();
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Primo Step");
  // attivare led
  delay(ritardo);

  // 2° Step *************************************
  Serial.println("Inizia Secondo Step");
  motore_pedana_avanti() ;
  motore_cubo_indietro();
  while (digitalRead(FP3) != LOW || digitalRead(FC1) != LOW ) {
    if (digitalRead(FP3) == 0 )   {
      motore_pedana_stop();
    }
    if (digitalRead(FC1) == 0 )   {
      motore_cubo_stop();
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Secondo Step");
  // attivare led
  delay(ritardo);

  // 3° Step *************************************
  Serial.println("Inizia Terzo Step");
  motore_pedana_avanti() ;
  motore_cubo_avanti();
  while (digitalRead(FP4) != LOW || digitalRead(FC2) != LOW ) {
    if (digitalRead(FP4) == 0 )   {
      motore_pedana_stop();
    }
    if (digitalRead(FC2) == 0 )   {
      motore_cubo_stop();
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Terzo Step");
  // attivare led
  delay(ritardo);

  // 4° Step *************************************
  Serial.println("Inizia Quarto Step");
  motore_pedana_avanti() ;
  motore_cubo_indietro();
  while (digitalRead(FPR) != LOW || digitalRead(FC1) != LOW ) {
    if (digitalRead(FPR) == 0 )   {
      motore_pedana_stop();
    }
    if (digitalRead(FC1) == 0 )   {
      motore_cubo_stop();
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Quarto Step");
  // attivare led
  delay(ritardo);

  // fine del ciclo. Torna a posizione di Start
  Serial.println();
  Serial.println("Torna a Start e rincomincia");
  reset_pedana();
  //il cubo è già in posizione

} // 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 reset_cubo() {
  while (digitalRead(FC1) == HIGH)  { // legge sensore di posizione iniziale
    motore_cubo_indietro(); // avvia motore indietro fino al sensore di posizione iniziale
  }
  Serial.println("finito reset. Posizionato cubo su Start"); // esce dal while quando si attiva il sensore di posizione iniziale
  motore_cubo_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);
}

void motore_cubo_avanti() {
  digitalWrite(MCA, LOW);
  digitalWrite(MCI, HIGH);
}

void motore_cubo_indietro() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, LOW);
}

void motore_cubo_stop() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, HIGH);
}

Ciao Brunello, vedo che il codice è un pò cambiato...
Ma ci sarà qualche errore... quando inizia il secondo step tutto si blocca...

Monitor Seriale:

Inizia cubo fino alla posizione di Start
finito reset. Posizionato cubo su Start
Inizia Primo Step
finito Primo Step
Inizia Secondo Step

E ho notato pure che l'MCA non parte.... ho guardato che magari ci fosse un collegamento traballante ma è tutto a posto...

prova a fare un test

# define FP1 2    //Finecorsa1 pedana
# define FP2 3    //Finecorsa2 pedana
# define FP3 4    //Finecorsa3 pedana
# define FP4 5    //Finecorsa4 pedana
# define FPR 6    //Finecorsa pedana RITORNO
# define MPA 9    //Relè Motore avanti pedana
# define MPI 10   //Relè Motore indietro pedana
# define FC1 8    //Finecorsa1 cubo
# define FC2 7    //Finecorsa2 cubo
# define MCA 11   //Relè Motore avanti cubo
# define MCI 12   //Relè Motore indietro cubo

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(FC1, INPUT_PULLUP);
  pinMode(FC2, INPUT_PULLUP);
  pinMode(MPA, OUTPUT);
  pinMode(MPI, OUTPUT);
  pinMode(MCA, OUTPUT);
  pinMode(MCI, OUTPUT);
  digitalWrite(MCI, HIGH); // disattiva i relè
  digitalWrite(MCA, HIGH);
  digitalWrite(MPI, HIGH);
  digitalWrite(MPA, HIGH);

  motore_cubo_stop();
  motore_pedana_stop();
}

void aspetta_seriale() {
  char inByte ;
  while ( inByte != '\n') {
    if (Serial.available() > 0 ) {
      inByte = Serial.read();
    }
  }
}

void loop() {
  Serial.println("Test motori");
  Serial.println("Premere invio dopo ogni richiesta");
  aspetta_seriale();
  Serial.println("Motore pedana Avanti");
  motore_pedana_avanti() ;
  aspetta_seriale();
  motore_pedana_stop() ;
  Serial.println("Motore pedana Indietro");
  motore_pedana_indietro();
  aspetta_seriale();
  motore_pedana_stop() ;
  Serial.println("Motore cubo Avanti");
  motore_cubo_avanti() ;
  aspetta_seriale();
  motore_cubo_stop();
  Serial.println("Motore cubo Indietro");
  motore_cubo_indietro() ;
  aspetta_seriale();
  motore_cubo_stop();
    Serial.println("Fine test motori");
    Serial.println();
Serial.println("inizio test sensori");
 Serial.println("Premere invio per iniziare");
 aspetta_seriale();
 Serial.println("Test sensore FP1");
 while (digitalRead(FP1) != LOW ) {
   }
 Serial.println("Test sensore FP1 OK");
 Serial.println("Test sensore FP2");
  while (digitalRead(FP2) != LOW ) {
   }
 Serial.println("Test sensore FP2 OK");
 Serial.println("Test sensore FP3");
  while (digitalRead(FP3) != LOW ) {
   }
 Serial.println("Test sensore FP3 OK");

 Serial.println("Test sensore FP4");
  while (digitalRead(FP4) != LOW ) {
   }
 Serial.println("Test sensore FP4 OK");
 Serial.println("Test sensore FPR");
  while (digitalRead(FPR) != LOW ) {
   }
 Serial.println("Test sensore FPR OK");
 Serial.println("Test sensore FC1");
  while (digitalRead(FC1) != LOW ) {
   }
 Serial.println("Test sensore FC1 OK");

 Serial.println("Test sensore Fc2");
  while (digitalRead(FC2) != LOW ) {
   }
 Serial.println("Test sensore FC2 OK");
 Serial.println();
 Serial.println("Fine del Test");
}

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 reset_cubo() {
  while (digitalRead(FC1) == HIGH)  { // legge sensore di posizione iniziale
    motore_cubo_indietro(); // avvia motore indietro fino al sensore di posizione iniziale
  }
  Serial.println("finito reset. Posizionato cubo su Start"); // esce dal while quando si attiva il sensore di posizione iniziale
  motore_cubo_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);
}

void motore_cubo_avanti() {
  digitalWrite(MCA, LOW);
  digitalWrite(MCI, HIGH);
}

void motore_cubo_indietro() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, LOW);
}

void motore_cubo_stop() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, HIGH);
}

Allora, controllo effettuato...

In poche parole testando i motori tutto ok... testando i finecorsa ho trovato un problema, funzionano bene tranne quando premo FC1. Premendo FC1 è come se premessi FC1 e FC2 insieme... Forse per questo si blocca tutto...

Ciao brunello... il problema persiste ancora...
Ho provato a cambiare pin di arduino... ho provato i collegamenti hardware e ho provato a vedere se c'era qualche errore o problema nel codice...

Ma non trovo niente di irregolare...

Come faccio?

Grazie

Salve, Brunello... Ho risolto il problema.... era il pulsante dell'FC2 con cui facevo le prove che era danneggiato, era sempre premuto anche se non si vedeva...

Ora però ho un altro problema... Le prove dei finecorsa le facevo su breadboard con pulsanti per PCB collegati in pull-up con una resistenza da 10Kohm...

Tutto sembrava funzionare, ma adesso ho collegato questo finecorsa per la pedana e questo per il cubo, e lo sketch mi si blocca...
Non è che magari, nella mia ignoranza, devo cambiare resistenza?

Grazie

e lo sketch mi si blocca...

eh, facile da dirsi a distanza............
Hai usato i contatti NC o NO ?

lo hai fatto un test con codesti pulsanti ?

Salve Brunello, ho usato i contatti NO, ho fatto il test e funzionano...

Comunque ho risolto il problema...
Quando azionavo i finecorsa li attivavo e subito li rilasciavo, ma se li tengo premuti fino all'inizio del prossimo step tutto funziona alla grande...

Una piccola domanda: invece di tenerli premuti che modifiche posso fare per farli funzionare anche solo azionandoli??

Sai, perchè non vorrei che slittasse la pedana sul finecorsa e si bloccherebbe tutto...

Grazie

attualmente, fino a che i sensori non sono tutti e due attivi resta nel ciclo

while (digitalRead(FP2) != LOW || digitalRead(FC2) != LOW )

potresti modficarlo cosi'

// 1° Step *************************************
  Serial.println("Inizia Primo Step");
  motore_pedana_avanti() ;
  motore_cubo_avanti();
  byte stato_fp = 1 ;
  byte stato_fc = 1 ;
  while (stato_fp != 0 || stato_fc != 0 ) {
    if (digitalRead(FP2) == 0 )   {
      motore_pedana_stop();
      stato_fp = 0 ;
    }
    if (digitalRead(FC2) == 0 )   {
      motore_cubo_stop();
      stato_fc = 0 ;
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Primo Step");
  // attivare led
  delay(ritardo);

Salve Brunello, non ho più risposto perchè abbiamo perso tempo nella realizzazione del progetto (pedana e cubi).
Allora, in questo video c'è il progetto posizionato e funzionante alla perfezione....

L'unica cosa che non sono riuscito a fare sono le modifiche che mi hai consigliato nel tuo ultimo post relative ai finecorsa e il tempo di attesa a fine reset.

In poche parole la pedana ed il cubo dovrebbero stare 30 secondi fermi tra uno step ed un altro e dopo il reset dovrebbero stare 5 minuti fermi.

Qui il codice:

define FP1 2    //Finecorsa1 pedana
# define FP2 3    //Finecorsa2 pedana
# define FP3 4    //Finecorsa3 pedana
# define FP4 5    //Finecorsa4 pedana
# define FPR 6    //Finecorsa pedana RITORNO
# define MPA 9    //Relè Motore avanti pedana
# define MPI 10   //Relè Motore indietro pedana
# define FC1 8    //Finecorsa1 cubo
# define FC2 7    //Finecorsa2 cubo
# define MCA 11   //Relè Motore avanti cubo
# define MCI 12   //Relè Motore indietro cubo
# define LED1 25  //Relè faretto 1
# define LED2 23  //Relè faretto 2
# define LED3 27  //Relè faretto 3
# define LED4 29  //Relè faretto 4
# define LED5 31  //Relè faretto 5
# define LED6 33  //Relè faretto 6
# define LED7 35  //Relè faretto 7
# define LED8 37  //Relè faretto 8
# define LED9 39  //Relè faretto 9
# define LED10 41 //Relè faretto 10
# define LED11 43 //Relè faretto 11
# define MUSIC 45 //Relè musica

boolean stato_errore =  false ;
unsigned int ritardo = 30000 ; // tempo in cui pedana stà ferma tra uno step ed un altro
unsigned int pausa = 300000 ; // tempo in cui pedana stà ferma dopo reset

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(FC1, INPUT_PULLUP);
  pinMode(FC2, INPUT_PULLUP);
  pinMode(MPA, OUTPUT);
  pinMode(MPI, OUTPUT);
  pinMode(MCA, OUTPUT);
  pinMode(MCI, OUTPUT);
  digitalWrite(MCI, HIGH); // disattiva i relè
  digitalWrite(MCA, HIGH);
  digitalWrite(MPI, HIGH);
  digitalWrite(MPA, HIGH);
  pinMode(LED1, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT);
  pinMode(LED8, OUTPUT);
  pinMode(LED9, OUTPUT);
  pinMode(LED10, OUTPUT);
  pinMode(LED11, OUTPUT);
  pinMode(MUSIC, OUTPUT);
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);
  digitalWrite(MUSIC, HIGH);

  motore_cubo_stop();
  motore_pedana_stop();
  led_spento();
  Serial.println("inizia pedana fino alla posizione di Start");
  reset_pedana(); // il motore va' fino a posizione di Start

  Serial.println("Inizia cubo fino alla posizione di Start");
  reset_cubo(); //Il motore sposta il cubo fino alla posizione di Start
  led_spento(); //Tutti i faretti sono spenti
}


void loop() {

  // 1° Step *************************************
  digitalWrite(MUSIC, LOW);
  led_primo_step();
  delay(ritardo);
  led_spento();
  
  Serial.println("Inizia Primo Step");
  motore_pedana_avanti() ;
  motore_cubo_avanti();
   while (digitalRead(FP2) != LOW || digitalRead(FC2) != LOW ) {
    if (digitalRead(FP2) == 0 )   {
      motore_pedana_stop();
    }
    if (digitalRead(FC2) == 0 )   {
      motore_cubo_stop();
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Primo Step");
  led_secondo_step();  // attivare led
  delay(ritardo);

  led_spento();

  // 2° Step *************************************
  Serial.println("Inizia Secondo Step");
  motore_pedana_avanti() ;
  motore_cubo_indietro();
  while (digitalRead(FP3) != LOW || digitalRead(FC1) != LOW ) {
    if (digitalRead(FP3) == 0 )   {
      motore_pedana_stop();
    }
    if (digitalRead(FC1) == 0 )   {
      motore_cubo_stop();
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Secondo Step");
  led_terzo_step(); // attivare led
  delay(ritardo);
  led_spento();

  // 3° Step *************************************
  Serial.println("Inizia Terzo Step");
  motore_pedana_avanti() ;
  motore_cubo_avanti();
  while (digitalRead(FP4) != LOW || digitalRead(FC2) != LOW ) {
    if (digitalRead(FP4) == 0 )   {
      motore_pedana_stop();
    }
    if (digitalRead(FC2) == 0 )   {
      motore_cubo_stop();
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Terzo Step");
  led_quarto_step();// attivare led
  delay(ritardo);
  led_spento();
  digitalWrite(MUSIC, HIGH);


  // fine del ciclo. Torna a posizione di Start
  Serial.println();
  Serial.println("Torna a Start e rincomincia");
  reset_pedana();
  reset_cubo();
  delay(pausa);
 

} // 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 reset_cubo() {
  while (digitalRead(FC1) == HIGH)  { // legge sensore di posizione iniziale
    motore_cubo_indietro(); // avvia motore indietro fino al sensore di posizione iniziale
  }
  Serial.println("finito reset. Posizionato cubo su Start"); // esce dal while quando si attiva il sensore di posizione iniziale
  motore_cubo_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);
}

void motore_cubo_avanti() {
  digitalWrite(MCA, LOW);
  digitalWrite(MCI, HIGH);
}

void motore_cubo_indietro() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, LOW);
}

void motore_cubo_stop() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, HIGH);
}

void led_spento() {
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);
 
}

void led_primo_step() {
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, LOW);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);

}

void led_secondo_step() {
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);
}

void led_terzo_step() {
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);
}

void led_quarto_step() {
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, LOW);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);
}

Ho commesso degli errori??

Grazie

Ho commesso degli errori??

a parte l'uso errato di int

unsigned int pausa = 300000 ;

che va' corretto in

unsigned long pausa = 300000 ;

Se ti funziona di errori non dovrebbero essercene

comunque ecco lo sketch come chiedevi

# define FP1 2    //Finecorsa1 pedana
# define FP2 3    //Finecorsa2 pedana
# define FP3 4    //Finecorsa3 pedana
# define FP4 5    //Finecorsa4 pedana
# define FPR 6    //Finecorsa pedana RITORNO
# define MPA 9    //Relè Motore avanti pedana
# define MPI 10   //Relè Motore indietro pedana
# define FC1 8    //Finecorsa1 cubo
# define FC2 7    //Finecorsa2 cubo
# define MCA 11   //Relè Motore avanti cubo
# define MCI 12   //Relè Motore indietro cubo
# define LED1 25  //Relè faretto 1
# define LED2 23  //Relè faretto 2
# define LED3 27  //Relè faretto 3
# define LED4 29  //Relè faretto 4
# define LED5 31  //Relè faretto 5
# define LED6 33  //Relè faretto 6
# define LED7 35  //Relè faretto 7
# define LED8 37  //Relè faretto 8
# define LED9 39  //Relè faretto 9
# define LED10 41 //Relè faretto 10
# define LED11 43 //Relè faretto 11
# define MUSIC 45 //Relè musica

byte stato_fp =  1 ;
byte stato_fc =  1 ;
unsigned int ritardo = 30000 ; // tempo in cui pedana stà ferma tra uno step ed un altro
unsigned long pausa = 300000 ; // tempo in cui pedana stà ferma dopo reset

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(FC1, INPUT_PULLUP);
  pinMode(FC2, INPUT_PULLUP);
  pinMode(MPA, OUTPUT);
  pinMode(MPI, OUTPUT);
  pinMode(MCA, OUTPUT);
  pinMode(MCI, OUTPUT);
  digitalWrite(MCI, HIGH); // disattiva i relè
  digitalWrite(MCA, HIGH);
  digitalWrite(MPI, HIGH);
  digitalWrite(MPA, HIGH);
  pinMode(LED1, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT);
  pinMode(LED8, OUTPUT);
  pinMode(LED9, OUTPUT);
  pinMode(LED10, OUTPUT);
  pinMode(LED11, OUTPUT);
  pinMode(MUSIC, OUTPUT);
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);
  digitalWrite(MUSIC, HIGH);

  motore_cubo_stop();
  motore_pedana_stop();
  led_spento(); //Tutti i faretti sono spenti
  Serial.println("inizia pedana fino alla posizione di Start");
  reset_pedana(); // il motore va' fino a posizione di Start

  Serial.println("Inizia cubo fino alla posizione di Start");
  reset_cubo(); //Il motore sposta il cubo fino alla posizione di Start
  led_spento(); //Tutti i faretti sono spenti
}


void loop() {
  // 1° Step *************************************
  digitalWrite(MUSIC, LOW);
  led_primo_step();
  delay(ritardo);
  led_spento();

  Serial.println("Inizia Primo Step");
  motore_pedana_avanti() ;
  motore_cubo_avanti();
  stato_fp = 1 ;
  stato_fc = 1 ;
  while (stato_fp != 0 || stato_fc != 0 ) {
    if (digitalRead(FP2) == 0 )   {
      motore_pedana_stop();
      stato_fp = 0 ;
    }
    if (digitalRead(FC2) == 0 )   {
      motore_cubo_stop();
      stato_fc = 0 ;
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Primo Step");
  led_secondo_step();  // attivare led
  delay(ritardo);
  led_spento();

  // 2° Step *************************************
  Serial.println("Inizia Secondo Step");
  motore_pedana_avanti() ;
  motore_cubo_indietro();
  stato_fp = 1 ;
  stato_fc = 1 ;
  while (stato_fp != 0 || stato_fc != 0 ) {
    if (digitalRead(FP3) == 0 )   {
      motore_pedana_stop();
      stato_fp = 0 ;
    }
    if (digitalRead(FC1) == 0 )   {
      motore_cubo_stop();
      stato_fc = 0 ;
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Secondo Step");
  led_terzo_step(); // attivare led
  delay(ritardo);
  led_spento();

  // 3° Step *************************************
  Serial.println("Inizia Terzo Step");
  motore_pedana_avanti() ;
  motore_cubo_avanti();
  stato_fp = 1 ;
  stato_fc = 1 ;
  while (stato_fp != 0 || stato_fc != 0 ) {
    if (digitalRead(FP4) == 0 )   {
      motore_pedana_stop();
      stato_fp = 0 ;
    }
    if (digitalRead(FC2) == 0 )   {
      motore_cubo_stop();
      stato_fc = 0 ;
    }
  }
  motore_pedana_stop();
  motore_cubo_stop();
  Serial.println("finito Terzo Step");
  led_quarto_step();// attivare led
  delay(ritardo);
  led_spento();
  digitalWrite(MUSIC, HIGH);

  /*
    // 4° Step *************************************
    Serial.println("Inizia Quarto Step");
    motore_pedana_avanti() ;
    motore_cubo_indietro();
    stato_fp = 1 ;
    stato_fc = 1 ;
    while (stato_fp != 0 || stato_fc != 0 ) {
      if (digitalRead(FPR) == 0 )   {
        motore_pedana_stop();
        stato_fp = 0 ;
      }
      if (digitalRead(FC1) == 0 )   {
        motore_cubo_stop();
        stato_fc = 0 ;
      }
    }
    motore_pedana_stop();
    motore_cubo_stop();
    Serial.println("finito Quarto Step");
    // attivare led
    delay(ritardo);
  */

  // fine del ciclo. Torna a posizione di Start
  Serial.println();
  Serial.println("Torna a Start e rincomincia");
  reset_pedana();
  reset_cubo();
  delay(pausa);

} // Fine LOOP ***************************


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 reset_cubo() {
  while (digitalRead(FC1) == HIGH)  { // legge sensore di posizione iniziale
    motore_cubo_indietro(); // avvia motore indietro fino al sensore di posizione iniziale
  }
  Serial.println("finito reset. Posizionato cubo su Start"); // esce dal while quando si attiva il sensore di posizione iniziale
  motore_cubo_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);
}

void motore_cubo_avanti() {
  digitalWrite(MCA, LOW);
  digitalWrite(MCI, HIGH);
}

void motore_cubo_indietro() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, LOW);
}

void motore_cubo_stop() {
  digitalWrite(MCA, HIGH);
  digitalWrite(MCI, HIGH);
}
void led_spento() {
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);

}

void led_primo_step() {
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, LOW);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);

}

void led_secondo_step() {
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);
}

void led_terzo_step() {
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);
}

void led_quarto_step() {
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);
  digitalWrite(LED6, HIGH);
  digitalWrite(LED7, LOW);
  digitalWrite(LED8, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);
}

bella la pedana, l'hai fatta girare per Pasqua ?

Salve Brunello, si la pedana la facciamo girare per pasqua e fino al 7 maggio in occasione della particolare festa del mio paese "Gli Archi di Pasqua"...
Ecco un link della nostra festa, li facciamo da sempre...
Comunque non so se hai notato che nel codice da me modificato manca il quarto step.... non c'è più bisogno...
Lo posso togliere in maniera indolore o mi sballa tutto?

Grazie ancora

il link non funziona.

certo che lo puoi togliere, infati nell'ultimo sketch che ti ho inviato il 4° step è disabilitato

Archi di pasqua, simpatica iniziativa

Adesso il link funziona....
Quindi potrei anche lasciarlo il 4 step e lui si ferma lo stesso al terzo?

no, se lo lasci lo fa'
nello sketch e' commentato, proprio per non farglielo eseguire

Ah, ok hai ragione...
Non mi ero accorto che era solo commentato...
Domattina metto il nuovo sketch e lo provo...
Ti ringrazio sempre infinitamente per l'aiuto.