Kelvineger

Untitled

Oct 17th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.22 KB | None | 0 0
  1. class Semaforo{
  2.   private:
  3.     private verde;
  4.     private amarelo;
  5.     private vermelho;
  6.     private pedestreVerde;
  7.     private pedestraVermelho;
  8.     private sensorIdentifica;
  9.     private frequencia = 0;
  10.  
  11.   public:
  12.  
  13.     Semaforo(int pinVerde, int pinAmarelo, int pintVermelho, int pedestreVerde, int pedestreVermelho, byte EntradaSensor){
  14.       setVerde(pinVerde);
  15.       setAmarelo(pinAmarelo);
  16.       setVermelho(pinVermelho);
  17.       setPedestreVerde(pedestreVerde);
  18.       setPedestreVermelho(pedestreVermelho);  
  19.       setSensor(EntradaSensor);
  20.     }
  21.  
  22.     void fecharSemaforo(void){
  23.       digitalWrite (verde, LOW);
  24.       digitalWrite (amarelo, HIGH);
  25.       delay(4000);
  26.       digitalWrite (amarelo, LOW);
  27.       digitalWrite (vermelho, HIGH);
  28.       digitalWrite (pedestreVerde, HIGH);    
  29.     }
  30.  
  31.     void abrirSemaforo(void){
  32.       digitalWrite (pedestreVerde, LOW);    
  33.       digitalWrite (vermelho, LOW);
  34.       digitalWrite (amarelo, LOW);
  35.       digitalWrite (verde, HIGH);
  36.     }
  37.  
  38. /**
  39.  * @param Int minutos
  40.  * Tempo em que o semáforo ficara em intermitente, por padrão 60 segundos
  41.  */
  42.     void intermitente(int minutos = 60){
  43.      digitalWrite (verde, LOW);
  44.      digitalWrite (vermelho, LOW);
  45.       for(int i = 0; i <= minutos; i--){
  46.         digitalWrite (amarelo, HIGH);
  47.         delay(4000);  
  48.         digitalWrite (amarelo, LOW);
  49.       }
  50.     }
  51.    
  52.     void setVermelho(int ledVermelho){
  53.       vermelho = ledVermelho;
  54.       pinMode(vermelho, OUTPUT);
  55.     }
  56.  
  57.     void setAmarelo(int ledAmarelo){
  58.       amarelo = ledAmarelo;
  59.       pinMode(amarelo, OUTPUT);
  60.     }
  61.  
  62.     void setVerde(int ledVerde){
  63.       verde = ledVerde;
  64.       pinMode(verde, OUTPUT);
  65.     }
  66.  
  67.     void setPedestreVerde(int ledPedestreVerde){
  68.       pedestreVerde = ledPedestreVerde;
  69.       pinMode(pedestreVerde, OUTPUT);
  70.     }
  71.  
  72.     void setPedestreVermelho(int ledPedestreVermelho){
  73.       pedestreVermelho = ledPedestreVermelhor;
  74.       pinMode(pedestreVermelho, OUTPUT);
  75.     }
  76.  
  77.     void setSensor(byte sensor){
  78.       sensorIdentifica = sensor;
  79.       pinMode(sensorIdentifica, INPUT);
  80.     }
  81.  
  82.     void verifica(int sensorIdentifica){
  83.         int leitura = 0;
  84.        
  85.       while(true){ //sim é um loop infinito, que deve rodar infinitamente pois o semaforo nunca pode parar de identificar carros
  86.         for (int i=0; i<1000; i++){ //faz mil leituras
  87.             leitura = leitura + analogRead (sensorIdentifica);
  88.         }
  89.  
  90.         if(leitura/1000 > frequencia){ //verifica se a media das 1000 leituras é maior que a frequencia maxima do campo (caso aumente, seginifca que um carro passou por ali)
  91.             if(verficarTempoFechado() > 7){//respeitando que deve ter no minimo 7segundos de semaforo fechado, para que a pessagem dos pedestrese seja feita em segurança
  92.             //lembrar que aqui deve ser verificado o tempo minimo de todos os outros semáforos, alem da quantidade de carros que estao naquela, se via é maior que o numero contido nesta
  93.             //a partir daí tomar a decisao (se tempo minimo ja acabou, entao verifica quantidade de carros, onde tem mais deve abrir)
  94.             }  
  95.         }
  96.         delay(55);
  97.         }
  98.     }
  99.    
  100.     void ajustaFrequencia(){
  101.         for (int i=0; i<10000; i++){ //faz mil leituras
  102.             frequencia = leitura + analogRead (sensorIdentifica);
  103.         }
  104.     }  
  105. };
Add Comment
Please, Sign In to add comment