Olá pessoal, sou novo aqui no fórum e tenho um conhecimento muito básico sobre arduíno. Tenho um projeto para ser entregue neste final de semana, porém, estou enfrentando problemas para desenvolve-lo.

O projeto se trata de um semáforo para um cruzamento que fica se repetindo, ai somente quando é apertado um botão o semáforo ira fechar para os carros e abrir para os pedestres. 

Eu consegui desenvolver os códigos em parte, porém, o botão tem que ficar sendo pressionado para que funcione, e ele não o lê em qualquer momento do ciclo de repetição do semáforo para carros. Segue abaixo o meu código atual. 

#define LED_VD 2
#define LED_AM 3
#define LED_VM 4
#define PED_VD 5
#define PED_VM 6
#define botao 7
int estadoBotao = 0;

void setup() {

pinMode(LED_VM, OUTPUT);
pinMode(LED_AM, OUTPUT);
pinMode(LED_VD, OUTPUT);
pinMode(PED_VD, OUTPUT);
pinMode(PED_VM, OUTPUT);
pinMode(botao, INPUT);

}
void loop() {
estadoBotao = digitalRead(botao);
if (estadoBotao == HIGH) {
digitalWrite(PED_VM, LOW);
digitalWrite(PED_VD, HIGH);
digitalWrite(LED_VM, HIGH);
delay(5000);
} else {
estadoBotao = digitalRead(botao);
digitalWrite(PED_VD, LOW);
digitalWrite(LED_VM, LOW);
digitalWrite(PED_VM, HIGH);
digitalWrite(LED_VD, HIGH);
delay(5000);
digitalWrite(LED_VD, LOW);
digitalWrite(LED_AM, HIGH);
delay(5000);
digitalWrite(LED_AM, LOW);
digitalWrite(LED_VM, HIGH);
delay(5000);
digitalWrite(LED_VM, LOW);

}
}

Exibições: 2468

Responder esta

Respostas a este tópico

Nesse caso recomendo utilizar o botão ativando a interrupção externa.

https://www.arduino.cc/en/Reference/AttachInterrupt

Talvez se substituir o delay por millis(), não seja necessário usar interrupção externa, seria bom pesquisar.

Lembrando que delay, deixa o microcontrolador "parado".

https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

Obrigado, vou pesquisar sobre.

olá. dá uma testada. eu fiz de cabeça e não testei. deve funcionar. Só cuida pois eu levei em conta que o botão deve estar ligado um lado no pino 7 e o outro lado no GND(terra).

#define LED_VD 2
#define LED_AM 3
#define LED_VM 4
#define PED_VD 5
#define PED_VM 6
#define botao 7


unsigned long delai = 5L * 1000L;
unsigned long comparativo=0;
unsigned long tempo=0;
int semaforo =0;

boolean pedestre = 0;

void setup() {

pinMode(LED_VM, OUTPUT);
pinMode(LED_AM, OUTPUT);
pinMode(LED_VD, OUTPUT);
pinMode(PED_VD, OUTPUT);
pinMode(PED_VM, OUTPUT);
pinMode(botao, INPUT);
digitalWrite(botao,HIGH);

}
void loop() {
tempo=millis();
if (digitalRead(botao)==LOW )
{
delay(200);
  pedestre=!pedestre;
  if (pedestre==0)
  {
  semaforo=0;
  comparativo=tempo;
    }
  }




if (pedestre==0)
{
          if (semaforo==0){
          digitalWrite(PED_VD, LOW);
          digitalWrite(LED_VM, LOW);
          digitalWrite(PED_VM, HIGH);
          digitalWrite(LED_VD, HIGH);
          semaforo=1;
          }
         

          if (tempo - comparativo > delai & semaforo == 1){/////5 segundos
          digitalWrite(LED_VD, LOW);
          digitalWrite(LED_AM, HIGH);     
          comparativo=tempo;
          semaforo=2;     
          }
         
          if (tempo - comparativo > delai & semaforo==2){/////10 segundos
          digitalWrite(LED_AM, LOW);
          digitalWrite(LED_VM, HIGH);
          comparativo=tempo;
          semaforo=3;  
          }
          
          if (tempo - comparativo > delai & semaforo==3){     /////15 segundos     
          digitalWrite(LED_VM, LOW);
          comparativo=tempo;
          semaforo=0;
          }


}



 

if (pedestre==1) {
digitalWrite(PED_VM, LOW);
digitalWrite(PED_VD, HIGH);
digitalWrite(LED_VM, HIGH);

}


}

Olá, usei está programação e ficou desorganizado os LEDS, não consegui entender.

Oi AS, boa noite.

Testa este code.

Depois dá um retorno.

http://pastebin.com/hg04UnrE

Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço