Baixe o app para aproveitar ainda mais
Prévia do material em texto
5ª Experiência – Semáforo Interativo A experiência anterior será utilizada para incluir um farol de pedestre e um botão, que deverá ser pressionado pelos pedestres para solicitar a travessia da rua. Feito isso o Arduino atenderá a solicitação alterando o estado das luzes para que os carros parem e os pedestres possam atravessar com segurança. Dessa forma você vai interagir com o Arduino, fazendo-o responder ao estado de um botão que está sendo observado ou melhor quando o estado do botão for alterado. Neste projeto, você também aprendera como criar suas próprias funções dentro do código. Componentes necessários: 2 LEDs vermelhos difusos 1 LED amarelo difuso 2 LEDs verdes difusos 6 Resistor de 150 ohms 1 resistor de 10K ohms 1 Botão Conectando os componentes Conecte seu circuito como mostra a figura 2.8. Verifique cuidadosamente a fiação antes de ligar seu Arduino. Lembre-se de que o Arduino deve estar desconectado da forca enquanto você conecta o circuito. Detalhe da montagem da chave Figura 5.1 – Circuito para o Projeto 5 – Sistema de semáforo com travessia de pedestres e botão de requisição. Digite o código Digite o código da listagem 2.4, verifique-o e faca seu upload. Quando você executar o programa, ele iniciara com o semáforo no verde, para permitir que os carros passem, e a luz para pedestres no vermelho. Quando voce pressionar o botão, o programa verificara se, ao menos, cinco segundos transcorreram desde a última vez em que o semáforo mudou (para permitir que o transito flua) e, se afirmativo, executara o código para a funcao que voce criou, changeLights(). Nessa funcao, o semáforo vai de verde para amarelo e depois para vermelho, e o semáforo para pedestres vai para verde. Depois de um intervalo de tempo definido na variável crossTime (tempo suficiente para que os pedestres atravessem), a luz verde para pedestres pisca, acendendo e apagando, para avisar aos pedestres que atravessem rapidamente antes que o semáforo feche. Então, a luz vermelha do semáforo para pedestres acende, e a luz para os veículos vai de vermelho para amarelo, e finalmente para verde, permitindo novamente o fluxo do trafego. – Código para o projeto 5 // Projeto 5 – Semáforo interativo int carRed = 12; // estabelece o semáforo para carros int carYellow = 11; int carGreen = 10; int pedRed = 9; // estabelece o semáforo para pedestres int pedGreen = 8; int button = 2; // pino do botão int crossTime = 5000; // tempo para que os pedestres atravessem unsigned long changeTime; // tempo desde que o botão foi pressionado void setup() { pinMode(carRed, OUTPUT); pinMode(carYellow, OUTPUT); pinMode(carGreen, OUTPUT); pinMode(pedRed, OUTPUT); pinMode(pedGreen, OUTPUT); pinMode(button, INPUT); // botão no pino 2 // acende a luz verde digitalWrite(carGreen, HIGH); digitalWrite(pedRed, HIGH); } void loop() { int state = digitalRead(button); /* verifica se o botão foi pressionado e se transcorreram 5 segundos desde a última vez que isso ocorreu */ if (state == HIGH && (millis() - changeTime) > 5000) { // Chama a função para alterar as luzes changeLights(); } } void changeLights() { digitalWrite(carGreen, LOW); // apaga o verde digitalWrite(carYellow, HIGH); // acende o amarelo delay(2000); // espera 2 segundos digitalWrite(carYellow, LOW); // apaga o amarelo digitalWrite(carRed, HIGH); // acende o vermelho delay(1000); // espera 1 segundo, por segurança digitalWrite(pedRed, LOW); // apaga o vermelho dos pedestres digitalWrite(pedGreen, HIGH); // acende o verde dos pedestres delay(crossTime); // espera por um intervalo de tempo predefinido // pisca o verde dos pedestres for (int x=0; x<10; x++) { digitalWrite(pedGreen, HIGH); delay(250); digitalWrite(pedGreen, LOW); delay(250); } // acende o vermelho dos pedestres digitalWrite(pedRed, HIGH); delay(500); digitalWrite(carYellow, HIGH); // acende o amarelo digitalWrite(carRed, LOW); // apaga o vermelho delay(1000); digitalWrite(carGreen, HIGH); // acende o verde digitalWrite(carYellow, LOW); // apaga o amarelo // registra o tempo desde a última alteração no semáforo changeTime = millis(); // depois retorna para o loop principal do programa } Faça uma análise do código com base nos projetos anteriores com destaques para a novas palavras chaves e conceitos, por exemplo: unsigned long changeTime;
Compartilhar