Hub 004 - Um botão para acender 3 leds em tempos diferentes - Arduino
- Detalhes
- angelo
- Acessos: 1468
Básico - Hub 004
Um botão e 3 leds (leds acendem por tempo que o botão fica pressionado)
Sugerido por: Raphael Zappacosta
Objetivo
Tenho 1 botão (push button) e 3 LEDs. Se eu pressionar o botão, acende o LED 1. Se eu manter pressionado o botão por 3 segundos, acende o LED 2 e se manter pressionado por 5 segundos, acende o LED 3. Ao soltar o botão todos os LEDs se apagam.
Componentes necessários
Referência |
Componente |
Quantidade |
Imagem |
Observação |
Protoboard | Protoboard 830 pontos | 1 | ![]() |
No mínimo utilizar protoboard com 830 pontos |
Jumpers | Kit cabos ligação macho / macho | 1 | ||
Led 5mm |
LED 5mm |
3 |
No projeto utilizamos 1 led vermelho, 1 led amarelo, 1 led verde e 1 led laranja Você também poderá utilizar LEDs de 5 ou 3 mm nas cores que desejar, alto brilho ou difuso. |
|
Resistor |
Resistor |
3 |
3 Resistores 150Ω (ou superiores) Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado - Calcular Resistor ou use a Tabela Resistor para Leds |
|
Push Button |
Push button 6X6X5mm |
1 | ||
Arduino UNO R3 | Arduino UNO | 1 | ![]() |
Você poderá utilizar uma placa Arduino UNO original ou similar |
Montagem do Circuito
Referências
Projeto 02b - Led apaga com push button pressionado (pull-up interno do Arduino)
Funções temporizadoras - millis() - Documentação de Referência do Arduino
Código do Projeto (Sketch)
Faça o dowload e abra o arquivo hub004.ino no IDE do Arduino:
Ou se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* HB 04 - Três leds e um botão
* Sugerido por Raphael
* Autor: Angelo Luis Ferreira
* http://squids.com.br/arduino
*
*******************************************************************************/
const byte led[] = {3, 5, 7};
const byte button = 9;
uint32_t startPress;
uint32_t lastPress;
uint32_t serialTimer;
boolean control = 0;
boolean state;
void setup(void) {
for(byte i=0; i<3; i++) {
pinMode(led[i], OUTPUT);
}
pinMode(button, INPUT_PULLUP);
Serial.begin(9600);
} // end setup
void loop(){
state = digitalRead(button); // lê o estado do botão
// verifica se o botão foi pressionado com todos leds apagados
if (!state && control) {
startPress = millis();
control = !control;
}
//verifica se o botão permanece pressionado
if (!state && !control) {
lastPress = millis() - startPress;
digitalWrite(led[0], HIGH);
if (lastPress >= 3000) digitalWrite(led[1], HIGH);
if (lastPress >=5000) digitalWrite(led[2], HIGH);
} else {
for (byte i=0; i<3; i++) digitalWrite(led[i], LOW);
startPress = millis();
lastPress = 0, control = 0;
}
// mostra valores no monitor serial (opcional)
if (millis() - serialTimer >= 500) {
Serial.print(state);
Serial.print(" | ");
Serial.print(control);
Serial.print(" | ");
Serial.println(lastPress);
serialTimer = millis();
}
} // end loop
Obs. Ao abrir o monitor serial do IDE do Arduino visualizaremos os valores das variáveis "state", "controle" e "lastPress":
Vídeo
Desafios
Com base neste projeto, resolva o seguinte desafio: