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: 6.491
Básico - Hub 006
Altere o efeito sequencial de leds pressionando o botão
Sugerido por: Wilber Spinoza
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