Início
/
Projetos Arduino
/
Squids Hub
/
Básico
/
Hub 006 - Dez efeitos de iluminação sequencial com seletor - Arduino
Hub 006 - Dez efeitos de iluminação sequencial com seletor - Arduino
Angelo Luis Ferreira | 27/05/2020
Acessos: 8.099
Básico - Hub 006
Altere o efeito sequencial de leds pressionando o botão
Sugerido por: Wilber Spinoza ENVIAR SUGESTÃO
Objetivo
Criar 10 efeitos diferentes de iluminação sequencial com 10 LEDs ou utilizando uma barra gráfica. Esses efeitos são alterados pressionando um botão, ou seja, cada vez que pressiono o botão, altero um efeito.
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
|
10 |
|
No projeto utilizamos 10 leds azuis
Você também poderá utilizar LEDs de 5 ou 3 mm nas cores que desejar, alto brilho ou difuso.
|
Resistor |
Resistor
|
10 |
|
10 Resistores 150Ω (ou superiores)
Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado a Tabela Resistor para Leds
|
Barra Gráfica (bargraph) |
Barra Gráfica de Leds |
1 |
|
Opcional: Você poderá substituir os leds por barra gráfica(10 segmentos) nas cores que desejar
|
Arduino UNO |
Arduino UNO R3 |
1 |
|
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito com Leds - Simulação
Montagem do Circuito com Barra Gráfica
Referências
Projeto 17 - Dez efeitos de iluminação sequencial com leds ou barra gráfica
Como usar push button com Arduino (programação)
Código do Projeto (Sketch)
Faça o dowload e abra o arquivo hub006.ino no IDE do Arduino: DOWNLOAD - hb006.ino
Ou se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* HB 06 - Efeitos de iluminação sequencial com leds - muda com botão
* Sugerido por Wilber Spinoza
* Adaptado por: Angelo Luis Ferreira
* http://squids.com.br/arduino
*
******************************************************************************/
byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // cria um array para os pinos digitais dos LEDs
byte butPin = 2;
byte control = 0;
int ledDelay;
int direction;
int currentLED;
int ledDir;
int ledEsq;
int l;
int h;
void setup() {
for (int x=0; x<10; x++) { // define todos os pinos dos LEDs como saída
pinMode(ledPin[x], OUTPUT);
}
pinMode(butPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// muda de efeito
if(!digitalRead(butPin)) {
while (!digitalRead(butPin)) {} // espera soltar o botão
delay(10); // reduz efeito bouncing
control++;
if(control>10) control = 1;
Serial.println(control);
}
//cria repetições dos efeitos
if (control==1) efeito1();
if (control==2) efeito2();
if (control==3) efeito3();
if (control==4) efeito4();
if (control==5) efeito5();
if (control==6) efeito6();
if (control==7) efeito7();
if (control==8) efeito8();
if (control==9) efeito9();
if (control==10) efeito10();
}
void efeito1() {
// EFEITO 1 - vai e volta
currentLED = 0;
direction = 1;
for(int i = 0; i < 72; i++) { // efeito 1: vai e volta
digitalWrite(ledPin[currentLED], HIGH); // acende o LED atual
currentLED += direction; // incrementa de acordo com o valor de direction
delay(100);
for (int x=0; x<10; x++) { // apaga todos os LEDs
digitalWrite(ledPin[x], LOW);
}
// altera a direção se tivermos atingido o fim
if (currentLED == 9) {direction = -1;}
if (currentLED == 0) {direction = 1;}
if(!digitalRead(butPin)) break; // interrompe o ciclo
}
}
void efeito2() {
// EFEITO 2 - girando
currentLED = 0;
direction = 1;
for(int i = 0; i < 150; i++){ // efeito 2: girando
digitalWrite(ledPin[currentLED], HIGH); // acende o LED atual
if (currentLED>0){digitalWrite(ledPin[currentLED-1], LOW);} // acende o LED atual
currentLED += direction; // incrementa de acordo com o valor de direction
delay(35);
if (currentLED == 10) {digitalWrite(ledPin[currentLED-1], LOW);currentLED = 0;}
if(!digitalRead(butPin)) break; // interrompe o ciclo
}
}
void efeito3() {
// EFEITO 3 - pares e ímpares
currentLED = 0;
direction = 1;
for(int i = 0; i < 84; i++){ // efeito 3: pares e ímpares
if (direction==1) {
if ( currentLED % 2 == 0 ) {
digitalWrite(ledPin[currentLED], HIGH); // acende o LED atual
currentLED += direction; // incrementa de acordo com o valor de direction
}
else {
digitalWrite(ledPin[currentLED], LOW); // apaga o LED atual
currentLED += direction; // incrementa de acordo com o valor de direction
}
delay (65);
}
if (direction==-1){
if ( currentLED % 2 == 0 ) {
digitalWrite(ledPin[currentLED], LOW); // acende o LED atual
currentLED += direction; // incrementa de acordo com o valor de direction
}
else {
digitalWrite(ledPin[currentLED], HIGH); // apaga o LED atual
currentLED += direction; // incrementa de acordo com o valor de direction
}
delay (65);
}
// altera a direção se tivermos atingido o fim
if (currentLED == 10) {direction = -1;}
if (currentLED == -1) {direction = 1;}
if(!digitalRead(butPin)) break; // interrompe o ciclo
}
}
void efeito4() {
//EFEITO 4 - pares e ímpares 2
for(int i = 0; i < 17; i++){ // efeito 4: pares e ímpares
if(!digitalRead(butPin)) break; // interrompe o ciclo
for (int x=0; x<10; x++) { // ACENDE OS LEDs PARES
if ( x % 2 == 0 ) {
digitalWrite(ledPin[x], HIGH); // ACENDE o LED atual
}
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
for (int x=0; x<10; x++) { // APAGA OS LEDs IMPARES
if ( x % 2 != 0 ) {
digitalWrite(ledPin[x], LOW); // apaga o LED atual
}
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(200);
for (int x=0; x<10; x++) { // APAGA OS LEDs PARES
if ( x % 2 == 0 ) {
digitalWrite(ledPin[x], LOW); // apaga o LED par atual
}
digitalWrite(ledPin[x], LOW); // apaga o LED par atual
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
for (int x=0; x<10; x++) { // acende OS LEDs IMPARES
if ( x % 2 != 0 ) {
digitalWrite(ledPin[x], HIGH); // apaga o LED atual
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(200);
}
for (int x=0; x<10; x++) { // APAGA OS LEDs IMPARES
if ( x % 2 != 0 ) {
digitalWrite(ledPin[x], LOW); // apaga o LED atual
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
}
delay(100);
}
void efeito5() {
//EFEITO 5 - VU Meter
currentLED = 0;
direction = 1;
for(int i = 0; i < 82; i++){ // efeito 5: Vu Meter
if (direction==1) {
digitalWrite(ledPin[currentLED], HIGH); // acende o LED atual
currentLED += direction; // incrementa de acordo com o valor de direction
delay(35);
}
if (direction==-1){
digitalWrite(ledPin[currentLED], LOW); // acende o LED atual
currentLED += direction; // incrementa de acordo com o valor de direction
delay(35);
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay (200);
// altera a direção se tivermos atingido o fim
if (currentLED == 10) {direction = -1; currentLED=9;}
if (currentLED == -1) {direction = 1; currentLED=0;}
}
}
void efeito6() {
// EFEITO 6 - Giroflex
for(int i = 0; i < 30; i++){
digitalWrite(ledPin[0], HIGH);
digitalWrite(ledPin[5], HIGH);
delay(50);
digitalWrite(ledPin[0], LOW);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[6], HIGH);
delay(50);
digitalWrite(ledPin[1], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[7], HIGH);
delay(50);
digitalWrite(ledPin[2], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[8], HIGH);
delay(50);
digitalWrite(ledPin[3], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[9], HIGH);
delay(50);
digitalWrite(ledPin[4], LOW);
digitalWrite(ledPin[9], LOW);
if(!digitalRead(butPin)) break; // interrompe o ciclo
}
}
void efeito7() {
// EFEITO 7
for(int i = 0; i < 12; i++){
for (int x=0; x<10; x++) { // acente todos os LEDs
digitalWrite(ledPin[x], HIGH);
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(150);
for (int x=0; x<10; x++) { // APAGA OS LEDs PARES
if ( x % 2 == 0 ) {
digitalWrite(ledPin[x], LOW); // apaga o LED par atual
}
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(350);
for (int x=0; x<10; x++) { // ACENDE OS LEDs PARES
if ( x % 2 == 0 ) {
digitalWrite(ledPin[x], HIGH); // ACENDE o LED atual
}
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(150);
for (int x=0; x<10; x++) { // APAGA OS LEDs IMPARES
if ( x % 2 != 0 ) {
digitalWrite(ledPin[x], LOW); // apaga o LED atual
}
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(350);
for (int x=0; x<10; x++) { // APAGA OS PARES
if ( x % 2 == 0 ) {
digitalWrite(ledPin[x], LOW); // apaga o LED atual
}
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(150);
}
}
void efeito8() {
// EFEITO 8 - Começa nos cantos
ledDir = 0;
ledEsq = 9;
for(int i = 0; i < 4; i++){
for(int i = 0; i < 5; i++){
digitalWrite(ledPin[ledDir], HIGH); // acende o LED atual
ledDir = ledDir +1;
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(182);
digitalWrite(ledPin[ledEsq], HIGH); // acende o LED atual
ledEsq = ledEsq -1;
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(182);
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
ledDir = 0;
ledEsq = 9;
for(int i = 0; i < 5; i++){
digitalWrite(ledPin[ledDir], LOW); // apaga o LED atual
ledDir = ledDir +1;
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(182);
digitalWrite(ledPin[ledEsq], LOW); // apaga o LED atual
ledEsq = ledEsq -1;
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(182);
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
}
}
void efeito9() {
// EFEITO 9 - zig e zag
for(int i = 0; i < 7; i++){
l = 1; // apaga
h = 0; // acende
for(int i = 0; i < 10; i++){
digitalWrite(ledPin[l], LOW); // apaga o LED atual
l = l - 1;
digitalWrite(ledPin[h], HIGH); // acende o LED atual
h = h + 2;
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(90);
digitalWrite(ledPin[l], LOW); // apaga o LED atual
l = l + 2;
digitalWrite(ledPin[h], HIGH); // acende o LED atual
h = h - 1;
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(90);
}
}
}
void efeito10() {
// EFEITO 10 - três em três
for(int i = 0; i < 7; i++){
l = 7; // apaga
h = 0; // acende
for(int i = 0; i < 10; i++){
digitalWrite(ledPin[l], LOW); // apaga o LED atual
l = l + 1;
if (l>9) {l = 0;}
digitalWrite(ledPin[h], HIGH); // acende o LED atual
h = h + 1;
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(103);
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
l = 7;
for(int i = 0; i < 3; i++){
digitalWrite(ledPin[l], LOW); // apaga o LED atual
l = l + 1;
if(!digitalRead(butPin)) break; // interrompe o ciclo
delay(103);
}
if(!digitalRead(butPin)) break; // interrompe o ciclo
}
}
Obs. Ao abrir o monitor serial do IDE do Arduino visualizaremos os valores da variável "control" que indica qual efeito está sendo visualizado:
Vídeo
Desafios
Com base neste projeto, resolva o seguinte desafio: Desafio 69
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários