Posuvný HAD (APA102 + Enkoder) / Arduino

Opět taková legrácka – pomocí rotačního endodéru (nekonečný potenciometr) posouváme barevnou LED na pásku, až dojde na konec, tak přeskočí na začátek 🙂

Použit pásek APA 102 a enkoder KY-040

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


// #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;


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

int val;
int encoder0PinA = 3; // CLK
int encoder0PinB = 4; // DT
int encoder0Pos = 0;
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);
  //Serial.begin (19200);

   
}



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 loop()
{

  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 ;) 
  }
  encoder0PinALast = n;
 

}

 

Napsat komentář