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

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