Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Semaforo{
- private:
- private verde;
- private amarelo;
- private vermelho;
- private pedestreVerde;
- private pedestraVermelho;
- private sensorIdentifica;
- private frequencia = 0;
- public:
- Semaforo(int pinVerde, int pinAmarelo, int pintVermelho, int pedestreVerde, int pedestreVermelho, byte EntradaSensor){
- setVerde(pinVerde);
- setAmarelo(pinAmarelo);
- setVermelho(pinVermelho);
- setPedestreVerde(pedestreVerde);
- setPedestreVermelho(pedestreVermelho);
- setSensor(EntradaSensor);
- }
- void fecharSemaforo(void){
- digitalWrite (verde, LOW);
- digitalWrite (amarelo, HIGH);
- delay(4000);
- digitalWrite (amarelo, LOW);
- digitalWrite (vermelho, HIGH);
- digitalWrite (pedestreVerde, HIGH);
- }
- void abrirSemaforo(void){
- digitalWrite (pedestreVerde, LOW);
- digitalWrite (vermelho, LOW);
- digitalWrite (amarelo, LOW);
- digitalWrite (verde, HIGH);
- }
- /**
- * @param Int minutos
- * Tempo em que o semáforo ficara em intermitente, por padrão 60 segundos
- */
- void intermitente(int minutos = 60){
- digitalWrite (verde, LOW);
- digitalWrite (vermelho, LOW);
- for(int i = 0; i <= minutos; i--){
- digitalWrite (amarelo, HIGH);
- delay(4000);
- digitalWrite (amarelo, LOW);
- }
- }
- void setVermelho(int ledVermelho){
- vermelho = ledVermelho;
- pinMode(vermelho, OUTPUT);
- }
- void setAmarelo(int ledAmarelo){
- amarelo = ledAmarelo;
- pinMode(amarelo, OUTPUT);
- }
- void setVerde(int ledVerde){
- verde = ledVerde;
- pinMode(verde, OUTPUT);
- }
- void setPedestreVerde(int ledPedestreVerde){
- pedestreVerde = ledPedestreVerde;
- pinMode(pedestreVerde, OUTPUT);
- }
- void setPedestreVermelho(int ledPedestreVermelho){
- pedestreVermelho = ledPedestreVermelhor;
- pinMode(pedestreVermelho, OUTPUT);
- }
- void setSensor(byte sensor){
- sensorIdentifica = sensor;
- pinMode(sensorIdentifica, INPUT);
- }
- void verifica(int sensorIdentifica){
- int leitura = 0;
- while(true){ //sim é um loop infinito, que deve rodar infinitamente pois o semaforo nunca pode parar de identificar carros
- for (int i=0; i<1000; i++){ //faz mil leituras
- leitura = leitura + analogRead (sensorIdentifica);
- }
- 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)
- if(verficarTempoFechado() > 7){//respeitando que deve ter no minimo 7segundos de semaforo fechado, para que a pessagem dos pedestrese seja feita em segurança
- //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
- //a partir daí tomar a decisao (se tempo minimo ja acabou, entao verifica quantidade de carros, onde tem mais deve abrir)
- }
- }
- delay(55);
- }
- }
- void ajustaFrequencia(){
- for (int i=0; i<10000; i++){ //faz mil leituras
- frequencia = leitura + analogRead (sensorIdentifica);
- }
- }
- };
Add Comment
Please, Sign In to add comment