Hub 006 - Dez efeitos de iluminação sequencial com seletor - Arduino

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 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Led 5mm

LED 5mm

10 Resultado de imagem para led vermelho

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

×

Infomações do site / SEO








×

Adicionar Marcadores