Activity Board Toník v.1 final

// Zapojení APA102 + rotačního enkoderu KY-040
// při rotaci se posouvá barevná LED (stále dokola)
// po necinnosti zhasne


// #include <FastGPIO.h>
// #define APA102_USE_FAST_GPIO


#include <APA102.h>

// Define which pins to use.
const uint8_t dataPin = 7;
const uint8_t clockPin = 8;
APA102<dataPin, clockPin> ledStrip;


unsigned long nic_nedela=0;
unsigned long timeout_zhasnuti= 200000; // cyklu 0 až 4294967295

// Rotační enkodér KY-040

int val;
int encoder0PinA = 3; // CLK
int encoder0PinB = 4; // DT
int encoder0Pos = 50;
int encoder0PinALast = LOW;
int n = LOW;





int pozice_LED = 0;

// ledCount = počet LED na pásku
const uint16_t ledCount = 7;
rgb_color colors[ledCount];


void setup()
{

  //zhasnutí pásku po restaru
  ledStrip.startFrame();
    for(uint16_t i = 0; i < ledCount; i++)
    {
      // poslat barvu na jednu LED:  Červená(0-255), Zelená(0-255), Modrá(0-255), Intenzita svitu (0-31)
      ledStrip.sendColor(0, 0, 0, 0);
    }
  ledStrip.endFrame(ledCount);



  pinMode (encoder0PinA, INPUT);
  pinMode (encoder0PinB, INPUT);
  /*Tlacitka*/
  pinMode(9,INPUT_PULLUP);
  pinMode(10,INPUT_PULLUP);
  pinMode(11,INPUT_PULLUP);
  //Serial.begin (19200);

   
}



void zhasni_pasek (){
// poslat barvu na LED:  Červená(0-255), Zelená(0-255), Modrá(0-255), Intenzita svitu (0-31)
  
     ledStrip.startFrame();
    
        for(uint16_t i = 0; i < ledCount; i++)
        {
            ledStrip.sendColor(0, 0, 0, 0); 
        } 

     ledStrip.endFrame(ledCount);  
  
}



void obarvi_pasek (int pozice){
// poslat barvu na LED:  Červená(0-255), Zelená(0-255), Modrá(0-255), Intenzita svitu (0-31)
  
     ledStrip.startFrame();
    
        for(uint16_t i = 0; i < ledCount; i++)
        {
          if( i == pozice){                 // rozsviti danou LED
            ledStrip.sendColor(0, 255, 0, 10); 
          }else{                            // zhasne ostatni LED
            ledStrip.sendColor(0, 0, 0, 0); 
          } 
        }
        
     ledStrip.endFrame(ledCount);  
  
}



void cely_pasek (int cervena, int zelena, int modra, int intenzita){
// poslat barvu na LED:  Červená(0-255), Zelená(0-255), Modrá(0-255), Intenzita svitu (0-31)
  
     ledStrip.startFrame();
    
        for(uint16_t i = 0; i < ledCount; i++)
        {
            ledStrip.sendColor(cervena, zelena, modra, intenzita);  
        }
        
     ledStrip.endFrame(ledCount);  
  
}

void pasek_duha(){

        int intenzita = 5;

       ledStrip.startFrame();
    
            ledStrip.sendColor(255, 0, 0, intenzita);   //#ff0000
            ledStrip.sendColor(255, 99, 0, intenzita);   //#ff9900
            ledStrip.sendColor(255, 255, 0, intenzita);   //#ffff00
            ledStrip.sendColor(0, 204, 0, intenzita);   //#00cc00
            ledStrip.sendColor(0, 99, 255, intenzita);   //#0099ff
            ledStrip.sendColor(0, 0, 255, intenzita);   //#0000ff
            ledStrip.sendColor(204, 0, 204, intenzita);   //#cc00cc

           
     ledStrip.endFrame(ledCount);  
  
  }




void loop()
{
int tlacitko1 = digitalRead(9);
int tlacitko2 = digitalRead(10);
int tlacitko3 = digitalRead(11);
  
  n = digitalRead(encoder0PinA);
  if ((encoder0PinALast == LOW) && (n == HIGH)) {
    if (digitalRead(encoder0PinB) == LOW) {
      encoder0Pos--;
    } else {
      encoder0Pos++;
    }
    //Serial.print (encoder0Pos);
    //Serial.print ("/");
    obarvi_pasek (encoder0Pos%ledCount); // Modulo - aby při překročení začala svítit první dioda ;)
    nic_nedela = 0; // po otoceni resetuj pocitadlo
    timeout_zhasnuti = 200000; 
    //Serial.print ("RESET");
  }else {
    nic_nedela++; // zadny pohyb enkoderem 
    //Serial.print (".");
  }
  encoder0PinALast = n;
 




  if (!tlacitko3){
    pasek_duha();
    nic_nedela=0;
    timeout_zhasnuti= 1;
  }else {
    if (nic_nedela>timeout_zhasnuti){
     zhasni_pasek();
    }



  if (tlacitko1){
    cely_pasek(255,0,0,5);
    nic_nedela=0;
    timeout_zhasnuti= 1;
  }else {
    if (nic_nedela>timeout_zhasnuti){
     zhasni_pasek();
    }
}
  if (tlacitko2){
    cely_pasek(0,0,255,5);
    nic_nedela=0;
    timeout_zhasnuti= 1;
  }else {
    if (nic_nedela>timeout_zhasnuti){
     zhasni_pasek();
    }
  } 



    
  } // end ELSE
  



  if (nic_nedela>timeout_zhasnuti){
    zhasni_pasek();
  }
}

 

Napsat komentář