Buscar

Semáfaro inteligente com Arduino Uno

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

int ledOne = 13; //Semáforo pedestre = Vermelho
int ledTwo = 12; //Semáforo pedestre = Azul (Verde)
int ledThree = 11; //Semáforo principal = Vermelho
int ledFour = 10; //Amarelo
int ledFive = 9; //Azul (Verde)
int ledSix = 8; //Semáforo principal secundário = Vermelho
int ledSeven = 7; //Amarelo
int ledEight = 6; //Azul (Verde)
int ledNine = 5; //Semáfaro pedestre secundário = Vermelho
int ledTen = 4; //Semáfaro pedestre secundário = Azul (Verde)
unsigned long teste = 0; //comparador
unsigned long inicial = 3000; //3 segundos de led vermelho
unsigned long ledV = 5000;
unsigned long ledAm = 5000;
unsigned long ledState = 500;
unsigned long ledVermS = 42000; //led verde via secundária
unsigned long ledVP = 77000; //led verde da via principal
int state = HIGH; //comparadores
int password = HIGH;
int secret = HIGH;
int guess = HIGH;
void setup() {
 pinMode (ledOne, OUTPUT);
 pinMode (ledTwo, OUTPUT);
 pinMode (ledThree, OUTPUT);
 pinMode (ledFour, OUTPUT);
 pinMode (ledFive, OUTPUT);
 pinMode (ledSix, OUTPUT);
 pinMode (ledSeven, OUTPUT);
 pinMode (ledEight, OUTPUT);
 pinMode (ledNine, OUTPUT);
 pinMode (ledTen, OUTPUT);
 
 digitalWrite(ledOne, HIGH); //todos os leds vermelhos ligados
 digitalWrite(ledThree, HIGH);
 digitalWrite(ledSix, HIGH);
 digitalWrite(ledNine, HIGH);
 }
void loop() {
 unsigned long testetempo = millis(); //variavel em que o seu valor comça ser contado a partir da hora atual
 if(guess==HIGH && state==HIGH && testetempo-teste>=inicial){ //se essa condição for verdadeira o tempo dos leds vermelhos ligados tendem a ser somente 3s
 digitalWrite (ledFive, HIGH);
 digitalWrite (ledThree, LOW);
 digitalWrite (ledTen, HIGH);
 digitalWrite (ledNine, LOW);
 guess = LOW; //guess muda para desligado para satisfazer a próxima condição, se não ficaria em um loop infinito
 teste = testetempo; //teste que era igual a 0 passa a ter o mesmo valor de "testetempo"
 
 } else if (guess==LOW && state==HIGH && testetempo-teste>=ledVP){ //depois que "guess" for desligado o primeiro "if" não será executado, "elseif" será executado porque a condição é verdadeira
 digitalWrite (ledFive, LOW);
 digitalWrite (ledFour, HIGH);
 digitalWrite (ledTen, LOW);
 teste = testetempo; //"teste continuará com o mesmo valor de "testetempo"
 unsigned long tempo = testetempo + 5; //criaremos uma nova variavel com o mesmo valor de "testetempo" que somado +5 para dar o valor certo do tempo do led
 
 while(tempo-teste<ledAm){ //enquanto o valor do tempo-teste for menor que 5000 milisegundos (condição verdadeira)
 if (tempo-teste>=ledState){ //se tempo-teste for maior ou igual a 500 milisegundos (condição verdadeira)
 if (password==HIGH){ //se for ligado (condição verdadeira)
 digitalWrite (ledNine, password); //ledNine terá o mesmo estado que o comparador "password"
 password = LOW; //logo ele passara para desligado e depois ligara denovo para o led vermelho piscar enquanto o led está em amarelo
 } else{
 digitalWrite (ledNine, password);
 password = HIGH;
 }
 ledState = ledState+500; //ledState terá o dobro do seu valor
 }
 tempo = millis(); //o valor de "tempo" começara a ser contado a partir de agora
 }
 ledState = 500;
 state = LOW; //state passara para o estado desligado para satisfazer a condição a seguir
 } else if (guess==LOW && state==LOW && testetempo-teste>=ledAm){ //guess já passou para desligado então a condição é verdadeira
 digitalWrite (ledThree, HIGH);
 digitalWrite (ledFour, LOW);
 digitalWrite (ledTwo, HIGH);
 digitalWrite (ledOne, LOW);
 digitalWrite (ledEight, HIGH);
 digitalWrite (ledSix, LOW);
 digitalWrite (ledNine, HIGH);
 digitalWrite (ledTen, LOW);
 guess = HIGH; //guess sempre vai alterar entre ligado e desligado para satisfazer as condições
 teste = testetempo; //"teste" voltara a ter o mesmo valor de "testetempo"
 
 } else if (secret==HIGH && guess==HIGH && testetempo-teste>=ledVermS){
 digitalWrite (ledEight, LOW);
 digitalWrite (ledSeven, HIGH);
 digitalWrite (ledTwo, LOW);
 teste = testetempo;
 
 unsigned long ledTempo = testetempo+5;
 
 while (ledTempo-teste<ledV){
 if (ledTempo-teste>=ledState){
 if (password==HIGH){
 digitalWrite (ledOne, password);
 password = LOW;
 } else {
 digitalWrite (ledOne, password);
 password = HIGH;
 }
 ledState = ledState+500;
 }
 ledTempo = millis();
 }
 ledState = 500;
 secret = LOW; 
 } else if (secret==LOW && testetempo-teste>=ledV){
 digitalWrite (ledSeven, LOW);
 digitalWrite (ledSix, HIGH);
 digitalWrite (ledOne, HIGH);
 digitalWrite (ledTwo, LOW);
 teste = testetempo;
 state = HIGH;
 secret = HIGH;
 }
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando