Classe C++ Arduíno

20/10/2017

0

C++

Não sou entendedor de C++.
Tenho um projeto de semáforo com Arduíno e gostaria de controlar 4 semáforos independentemente.
Criei uma classe para apenas instanciar e mandar os comandos pra ela.
Como a IDE do Arduino não oferece muitas ferramentas para debug, alguém pode ajudar e ver se a classe está correta?
segue abaixo o code
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);
        }
    }  
};
Kelvin Eger

Kelvin Eger

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar