Go Down

Topic: Semaforo Complesso OK-Flip Flop Semplice ( e non ci salto fuori). (Read 6131 times) previous topic - next topic

docsavage

rimane da dire che non lo ho ancora debuggato

ci metto di meno a scrivere il rpogramma che attaccare i led

comunque compilare compila
al monitor seriale lo stato del semaforo cicla
il led 13 lampeggia, ad indicare il funzionamento della scheda


semmai c'è qualche corrispondenza nome-piedino-colore del led da mettere a posto o cose così

nel pomeriggio vado a casa (adesso sono in ferie, e non cominciamo a dire che dalle feria vedo a casa una volta al giorno, se non volete una vita complicata non fate domande)

dicevo nel pomeriggio vado a casa e imbarco una manciata di relè e una breadboard, per provare a vedere le lucine

invece, per le malelingue che hanno subito detto che potrebbe essere necessario avere vie preferenziali con tempi differenti

dimostrano solo di non saper leggere

i tempi tra la via uno e la due erano differenti già fin dal primo post dove ne parlavo.....
oltre a non capire il tag code, non sanno nemmeno leggere,
che squallore..............


se qualcuno volesse seriamente, magari per un plastico, espandere il semaforo con altre vie o tempi
è semplice:

basta dichiarare le nuove paline (eventualmente con una MEGA invece che una UNO)
e ri-scrivere la tabella delle configurazioni possibili, scrivendole in un ciclo che parta dal doppio rosso

comunque il programma è documentato, e parimenti documentato il metodo che ho usato per scriverlo


buon pomeriggio a tutti
E' stato bello... ma appunto: è stato
Ocio, che adesso c'è qualcuno che dice le stesse cose per le quali mi martellavate... Il tempo è galantuomo

Etemenanki

...
la saggezza orientale contiene sempre un lato "oscuro",
...
Heheh ... mi fai venire in mente il vecchio "augurio" orientale ... "ti auguro di vivere in tempi interessanti" ... di solito lo si fa ai nemici ... uno potrebbe chiedersi perche' ?

Be', calma, pace, tranquillita', sono desiderabili ma non molto "interessanti" ... che c'e' di piu "interessante" ? ... vediamo, guerre, alluvioni, terremoti, carestie, pestilenze, catastrofi ... :D :D :D
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

docsavage

io in oriente ci sono stato
non fa per me

la saggezza di un popolo si misura anche da quanto riescono a risolvere i loro problemi materiali

non credo che un popolo che la mattina raccoglie i morti con la nettezza urbana (vabbe', loro usano un altro nome) abbia qualcosa da insegnarmi, credo piuttosto che abbiano sbagliato strada,
molto molto tempo fa, se ne sono accorti, ma per non ammetterlo si raccontano un fracco di storie

do più credito ai cinesi, che infatti da loro stessi imitano più dapresso gli americani..........

anche questo fa pensare
E' stato bello... ma appunto: è stato
Ocio, che adesso c'è qualcuno che dice le stesse cose per le quali mi martellavate... Il tempo è galantuomo

Claudio_FF

Quote from: docsavage
Code: [Select]
// testo se abbiamo gia' raggiunto il tempo
  if (tempo < millis()) {
    // cambio stato semaforo
    luci(sequenza[stato]);
  }

Attenzione che per quanto detto nel mio post precedente, e per il fatto che X<millis() e millis()>X sono equivalenti, quella condizione soffre del problema dell'overflow. In pratica per tutto il lasso di tempo in cui 'tempo' ha già passato lo zero mentre millis() ritorna ancora valori elevati, la condizione risulta vera ad ogni ciclo di loop... ma di questo ci si accorge solo dopo cinquanta giorni  ;)
* * * *    'if' e 'case' non sono cicli   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *
* La corrente si misura in 'mA', la quantità di carica in 'mAh' *

Puso

Dunque

non rimetto il codice perche prima devo capire come aprire le finestre...dopo la sgridata di Guglielmo.

Sta di fatto che corretta la castrazione che mi ha fatto notare docsavage e strarifatte alcune piccole ulteriori modifiche per togliere le cose inutili e per descrive quello che volevo fare il il tutto non funziona lo stesso.

Specifico:
 -Il circuito funziona.
 -Gli schetc,nonostante le ripetute prove in Mille Modi Differenti non hanno errori.

Sta di fatto che che se nelle Graffe del Millis metto un digitalWrite,il tutto funziona correttamente ed il SerialMonitor  noto che lo riporta(anche se non so ancora sfruttarlo ne leggerlo bene).

Se invece nelle Graffe del Mills dico di cambiare in valore di un INT,semplicemente non lo cambia e sul SerialMonitor appaiono invece di 1 come mi aspettavo,appare un numero a caso a volte positivo a volte negativo,ma senza un apparente senso logico tipo +-199367 ,

il tutto solo una volta.







docsavage

Ok, lo sapevo del problema dello overfolw

Ma abbiamo 50 giorni di tempo per metterlo a posto

Stasera arrivo alla casa delle ferie e mi porto avanti, spero

I miei piani sembrano fatti per non essere rispettati
E' stato bello... ma appunto: è stato
Ocio, che adesso c'è qualcuno che dice le stesse cose per le quali mi martellavate... Il tempo è galantuomo

Puso

docsavage facciamo un accordo nei 50 giorni  di tempo tu mi cerchi di risolvermi il problema....ed io cerco di imparare il più possibile.

Chi vince offre un caffè al PERDENTE.
Ci stai??

docsavage

Per il caffè nessun problema

Per il problema invece sì
Perché io più di quelli che ho fatto finora non posso fare....

Casomai fai domande specifiche.....
E' stato bello... ma appunto: è stato
Ocio, che adesso c'è qualcuno che dice le stesse cose per le quali mi martellavate... Il tempo è galantuomo

astrobeed

Ok, lo sapevo del problema dello overfolw
Che in realtà non è un vero problema, qui tutta la spiegazione della cosa e come risolvere.
Scientia potentia est

docsavage

Infatti non ne ero minimamente preoccupato

La cosa che mi premeva, è mi preme, è vedere le luci sulle paline

La questione millis è secondaria, se non si riesce almeno a far girare il semaforo come deve.....


E' stato bello... ma appunto: è stato
Ocio, che adesso c'è qualcuno che dice le stesse cose per le quali mi martellavate... Il tempo è galantuomo

docsavage

Cortesi signori spero abbiate passato un bel pomeriggio

io sì

e avendo ieri imbarcato una manciata di led da casa questo pomeriggio, dopo pennica ho provato a far andare il mio semaforo

che va alla grande, salvo un solo problema

il servizio notturno impazziva, a parte questo andato al primo tentativo

ho riscritto la parte di codice che attiva il servizio notturno, cambiate alcune tempistiche, per renderle meno reali, ma più scenografiche

aggiunto un ciclo di accensione spegnimento di tutti i led all'avvio, durante la setup

per testare le connessioni (se non vi si accende all'avvio è guasto o scollegato)

e ho aggiunto una variabile in più (necessaria per la nuova gestione del ciclo notturno)

altro non saprei

ah

a proposito di millis

non son stato li ad evitare lo overflow

per uso scenografici (plastico) non è un problema

se qualcuno volesse, non è difficile da mettere a posto
casomai chiedete, tanto fatto 30 posso fare anche 31
ho deciso che non uso il tag code, vi allego il file, contenti?
nonononon al brutto bottone </>
così do un colpo al cerchio ed uno alla botte

Sono gradite critiche, da gente che sa leggere......
E' stato bello... ma appunto: è stato
Ocio, che adesso c'è qualcuno che dice le stesse cose per le quali mi martellavate... Il tempo è galantuomo

docsavage

ultimo aggiornamento

se passo a notturno con pedonale prenotato non va bene bene

se a qualcuno di voi serve ci guardo, altrimenti per me mi fermo qui

E' stato bello... ma appunto: è stato
Ocio, che adesso c'è qualcuno che dice le stesse cose per le quali mi martellavate... Il tempo è galantuomo

Puso

docsavage e tutti gli altri

grazie per lo spunto.

ora ci ristudio sù.

poi te lo offro io il caffe.


Puso

CE L'HO FATTA :D  ;D  :D  8)

forse non nel migliore dei modi,ma ci sono riuscito.
Code: [Select]

int RP1(13);
int GP1(12);
int VP1(11);
int R1(4);
int R2(10);
int G1(3);
int G2(9);
int V1(2);
int V2(8);
int P1(6);
int P2(7);
extern unsigned long timer0_millis;
unsigned long T1;//TEMPO SCAMBIO SEMAFORI
unsigned long T2;//TEMPO LAMPEGGIO SEMAFORO 2
unsigned long T3;//TEMPO LAMPEGGIO SEMAFORO 1
unsigned long T4;//TEMPO LAMPEGGIO PEDONALE 1
unsigned long T5;//TEMPO PEDONALE 1
int A;//STATO SEMAFORI
int B;//STATO LUCI GIALLE SEMAFORI
int C;//CICLO SEMAFORI E LUCI GIALLE SEMAFORI
int D;//PEDONALE

void setup()
{
 Serial.begin(9600);
   
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 pinMode(13, OUTPUT);
 pinMode(6, INPUT);
 pinMode(7, INPUT);
 
}
void loop()
{
Serial.println(millis());
Serial.println(T1);
Serial.println(T2);
Serial.println(T3);
Serial.println("");
Serial.print(A);
Serial.print(B);
Serial.print(C);
Serial.println(D);

 if((A==0)&&(C==0)){Serial.println("Semaforo2 Avanti");Serial.println("Semaforo1 Stop");}
 if((A==0)&&(C==1)){Serial.println("Semaforo2 Lampeggio");}
 if((A==1)&&(C==0)){Serial.println("Semaforo1 Avanti");Serial.println("Semaforo2 Stop");}
 if((A==1)&&(C==1)){Serial.println("Semaforo1 Lampeggio");}
 if(digitalRead(P1)){Serial.println("Pedonale1 Chiamato");}
 if(D==1){Serial.println("Pedonale1 Attesa");}
 if((A==0)&&(D==2)){Serial.println("Pedonale1 Avanti");}
 
Serial.println("");  
 
 
 switch(A)//SEMAFORI
 {
   case 0:
   digitalWrite(RP1, HIGH);//SEMAFORO PEDONALE STOP
   digitalWrite(R1, HIGH);//SEMAFORO1 STOP
   digitalWrite(V2, HIGH);//SEMAFORO2 AVANTI
   digitalWrite(R2,LOW);
   digitalWrite(V1,LOW);
   break;
   
   case 1:
   digitalWrite(R2,HIGH);//SEMAFORO2 STOP
   digitalWrite(V1,HIGH);//SEMAFORO1 AVANTI
   digitalWrite(R1,LOW);
   digitalWrite(V2,LOW);
   break;
  }
 
  switch(B)//LUCI GIALLE SEMAFORI
   {
   case 0:
   digitalWrite(G1, LOW);
   digitalWrite(G2, LOW);
   break;
   
   case 1:
   digitalWrite(G1, HIGH);
   break;
   
   case 2:
   digitalWrite(G2,HIGH);
   break;
   }
 
 
 
 if((D!=2)&&(millis()>=T1+2000)){A++;B=0;C++;
                               T1=millis();
                               T2=millis();
                               T3=millis();
                               T4=millis();
                               T5=millis();
                              }//TEMPO SCAMBIO SEMAFORI
 
 if(A>1){A=0;}
 if(B>2){B=0;}
 if(C>1){C=0;}
 
 
 if((A==0)&&(C==0)){//SEMAFORO2 VERDE--SEMAFORO1 ROSSO--PEDONALI INATTIVI
                   if(millis()>=T2+1000){B=2;C++;T2=millis();}//ATTESA PER LAMPEGGIO
                   }
                   
 if((A==0)&&(C==1)){//SEMAFORO 2 LAMPEGGIO
                    if(millis()>=T2+250){B=0;}//PRIMO LAMPEGGIO
                    if(millis()>=T2+500){B=2;T2=millis();}//SECONDO LAMPEGGIO
                   }
                   
 if((A==1)&&(C==0)){//SEMAFORO1 VERDE--SEMAFORO2 ROSSO
                    if(millis()>=T3+1000){B=1;C++;T3=millis();}//ATTESA PER LAMPEGGIO
                   }
                   
 if((A==1)&&(C==1)){//SEMAFORO 1 LAMPEGGIO
                    if(millis()>=T3+250){B=0;}//PRIMO LAMPEGGIO
                    if(millis()>=T3+500){B=1;T3=millis();}//SECONDO LAMPEGGIO
                   }
 
 if(digitalRead(P1)&&(D==0)){//CHIAMATA PEDONALE
                             while(digitalRead(P1)){}//FINCHE'IL PULSANTE é PREMUTO NON FARE NIENTE
                             D++;//POI INCREMENTA INT(D)
                            }
 if((A==0)&&(C==0)&&(D==1)){ //SE SEMAFORO1 STOP
                            ++D;//INCREMENTA INT(D)
                            }
                     
 if(D==2)
        {
         A=0;//SEMAFORO2 resta VERDE
         B=0;//LUCI GIALLE sono SPENTE
         C=0;//FERMA I LAMPEGGI di tutti i SEMAFORI
         digitalWrite(VP1,HIGH);//PEDONALE1 AVANTI
        }
 
 if(D==2){//SE PEDONALE AVANTI
          if(millis()>=T4+1000){digitalWrite(GP1,HIGH);T2=millis();}//ATTESA PER LAMPEGGIO
         }
 
 if(D==2){//SE PEDONALE AVANTI
          if(millis()>=T4+250){digitalWrite(GP1,LOW);}//PRIMO LAMPEGGIO
          if(millis()>=T4+500){digitalWrite(GP1,HIGH);T3=millis();}//SECONDO LAMPEGGIO
         }
 
 if(millis()>=T5+2000){//DOPO(tot)MILLISECONDI
                       D=0;//PULSANTE
                       digitalWrite(VP1,LOW);
                       digitalWrite(GP1,LOW);
                       digitalWrite(RP1,HIGH);//PEDONALE STOP
                      }
 
}

Puso

il PEDONALE2 non lho fatto perchè avevo finito  i PIN DIGITALI

ora devo capire come aprire le finestre nei forum per metterci gli scketch,se no mi sgridano

grazie a tutti

Go Up