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