Go Down

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

Puso

dunque ci sono riuscito scusate se mi ripeto,ma è per fare prove con le finestrelle

la PARTE--0 riguarda le variabili che me le devo ancora studiare bene per il momento le copio

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 LAMPEGGIO SEMAFORI



PARTE1-- codifico il Setup

Code: [Select]

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


poi passo al Loop

PARTE--2 per LEGGERE come risponde il mio schetch su SERIAL MONITOR
Code: [Select]
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(""); 


PARTE3-- DESCRIVO LE VARIABILI
Code: [Select]
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;
    }
 


PARTE--4 dò il TEMPO alle luci dei SEMAFORI
Code: [Select]

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
                    }


Parte--5 attivo il PEDONALE
Code: [Select]
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
                       }
 
}



gpb01

Thread ripulito da tutti i post NON inerenti all'argomento :)

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up