Controlando o brilho da lâmpada com botões
Este experimento na verdade é uma extensão do experimento anterior. Com esse projeto você controlará o brilho da lâmpada, só que desta vez, pressionando os botões. Cada um dos botões corresponde a uma intensidade diferente.
!Informações Importantes
Um projeto grande pode sempre ser subdividido em projetos pequenos e a habilidade de unir a ideia de dois ou mais projetos pode significar o sucesso para resolver um problema. Aqui combinamos o projeto da leitura de varios botões com controle do brilho da lâmpada.
!Identificando os Componentes
!Componentes de código
Todos os componentes de código utilizados neste projeto já foram explicados nos projetos anteriores.
!Executando no Arduino
Execute o código abaixo no seu Arduino.
// Pino ligado ao push-button int buttonPin = A0; // Variavel para fazer a checagem int buttonState; // Pino Mosfet int lamp = 3; void setup() { // Define o pino do botao como entrada pinMode(buttonPin, INPUT); pinMode(lamp, OUTPUT); } void loop() { // Verifica se o estado do botao foi alterado buttonState = analogRead(buttonPin); // Limpa qualquer ruido buttonState = 1023; // Enquanto nenhum botao está sendo pressionado realiza a leitura novamente while (buttonState >= 897) { buttonState = analogRead(buttonPin); } // Se o valor inferior a 897 significa que algum botão foi apertado if (buttonState < 897) { // Se o botão Right está sendo apertado if (buttonState < 69) { analogWrite(lamp, 0); } // Se o botão UP está sendo apertado if (buttonState >= 69 && buttonState <= 230) { analogWrite(lamp, 105); } // Se o botão DOWN está sendo apertado if (buttonState >= 231 && buttonState <= 407) { analogWrite(lamp, 155); } // Enquanto o botão LEFT está sendo apertado if (buttonState >= 408 && buttonState <= 630) { analogWrite(lamp, 205); } // Se o botão SEL está sendo apertado if (buttonState >= 631 && buttonState <= 896) { analogWrite(lamp, 255); } } delay(100); }
!Exercício
Faça uma versão do código acima utilizando funções!
Resposta
int lamp = 3; int button = A0; int led1 = A1; int intensity_button(int btn) { if (btn == 0) { return 0; } else if (btn == 1) { return 105; } else if (btn == 2) { return 155; } else if (btn == 3) { return 205; } else if (btn == 4) { return 255; } } int getButtonState() { int value = analogRead(button); if (value < 69) { return 1; } else if (value >= 69 && value <= 230) { return 2; } else if (value >= 231 && value <= 407) { return 3; } else if (value >= 408 && value <= 630) { return 4; } else if (value >= 631 && value <= 896) { return 5; } return 0; } int readButton() { int state = getButtonState(); int count = 1; while (count < 5) { delay(5); int newState = getButtonState(); if (newState == state) { count++; } else { count = 1; } state = newState; } return state; } void setup() { pinMode(lamp, OUTPUT); analogWrite(lamp, 0); pinMode(led1, OUTPUT); } void loop() { // Lampada ligada enquanto botao nao esta apertado int btn; while ((btn = readButton()) != 5) { int light = intensity_button(btn); analogWrite(lamp, light); } // Desliga a lampada analogWrite(lamp, 0); digitalWrite(led1, HIGH); // Espera soltar o botao while (readButton() != 0); // Espera apertar o botao while (readButton() != 5); // Espera soltar o botao while (readButton() != 0); digitalWrite(led1, LOW); }