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);
}
}
Tags:
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".
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por