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

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