Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Na declaração das cores, foi-se utilizado o padrão: XC, sendo X a rua e sendo C a cor.
- Para a definição da cor, utiliza-se o padrão R = Vermelho, Y = Amarelo, G = Verde*/
- //Declarando os pinos de saída das luzes do sinal da rua A
- int SinalAR=2;
- int SinalAY=3;
- int SinalAG=4;
- //Declarando os pinos de saída das luzes do sinal da rua B
- int SinalBR=8;
- int SinalBY=9;
- int SinalBG=10;
- //Declarando os pinos de saída das luzes do sinal de pedestres
- int PedR=11;
- int PedG=12;
- //Declara-se o pino de entrada do sinal do botão
- int botao=13;
- // Variáveis que guardam períodos de tempo, utiliza-se unsigned int pois armazena até 2 bytes em números positivos, ou seja, de 0 a (2^16) - 1. Isso é duas vezes mais do que o padrão int ((2^15) - 1)
- unsigned int contador = 0; //Conta o período de tempo desde o último pressionamento do botão.
- unsigned int intervalo = 0; //É utilizado para contar o tempo que o sinal A verde permaneceu ligado.
- int pedestre; //Atribuído à função.
- void setup() {
- // Declaração dos modos de cada um dos pinos:
- pinMode(SinalAR, OUTPUT);
- pinMode(SinalAY, OUTPUT);
- pinMode(SinalAG, OUTPUT);
- pinMode(SinalBR, OUTPUT);
- pinMode(SinalBY, OUTPUT);
- pinMode(SinalBG, OUTPUT);
- pinMode(PedR, OUTPUT);
- pinMode(PedG, OUTPUT);
- pinMode(botao, INPUT);
- }
- //Função para quando o pedestre apertar o botão.
- //A função é realizada durante 23 segundos, e em sua saída, deve-se esperar mais 11 segundos até o seu reinício. Isso coincide com o
- int Pedestre(){
- //O sinal A é o único que deve ter seu comportamento alterado de maneira imediata quando o botão é pressionado. Para tal, o sinal B só terá seu comportamento modificado após o final disso.
- contador=millis(); //Usa-se o millis para guardar o momento em que o botão foi pressionado.
- digitalWrite(SinalAG, LOW);
- digitalWrite(SinalAY, HIGH);
- delay(3000);
- digitalWrite(PedR, LOW);
- digitalWrite(SinalBR, LOW);
- digitalWrite(SinalAY, LOW);
- digitalWrite(SinalAR, HIGH);
- digitalWrite(SinalBG, HIGH);
- digitalWrite(PedG, HIGH);
- delay(5000);
- digitalWrite(SinalBG, LOW);
- digitalWrite(SinalBY, HIGH);
- //Liga-se o segundo sinal de pedestres para sinalizar atenção)
- digitalWrite(PedR, HIGH);
- delay(3000);
- //Retorna ao funcionamento normal após 11 segundos.
- digitalWrite(PedG, LOW);
- digitalWrite(SinalBY, LOW);
- digitalWrite(PedR, HIGH);
- digitalWrite(SinalBR, HIGH);
- digitalWrite(SinalAG, HIGH);
- delay(12000);
- //Sai da função, continuando para o sinal A Amarelo.
- }
- void loop() {
- //Funcionamento padrão do conjunto de Sinais.
- digitalWrite(PedR, HIGH);
- digitalWrite(SinalBR, HIGH);
- digitalWrite(SinalAG, HIGH);
- intervalo=0;
- while (intervalo < 1200){
- //Lê o estado do botão, e, caso retorne o valor HIGH, executa a função "Pedestre".
- if (digitalRead(botao) == HIGH && millis()-contador >= 34000){
- //Caso tenha se passado 34 segundos desde o último pressionamento do botão, ele permite que o botão seja pressionado novamente.
- pedestre=Pedestre();
- intervalo = 1200;
- }
- delay(10);
- intervalo=intervalo+1;
- }
- }
- digitalWrite(SinalAG, LOW);
- digitalWrite(SinalAY, HIGH);
- delay(3000);
- digitalWrite(SinalAY, LOW);
- digitalWrite(SinalBR, LOW);
- digitalWrite(PedR, LOW);
- digitalWrite(SinalAR, HIGH);
- digitalWrite(SinalBG, HIGH);
- digitalWrite(PedG, HIGH);
- delay(5000);
- digitalWrite(SinalBG, LOW);
- digitalWrite(SinalBY, HIGH);
- digitalWrite(PedG, HIGH);
- digitalWrite(PedR, HIGH);
- delay(3000);
- digitalWrite(PedG, LOW);
- digitalWrite(SinalBY, LOW);
- digitalWrite(SinalAG, LOW);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement