Arduino Forum

International => Italiano => Software => Topic started by: orzowilde on Mar 03, 2016, 09:56 pm

Title: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 03, 2016, 09:56 pm
Salve a tutti del forum. Mi affido alla vostra clemenza ed alla vostra esperienza per risolvere un mio problema.
Tempo fa avevo fatto dei piccoli progrettini con arduino e adesso mi hanno chiesto di movimentare un monumento del mio paese.
In poche parole dovrei far girare una pedana circolare in senso orario che si fermi 4 volte per tot secondi in punti precisi e sopra la pedana  ci sarà un cubo fisso ed uno mobile che ad ogni step della pedana deve assumere 2 posizioni, uno aperto ed uno chiuso.  Quando si arriverà all'ulrimo step la pedana deve ritornare al primo step girando in senso antiorario. Ad ogni step, inoltre, devono accendere dei faretti led che in tutto sono dieci, ma si accenderanno 2 in uno step, 3 in un altro step ecc….
Per questo progetto sto usando un arduino mega, 2 schede relè da 8 moduli per comandare 2 motori, uno per la pedana ed uno per il cubo (1 relè avanti ed uno indietro per ogni motore).
 4 finecorsa per la pedana e 2 finecorsa per il cubo.
E gli altri relè per i faretti.
Per quanto riguarda i collegamenti, gli schemi elettrici e la meccanica non ci sono problemi, il mio problema è la programmazione.
Ho abbozzato uno sketch in maniera un pò rozza e mi da errore di compilazione quando faccio verifica con l'Ide di arduino e sinceramente non so neanche se questo sketch farà funzionare tutto il sistema, sono un po' scettico.


Potete darmi una mano? Gazie anticipatamente.

Questo è il codice!

Code: [Select]
/* AUTOMAZIONE PIAZZETTA SIGNURARA
 FP1 FineCorsa primo step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FP2 FineCorsa secondo step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FP3 FineCorsa terzo step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FP4 FineCorsa quarto step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FC1 FineCorsa primo step Cubo, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FC2 FineCorsa secondo step Cubo, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
*/
 # define FP1 2    //Finecorsa1 pedana collegato al pin digitale n.2
 # define FP2 3    //Finecorsa2 pedana collegato al pin digitale n.3
 # define FP3 4    //Finecorsa3 pedana collegato al pin digitale n.4
 # define FP4 5  //Finecorsa4 pedana collegato al pin digitale n.5
 # define FC1 6    //Finecorsa1 cubo collegato al pin digitale n.6
 # define FC2 7    //Finecorsa2 cubo collegato al pin digitale n.7
 # define MPA 8    //Relè Motore avanti pedana
 # define MPI 9    //Relè Motore indietro pedana
 # define MCA 10   //Relè Motore avanti cubo
 # define MCI 11   //Relè Motore indietro cubo
 # define FPR 32  //Finecorsa RITORNO pedana collegato al pin digitale n.32
 # define LED1 22   //Faretto
 # define LED2 23   //Faretto
 # define LED3 24   //Faretto
 # define LED4 25   //Faretto
 # define LED5 26   //Faretto
 # define LED6 27   //Faretto
 # define LED7 28   //Faretto
 # define LED8 29   //Faretto
 # define LED9 30   //Faretto
 # define LED10 31   //Faretto


 int statoFP1 = 1; //Definiz. e assegnaz. delle variabili di programma
 int statoFP2 = 1;
 int statoFP3 = 1;
 int statoFP4 = 1;
 int statoFC1 = 1;
 int statoFC2 = 1;
  int RITARDO = 0;
 int STATO = 0;
 
/* STATO=0 CHIUSO
 STATO=1 AVANTI
 STATO=2 CHIUSURA
 STATO=3 APERTO-TEMPORIZZAZIONE
*/
void setup()
 {
 pinMode(FP1, INPUT); //Impostaz. dei piedini di Arduino come INPUT o OUTPUT
 pinMode(FP2, INPUT);
 pinMode(FP3, INPUT);
 pinMode(FP4, INPUT);
 pinMode(FPR, INPUT);
 pinMode(FC1, INPUT);
 pinMode(FC2, INPUT);
 pinMode(MPA, OUTPUT);
 pinMode(MPI, OUTPUT);
 pinMode(MCA, OUTPUT);
 pinMode(MCI, OUTPUT);
 pinMode(LED1, OUTPUT);
 pinMode(LED2, 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);
 }


 void loop() // VEDI DIAGRAMMA DI FLUSSO -------------
{
 digitalWrite(MPA,HIGH);
 digitalWrite(MCA,HIGH);

 }

 
   if(digitalRead(FC1)==0) //FCORSA APERTURA NON attivato
 {
 digitalWrite(MCA,LOW);
 digitalWrite(LED1,HIGH);
 delay(10000);
 }
   
if(digitalRead(FP2)==0) //FCORSA APERTURA NON attivato
 {
 digitalWrite(MPA,LOW);
 digitalWrite(LED1,HIGH);
 delay(10000);
 }
 
 
 {
 digitalWrite(MPA,HIGH);
 digitalWrite(MCI,HIGH);

 }
 {
 
      if(digitalRead(FC2)==0) //FCORSA APERTURA NON attivato
 {
 digitalWrite(MCI,LOW);
 digitalWrite(LED1,HIGH);
 delay(10000);
 }
   
 if(digitalRead(FP3)==0) //FCORSA APERTURA NON attivato
 {
 digitalWrite(MPA,LOW);
 digitalWrite(LED1,HIGH);
 delay(10000);
 }
 }
 
 {
 digitalWrite(MPA,HIGH);
 digitalWrite(MCA,HIGH);

 }
 {
 
   if(digitalRead(FC1)==0) //FCORSA APERTURA NON attivato
 {
 digitalWrite(MCA,LOW);
 digitalWrite(LED1,HIGH);
 delay(10000);
 }
   
 if(digitalRead(FP4)==0) //FCORSA APERTURA NON attivato
 {
 digitalWrite(MPA,LOW);
 digitalWrite(LED1,HIGH);
 delay(10000);
 }
 }
 
 {
 digitalWrite(MPA,HIGH);
  digitalWrite(MCI,HIGH);

 }
 {
   
   if(digitalRead(FC1)==0) //FCORSA APERTURA NON attivato
 {
 digitalWrite(MCI,LOW);
 digitalWrite(LED1,HIGH);
 delay(10000);
 }
 
 if(digitalRead(FPR)==0) //FCORSA APERTURA NON attivato
 {
 digitalWrite(MPA,LOW);
 digitalWrite(LED1,HIGH);
 delay(10000);
 }
 }

{
 digitalWrite(MPI,HIGH);

 }
 
 {
 
 if(digitalRead(FP1)==0) //FCORSA APERTURA NON attivato
 {
 digitalWrite(MPI,LOW);
 digitalWrite(LED1,HIGH);
 delay(10000);
 }
 }
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: gpb01 on Mar 03, 2016, 10:23 pm
@orzowilde:  Non riesco a trovare il tuo post di presentazione ... forse è andato perso ::) ... vorrei quindi pregarti di presentarti QUI (http://forum.arduino.cc/index.php?topic=113640.0) (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO (http://forum.arduino.cc/index.php?topic=149082.0) (che magari, nel frattempo, è un po' cambiato ;)) ... Grazie. :)

Guglielmo
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: uwefed on Mar 03, 2016, 10:36 pm
la funzione loop() che viene ripetuto é
Code: [Select]
void loop() // VEDI DIAGRAMMA DI FLUSSO -------------
{
 digitalWrite(MPA,HIGH);
 digitalWrite(MCA,HIGH);

 }

Tutto il resto non viene eseguito perché fuori dalla funzione loop()

Per risolvere prova di formattare il sketch bene (rientrare quando apri una parentesi) come per esempio:

Code: [Select]
void loop() // VEDI DIAGRAMMA DI FLUSSO -------------
  {
  digitalWrite(MPA,HIGH);
  digitalWrite(MCA,HIGH);
  if(digitalRead(FC1)==0)
    {
    digitalWrite(MCA,LOW);
    digitalWrite(LED1,HIGH);
    delay(10000);
    }
  }


cosí Ti accorgi se parentesi graffe sono messe nei posti sbagliati e/o mancano.

Evita il delay() e fai il pilotaggio delle diverse fasi con i finecorsa. ( gira finche il sensore x é attivato ecc.)

Ciao Uwe
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 03, 2016, 11:13 pm
Ciao uwefed e grazie per la risposta...

Ho sistemato un pò il tutto e mi verifica bene l'IDE...

Ti posso chiedere 2 favori?

1. Ti posso postare il codice corretto per dargli una controllata?
2. Secondo te il codice farà quello che ho descritto nella mia richiesta di aiuto?

Grazie anticipatamente per la risposta.

Code: [Select]
/* AUTOMAZIONE PIAZZETTA SIGNURARA
 FP1 FineCorsa primo step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FP2 FineCorsa secondo step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FP3 FineCorsa terzo step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FP4 FineCorsa quarto step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FC1 FineCorsa primo step Cubo, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FC2 FineCorsa secondo step Cubo, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
*/
# define FP1 2    //Finecorsa1 pedana collegato al pin digitale n.2
# define FP2 3    //Finecorsa2 pedana collegato al pin digitale n.3
# define FP3 4    //Finecorsa3 pedana collegato al pin digitale n.4
# define FP4 5  //Finecorsa4 pedana collegato al pin digitale n.5
# define FC1 6    //Finecorsa1 cubo collegato al pin digitale n.6
# define FC2 7    //Finecorsa2 cubo collegato al pin digitale n.7
# define MPA 8    //Relè Motore avanti pedana
# define MPI 9    //Relè Motore indietro pedana
# define MCA 10   //Relè Motore avanti cubo
# define MCI 11   //Relè Motore indietro cubo
# define FPR 32  //Finecorsa RITORNO pedana collegato al pin digitale n.32
# define LED1 22   //Faretto
# define LED2 23   //Faretto
# define LED3 24   //Faretto
# define LED4 25   //Faretto
# define LED5 26   //Faretto
# define LED6 27   //Faretto
# define LED7 28   //Faretto
# define LED8 29   //Faretto
# define LED9 30   //Faretto
# define LED10 31   //Faretto


int statoFP1 = 1; //Definiz. e assegnaz. delle variabili di programma
int statoFP2 = 1;
int statoFP3 = 1;
int statoFP4 = 1;
int statoFC1 = 1;
int statoFC2 = 1;
int RITARDO = 0;
int STATO = 0;

/* STATO=0 CHIUSO
 STATO=1 AVANTI
 STATO=2 CHIUSURA
 STATO=3 APERTO-TEMPORIZZAZIONE
*/
void setup()
{
  pinMode(FP1, INPUT); //Impostaz. dei piedini di Arduino come INPUT o OUTPUT
  pinMode(FP2, INPUT);
  pinMode(FP3, INPUT);
  pinMode(FP4, INPUT);
  pinMode(FPR, INPUT);
  pinMode(FC1, INPUT);
  pinMode(FC2, INPUT);
  pinMode(MPA, OUTPUT);
  pinMode(MPI, OUTPUT);
  pinMode(MCA, OUTPUT);
  pinMode(MCI, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, 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);
}


void loop() // VEDI DIAGRAMMA DI FLUSSO -------------
{
  digitalWrite(MPA, HIGH);
  digitalWrite(MCA, HIGH);


  if (digitalRead(FC1) == 0) //FCORSA APERTURA NON attivato
  {
    digitalWrite(MCA, LOW);
    digitalWrite(LED1, HIGH);
    delay(10000);
  }

  if (digitalRead(FP2) == 0) //FCORSA APERTURA NON attivato
  {
    digitalWrite(MPA, LOW);
    digitalWrite(LED1, HIGH);
    delay(10000);
  }


  digitalWrite(MPA, HIGH);
  digitalWrite(MCI, HIGH);

  if (digitalRead(FC2) == 0) //FCORSA APERTURA NON attivato
  {
    digitalWrite(MCI, LOW);
    digitalWrite(LED1, HIGH);
    delay(10000);
  }

  if (digitalRead(FP3) == 0) //FCORSA APERTURA NON attivato
  {
    digitalWrite(MPA, LOW);
    digitalWrite(LED1, HIGH);
    delay(10000);
  }

  digitalWrite(MPA, HIGH);
  digitalWrite(MCA, HIGH);


  if (digitalRead(FC1) == 0) //FCORSA APERTURA NON attivato
  {
    digitalWrite(MCA, LOW);
    digitalWrite(LED1, HIGH);
    delay(10000);
  }

  if (digitalRead(FP4) == 0) //FCORSA APERTURA NON attivato
  {
    digitalWrite(MPA, LOW);
    digitalWrite(LED1, HIGH);
    delay(10000);
  }


  digitalWrite(MPA, HIGH);
  digitalWrite(MCI, HIGH);


  if (digitalRead(FC1) == 0) //FCORSA APERTURA NON attivato
  {
    digitalWrite(MCI, LOW);
    digitalWrite(LED1, HIGH);
    delay(10000);
  }

  if (digitalRead(FPR) == 0) //FCORSA APERTURA NON attivato
  {
    digitalWrite(MPA, LOW);
    digitalWrite(LED1, HIGH);
    delay(10000);
  }


  digitalWrite(MPI, HIGH);


  if (digitalRead(FP1) == 0) //FCORSA APERTURA NON attivato
  {
    digitalWrite(MPI, LOW);
    digitalWrite(LED1, HIGH);
    delay(10000);
  }
}
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 06, 2016, 04:42 pm
Salve a tutti, ho fatto decine di prove con il codice postato che secondo me era corretto, ma mi sto pian piano convincendo (dopo tante ricerche su internet) che non è affatto funzionante. Il mio problema è che non riesco a far capire ad Arduino cosa deve fare. Ci sarebbe qualcuno disposto a darmi una mano per farmi capire come impostare il mio progetto?

Grazie anticipatamente.
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: gpb01 on Mar 06, 2016, 04:55 pm
Guarda, il mio consiglio è di buttare tutto, ricominciare da capo e ... FARE UN PASSO ALLA VOLTA ...
... cercare di fare tutto assieme non porta mai a nulla di buono ... quindi, dividi in fasi il tuo progetto, comincia dalla prima fase (es. "far girare una pedana circolare in senso orario che si fermi 4 volte per tot secondi in punti precisi") e solo quando questa prima fase sarà perfettamente funzionante ed ottimizzata passi ad una fase successiva, e così via.

Vedrai che in questo modo arrivi a sviluppare tutto il tuo progetto ;)

Guglielmo
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 06, 2016, 05:36 pm
Grazie per la risposta...
Forse è  proprio questo il fatto... sono confuso...
Ho collegato su breadboard l'arduino e messo solo il codice che mi dovrebbe stoppare  il relè del motore dive ci sono i finecorsa che mu arrivano domani.
In sostituzione ho messo dei bottoni per pcb collegati in pullup con delle resistenze da 10kohm, ma l'arduino fa quello che vuole... o meglio non glielo faccio capire che deve fare...

Il problema secondo me è  che non ho capito come funzionano bene le istruzioni if o switch case...

Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: gpb01 on Mar 06, 2016, 06:04 pm
Guarda, potresti cominciare con lo studiare un po' più approfonditamente QUESTO (http://cabestano.altervista.org/alterpages/files/TizianaMarsella-ProgrammareArduino.pdf) e puoi scaricarti QUESTO  (http://it-ebooks.info/book/1581/)libro (... tranquillo, è un sito legale, purché per esclusivo uso PERSONALE).

Guglielmo
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 08, 2016, 11:41 am
Salve a tutti!
Ho seguito il consiglio di gpb01 che gentilmente mi ha passato delle guide su cui poter approfondire in questi giorni le funzioni di arduino.

Ho tirato un pò le somme e per gestire un pò il tutto dovevo cambiare totalmente il codice proposto prima.

Ho fatto delle prove cercando di gestire solo la pedana mobile e non i cubi che poggiano sopra per semplificare un po il codice e capirci un pochino anch'io.

Il ragionamento che ho seguito a mio parere sembrava logico, ma non l'ho potuto verificare perche l'IDE mi da degli errori e oltretutto non so i comandi che devo mettere per far partire il motore.

Vi incollo il codice con la speranza che ci sia qualcuno che possa darmi una mano a capire gli sbagli e le eventuali correzioni.
Mi dispiace ma non sono un programmatore ma volenteroso nel capire :smiley-confuse: ....

Grazie

Code: [Select]
/* AUTOMAZIONE PIAZZETTA SIGNURARA
 FP1 FineCorsa primo step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FP2 FineCorsa secondo step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FP3 FineCorsa terzo step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FP4 FineCorsa quarto step pedana, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FC1 FineCorsa primo step Cubo, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
 FC2 FineCorsa secondo step Cubo, che chiuderà verso massa il circuito restituendo un livello logico zero; collegare R di pull-up (10K) tra piedino di Arduino e +5V
*/

# define FP1 2    //Finecorsa1 pedana collegato al pin digitale n.2
# define FP2 3    //Finecorsa2 pedana collegato al pin digitale n.3
# define FP3 4    //Finecorsa3 pedana collegato al pin digitale n.4
# define FP4 5  //Finecorsa4 pedana collegato al pin digitale n.5
# define FPR 8 //Finecorsa RITORNO pedana collegato al pin digitale n.8
# define MPA 9    //Relè Motore avanti pedana
# define MPI 10    //Relè Motore indietro pedana
# define LED1 13   //Faretto 13

int letturaFP1 = 1; //Definiz. e assegnaz. delle variabili di programma
int letturaFP2 = 1;
int letturaFP3 = 1;
int letturaFP4 = 1;
int letturaFPR = 1;

int FP1;
int FP2;
int FP3;
int FP4;
int FPR;
int MPA;
int MPI;
int LED1;

int FP1temp;
int FP2temp;
int FP3temp;
int FP4temp;
int FPRtemp;
int MPA;
int MPI;
int posizMPA;
int posizMPI;

int k;

unsigned long time;
unsigned long MPAtime;
unsigned long MPItime;
unsigned long letturadati;
unsigned long letturafinec_time;


void setup()
    {
     pinMode(FP1, INPUT); //Impostaz. dei piedini di Arduino come INPUT o OUTPUT
     pinMode(FP2, INPUT);
     pinMode(FP3, INPUT);
     pinMode(FP4, INPUT);
     pinMode(FPR, INPUT);
     pinMode(MPA, INPUT);
     pinMode(MPI, INPUT);
     Serial.begin(9600);

     time=millis();

     MPAtime=millis();
     MPItime=millis();
     letturadati=millis();
     letturafinec_time=millis();

     k=0;
     FP1=0;
     FP2=0;
     FP3=0;
     FP4=0;
     FPR=0;

    }

void loop()
    {
      time=millis();
        if (time>letturafinec_time+5)
          {
            FP1=digitalRead(FP1);
            FP2=digitalRead(FP2);
            FP3=digitalRead(FP3);
            FP4=digitalRead(FP4);
            FPR=digitalRead(FPR);
           
            k=k+1;
            FP1temp=FP1temp+FP1;
            FP2temp=FP2temp+FP2;
            FP3temp=FP3temp+FP3;
            FP4temp=FP4temp+FP4;
            FPRtemp=FPRtemp+FPR;
          }
     

      if(k==20)
        {
          k=0;

          letturaFP1=FP1temp/20;
          letturaFP2=FP2temp/20;
          letturaFP3=FP3temp/20;
          letturaFP4=FP4temp/20;
          letturaFPR=FPRtemp/20;

          FP1temp=0;
          FP2temp=0;
          FP3temp=0;
          FP4temp=0;
          FPRtemp=0;
                   
         
        }

       if(time>MPAtime+15)
        {
          posizMPA=digitalRead(letturaFP1);
         
          posizMPA=(posizMPA,0,1);  //Non capisco che tipo di comando devo mettere...

          digitalWrite(MPA,HIGH);  //Non capisco che tipo di comando devo mettere...
         
          MPAtime=millis();
         
        }

       if(time>letturadati+3000)
        {
          Serial.print("FP1: ");
          Serial.println(letturaFP1, DEC);
          Serial.print("FP2: ");
          Serial.println(letturaFP2, DEC);
          Serial.print("Posizione MPA: ");
          Serial.println(posizMPA, DEC);
          Serial.print("Posizione MPI: ");
          Serial.println(posizMPI, DEC);
          Serial.print("FP3: ");
          Serial.println(letturaFP3, DEC);
          Serial.print("FP4: ");
          Serial.println(letturaFP4, DEC);
          Serial.print("FPR: ");
          Serial.println(letturaFPR, DEC);
   

              letturadati=millis();
        }

           
    }




Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 08, 2016, 10:54 pm
Non so se sbaglio qualcosa nel modo di porre le mie domande...
Come mai nessuno mi risponde?
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: gpb01 on Mar 08, 2016, 11:12 pm
... ci vuole molta pazienza e, come spiega il regolamento, aspettare almeno 48 ore prima di fare "up" ;) ... non sempre tutti sono qui e disponibili :)

Però ... non hai fatto un passo per volta come ti avevo detto, ma già hai messo molta carne al fuoco ...
... perché NON cominci semplicemente a capire SOLO come far girare la pedana (... che mi sembra già per te un primo problema) ?

T'ho detto, metti tutto da parte, parti con un programma VUOTO ed inizia UNA COSA PER VOLTA ... o non ne esci.

Quindi ...
1. metti uno schema di come hai collegato il motore che fa girare la pedana
2. metti il codice che serve SOLO a far girare la pedana

Quando il tutto sarà giusto (HW + SW) si passerà al controllo delle 4 posizioni.

Guglielmo
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Mar 08, 2016, 11:40 pm
Quote
Come mai nessuno mi risponde?
perche' ad esempio l'ultimo codice che hai inserito è talmente contorto, privo di senso e con tanti di quegli errori che è quasi impossibile commentarlo.
e' come trovarsi davanti a un eschimese e chiedere dove trovare della mozzarella..
cosa c'entra questo con la tua richiesta ? Niente, è questo il problema

Comunque, siamo tutti quà, fai come dice Guglielmo, inizia con farci vedere come hai collegato il motore e inizia con uno sketch semplice,.
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 09, 2016, 02:37 am
Avete ragione @gpb01 e @brunello, devo fare un passo per volta... domani disegnerò gli schemi e abbozzerò uno sketch semplice che mi consenta di far girare la pedana....

Grazie ancora
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 09, 2016, 11:27 am
Salve, sono di nuovo qui! :)

Ho disegnato lo schema dei soli motori con arduino.

https://drive.google.com/file/d/0B35zM9TEzeXJRHNJZDBabHRTRnM/view?usp=sharing

e qui incollo il semplice codice che mi attiva il motore della pedana in avanti...

Code: [Select]
/* AUTOMAZIONE PIAZZETTA SIGNURARA
 
*/


# define MPA 9    //Relè Motore avanti pedana
# define MPI  10   //Relè Motore indietro pedana


void setup()
    {
 
     pinMode(MPA, OUTPUT);
     pinMode(MPI, OUTPUT);

    }

void loop()


    {
      digitalWrite(MPA,HIGH);
     
          }


Intanto sto creando lo schema dei finecorsa sempre della pedana.

Qual'è il prossimo passo?
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 09, 2016, 11:57 am
Questo credo che possa essere il prossimo passo...

Dei finecorsa che chiuderanno verso massa il circuito restituendo un livello logico zerocon resistenza di pull-up (10K) tra piedino di Arduino e +5V.

Allego schema circuito motori pedana più finecorsa pedana.

https://drive.google.com/file/d/0B35zM9TEzeXJSEVCZWJ4aFF3elU/view?usp=sharing

Grazie
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Mar 09, 2016, 07:06 pm
All'inizio dici
Quote
2 schede relè da 8 moduli per comandare 2 motori, uno per la pedana ed uno per il cubo (1 relè avanti ed uno indietro per ogni motore).
1) non avrai mica idea di collegare l'alimentazione delle schede relè come hai disegnato ?
prevedi da subito un alimentatore esterno
2) Un motore Avanti-Indietro o 2 motori ?
Di che motori si tratta ?
3) Al motore va' direttamente il Neutro, non la Fase
4) Hai collegato male i relè al motore, il Common è il centrale
5) Quando disegni, fai attenzione, i cavi di alimentazione del 5V vanno sulla Breadboard nelle due righe orizzontali, tu li hai collegati in mod errato. E non venire a dire "che si capisce"

Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 10, 2016, 02:08 am
Salve, e grazie a @Brunello per la risposta ed i consigli...

Comunque:

1. Ho provveduto all'alimentazione supplementare delle schede relay.
2. Avevo previsto un motore che facesse avanti ed indietro ma visto che non so come fare per fargli cambiare rotazione in alternativa potrei mettere 2 motori...

Hai qualche consiglio da darmi in merito?? Io sto usando dei motori ridotti o motoriduttore da 24V non so come si dice con queste caratteristiche. Premi qui! (https://drive.google.com/file/d/0B35zM9TEzeXJVGpwcXNLajBrV1U/view?usp=sharing)

3. Corretto errore fase neutro
4.Non avevo fatto caso al simbolino sul relè comunque corretto.
5. Non ho capito bene questo punto ma penso ti riferissi hai collegamenti della resistenza...

Il nuovo schema è qui! (https://drive.google.com/file/d/0B35zM9TEzeXJY3ZoT1RobE9uNGM/view?usp=sharing)
Penso non ci siano altri errori.

Cosa mi puoi consigliare? Come posso proseguire nella compilazione del codice?

Grazie
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Mar 10, 2016, 12:25 pm
Quote
1. Ho provveduto all'alimentazione supplementare delle schede relay.
guarda QUI (http://forum.arduino.cc/index.php?topic=368567.msg2541206#msg2541206) come alimentare correttamente codeste schedine.


Quote
2. Avevo previsto un motore che facesse avanti ed indietro ma visto che non so come fare per fargli cambiare rotazione in alternativa potrei mettere 2 motori...
Con solo due relè SPDT, vedo una sola possibilità di collegamento.

(https://s-media-cache-ak0.pinimg.com/originals/01/90/8c/01908c597e07f8526704634242fd4e92.jpg)
Secondo me, i relè di codeste schedine sono un pò miserini per pilotare il motore........

comincia a buttare giù uno sketch

Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 10, 2016, 03:11 pm
Hai ragione non non sapevo che l'alimentazione supplementare si collegasse così...

Per quanto riguarda la rotazione avanti ed indietro del motore devo dire che quei tipi di collegamenti sono una cosa geniale... Complimenti per la tua preparazione!!

Comunque posso abbozzare lo sketch che comanda le due rotazioni del motore o che includa anche i finecorsa... No perchè il mio problema era quale funzione e meglio usare per leggere lo stato dei finecorsa (if... else.... switch... case....).

Secondo te cosa è meglio usare, o meglio come impostare lo sketch?

grazie
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 11, 2016, 11:31 am
Salve, ho cercato di buttare giù un codice...

Prima di postare il codice voglio mettere il link del circuito corretto (https://drive.google.com/file/d/0B35zM9TEzeXJM2lJaTFsYURzejA/view?usp=sharing), e un immagine che illustra l'inizio del progetto che voglio eseguire... (https://drive.google.com/file/d/0B35zM9TEzeXJMHVHeVZHajhScVU/view?usp=sharing).

Questo è il codice che ho abbozzato...

Code: [Select]
/* AUTOMAZIONE PIAZZETTA SIGNURARA
 
*/


# define rele1 10    //Relè1
# define rele2 9   //Relè2
# define finec1 2   //Finecorsa inizio
# define finec2 3   //Finecorsa primo step
# define finec3 4    //Finecorsa secondo step
# define finec4 5   //Finecorsa terzo step
# define finecRitorno 8   //Finecorsa quarta step e ritorno


void setup()
   
    {
 Serial.begin(9600); // for serial monitor output
     pinMode(rele1, OUTPUT);
     pinMode(rele2, OUTPUT);
     pinMode(finec1, INPUT);
     pinMode(finec2, INPUT);
     pinMode(finec3, INPUT);
     pinMode(finec4, INPUT);
     pinMode(finecRitorno, INPUT);     
    }


void loop()
{

   if (finec1==HIGH || finec2==HIGH || finec3==HIGH || finec4==HIGH)  //Se i finecorsa non sono attivi - finecorsa collegati con resistenze di pull-up (10K) tra piedino di Arduino e +5V

      {
        digitalWrite(rele1,LOW);
        digitalWrite(rele2,HIGH); //il motore deve girare in avanti.
       
      }

    if (finec1==LOW || finec2==LOW || finec3==LOW || finec4==LOW)  //Se i finecorsa sono attivi - finecorsa collegati con resistenze di pull-up (10K) tra piedino di Arduino e +5V

      {
        digitalWrite(rele1,LOW);
        digitalWrite(rele2,LOW); //il motore si deve fermare.
       
      }


    if (finecRitorno==LOW)  //Se il finecorsa che indica che si deve ritornare al primo step è attivo - finecorsa collegati con resistenze di pull-up (10K) tra piedino di Arduino e +5V

      {
        digitalWrite(rele1,HIGH);
        digitalWrite(rele2,LOW); //il motore deve tornare indietro al primo step.
      }
 
}



Il succo è questo:
La pedana si deve fermare ad ogni step e rimanere in quella posizione per 1 minuto per poi ripartire ed andare avanti al prossimo finecorsa, fino ad arrivare al finecorsa di ritorno. Una volta arrivato al finecorsa di ritorno si deve fermare sempre per 1 minuto per poi ripartire all'indietro fino al finecorsa 1 cioè quello di inizio....

Come faccio a gestire questa temporizzazione??

grazie
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Mar 11, 2016, 03:48 pm
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
Code: [Select]

# 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

(https://s-media-cache-ak0.pinimg.com/originals/a2/94/3a/a2943ab9d652bae37bd1507bd1bcec29.jpg)
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 11, 2016, 09:17 pm
Ciao Brunello è grazie per l'aiuto che mi stai dando.
Per il fatto della lettura dei finecorsa nello sketch che ho fatto io è stata una dimeticanza (e anche grossa)!

Ma ho visto che lo sketch che ho abbozzato io non c'entra niente con quello completo che hai postato tu….
E meno male che non ho caricato la struttura del programma che avevo fatto su carta… avresti riso per un mese…

Comunque domattina provo il tuo sketch e proverò ad inserire le accensioni dei faretti e il movimento del motore del cubo tra gli altri 2 finecorsa che deve essere sincronizzato con gli step della pedana…

Ancora grazie.
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 12, 2016, 12:56 pm
Salve Brunello....

Stamattina ho provato lo sketch che hai postato e funziona alla grande!!!

Dopo di ciò ho seguito la tua logica per far muovere il cubo sopra la pedana mobile ma niente da fare...

I relè si eccitano ma in maniera sbagliata e senza sincronizzazione tra pedana e cubo...

Ho disegnato gli step che deve fare la pedana e simultaneamente il cubo.

Questa è la posizione iniziale (https://drive.google.com/file/d/0B35zM9TEzeXJR0xhYlltQldSTG8/view?usp=sharing) della pedana e del cubo.

Questi sono gli altri step (https://drive.google.com/file/d/0B35zM9TEzeXJUk9mWHpLMkZSNWs/view?usp=sharing) che devono compiere.

Mentre la pedana si muove per raggiungere il prossimo step, il cubo si deve muovere pure insieme per raggiungere l'altra posizione.

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.

Questo è il codice che ho fatto partendo dal tuo...

Quali sono gli errori che ho commesso??

Grazie
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Mar 12, 2016, 01:54 pm
Quote
Questo è il codice che ho fatto partendo dal tuo...

Quali sono gli errori che ho commesso??
bella domanda........
se inserisci il codice potrei anche dirtelo
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 12, 2016, 05:03 pm
Ciao Brunello.... ero convinto di avere postato già il codice...

Eccolo:

Code: [Select]

# 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");
  delay(ritardo);
 
 // attivare cubo
  Serial.println("Inizia primo step Cubo");
  motore_cubo_indietro();
  while (digitalRead(FC1) == HIGH ){
    if (digitalRead(FC2) == 0)
      {
        stato_errore = true;
        break;
      }
    }
    if (stato_errore)
      {
        errore_sensori();
      }
  Serial.println("finito Primo Step 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

  Serial.println("Inizia Secondo Step Cubo");
  motore_cubo_avanti() ;
  while (digitalRead(FC2) == HIGH ) {
    if (digitalRead(FC1) == 0)
    {
      stato_errore = true ;
      break ;
    }
  }
  motore_cubo_stop();
  if (stato_errore)
  {
    errore_sensori();
  }
  Serial.println("finito Secondo Step 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
 
   Serial.println("Inizia Terzo Step Cubo");
  motore_cubo_indietro() ;
  while (digitalRead(FC1) == HIGH ) {
    if (digitalRead(FC2) == 0)
    {
      stato_errore = true ;
      break ;
    }
  }
  motore_cubo_stop();
  if (stato_errore)
  {
    errore_sensori();;
  }
  Serial.println("finito Terzo Step 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
 
  Serial.println("Inizia Quarto Step");
  motore_cubo_avanti() ;
  while (digitalRead(FC2) == HIGH ) {
    if (digitalRead(FC1) == 0)
    {
      stato_errore = true ;
      break ;
    }
  }
  motore_cubo_stop();
  if (stato_errore)
  {
    errore_sensori();
  }
  Serial.println("finito Quarto Step Cubo");
 
  // 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, HIGH);
  digitalWrite(MCI, LOW);
}

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

void motore_cubo_stop() {
  digitalWrite(MCA, LOW);
  digitalWrite(MCI, LOW);
}
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Mar 12, 2016, 05:47 pm
Quote
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

Code: [Select]

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
Code: [Select]
// 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
Code: [Select]

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

Code: [Select]


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



Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 12, 2016, 06:16 pm
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....
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 14, 2016, 01:18 pm
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
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Mar 14, 2016, 04:05 pm
questo fa' partire i motori insieme

Code: [Select]


# 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);
}
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 14, 2016, 06:19 pm
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...
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Mar 14, 2016, 07:55 pm
prova a fare un test
Code: [Select]


# 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);
}
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 14, 2016, 09:18 pm
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...
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 15, 2016, 08:11 pm
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
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 16, 2016, 10:31 am
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 (http://www.ebay.it/itm/222007515712?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT) per la pedana e questo (http://www.ebay.it/itm/221726825123?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT) per il cubo, e lo sketch mi si blocca...
Non è che magari, nella mia ignoranza, devo cambiare resistenza?

Grazie
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Mar 16, 2016, 10:38 am
Quote
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 ?
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Mar 16, 2016, 11:05 am
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
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Mar 16, 2016, 12:34 pm
attualmente, fino a che i sensori non sono tutti e due attivi resta nel ciclo

Code: [Select]
while (digitalRead(FP2) != LOW || digitalRead(FC2) != LOW )


potresti modficarlo cosi'

Code: [Select]

// 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);
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Apr 01, 2016, 06:53 pm
Salve Brunello, non ho più risposto perchè abbiamo perso tempo nella realizzazione del progetto (pedana e cubi).
Allora, in questo video (https://youtu.be/OlwfR_ya5C8) 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:
Code: [Select]
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
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Apr 02, 2016, 03:27 pm
Quote
Ho commesso degli errori??
a parte l'uso errato di int
Code: [Select]
unsigned int pausa = 300000 ;

che va' corretto in
Code: [Select]

unsigned long pausa = 300000 ;


Se ti funziona di errori non dovrebbero essercene

comunque ecco lo sketch come chiedevi
Code: [Select]


# 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 ?
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Apr 02, 2016, 04:58 pm
 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,  (https://youtu.be/E-OksrTPinQ)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
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Apr 02, 2016, 05:10 pm
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

Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Apr 02, 2016, 05:29 pm
Adesso il link funziona....
Quindi potrei anche lasciarlo il 4 step e lui si ferma lo stesso al terzo?
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: brunello22 on Apr 04, 2016, 12:52 am
no, se lo lasci lo fa'
nello sketch e' commentato, proprio per non farglielo eseguire
Title: Re: Errore codice per progetto arduino Pedana mobile
Post by: orzowilde on Apr 04, 2016, 02:53 am
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.