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;
- //Armazena o estado do botão. Utiliza-se uma variável do tipo "bool" para economizar dados, visto que o estado do botão só pode possuir dois valores.
- bool estadobotao = LOW;
- // variável que guarda o tempo desde o último pressionamento do botão, unsigned long pois armazena até 32 bits em números positivos. (0 até 2^32-1)
- unsigned long intervalo=0;
- 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);
- }
- void loop() {
- //Funcionamento padrão do conjunto de Sinais.
- ApagaLeds();
- digitalWrite(PedR, HIGH);
- digitalWrite(SinalBR, HIGH);
- digitalWrite(SinalAG, HIGH);
- delay(12000);
- digitalWrite(SinalAY, HIGH);
- delay(3000);
- ApagaLeds();
- digitalWrite(SinalAR, HIGH);
- digitalWrite(SinalBG, HIGH);
- digitalWrite(PedG, HIGH);
- delay(5000);
- digitalWrite(SinalBG, LOW);
- digitalWrite(SinalBY, HIGH);
- digitalWrite(PedR, HIGH);
- delay(3000);
- }
- //Função que apaga todos os LEDs, utilizado na função "Pedestre".
- void ApagaLeds(){
- digitalWrite(SinalAR, LOW);
- digitalWrite(SinalAY, LOW);
- digitalWrite(SinalAG, LOW);
- digitalWrite(SinalBR, LOW);
- digitalWrite(SinalBY, LOW);
- digitalWrite(SinalBG, LOW);
- digitalWrite(PedR, LOW);
- digitalWrite(PedG, LOW);
- }
- //Função para quando o pedestre apertar o botão.
- //A função é realizada durante 34 segundos, para que ela possa ser chamada a qualquer momento, e deixa um intervalo de 34 segundos entre uma chamada e outra.
- void 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.
- if (digitalRead(SinalAR) == HIGH){
- // Ele não deve fazer modificação alguma quando o Sinal Vermelho da rua A estiver ligado. Dessa forma, ele automaticamente sai do comando if, e continua o funcionamento como planejado, esperando 8 segundos até sua próxima troca de sinal.
- }
- else{
- //Caso o Sinal ligado na rua A não seja o vermelho, ele deve enviar um sinal alto para as portas SinalAY, SinalBR e PedR, e esperar 3 segundos.
- ApagaLeds();
- digitalWrite(SinalAY, HIGH);
- digitalWrite(SinalBR, HIGH);
- digitalWrite(PedR, HIGH);
- }
- delay(3000);
- //Chama-se a função ApagaLeds para permitir que o sinal de pedestres funcione adequadamente.
- ApagaLeds();
- 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.
- ApagaLeds();
- digitalWrite(PedR, HIGH);
- digitalWrite(SinalBR, HIGH);
- digitalWrite(SinalAG, HIGH);
- delay(12000);
- digitalWrite(SinalAY, HIGH);
- delay(3000);
- ApagaLeds();
- digitalWrite(SinalAR, HIGH);
- digitalWrite(SinalBG, HIGH);
- digitalWrite(PedG, HIGH);
- delay(5000);
- digitalWrite(SinalBG, LOW);
- digitalWrite(SinalBY, HIGH);
- digitalWrite(PedR, HIGH);
- delay(3000);
- ApagaLeds();
- //Sai da função, permitindo que o botão seja pressionado novamente.
- }
Advertisement
Add Comment
Please, Sign In to add comment