RGB LED färg väljare (2 / 2 steg)
Steg 2: kod
- Ned knappen: Minska den markerade färgen (R, G eller B) av aktuella stegstorlek
- Upp-knappen: Öka den markerade färgen (R, G eller B) av aktuella stegstorlek
- Vänster knapp: flytta till föregående färg
- Höger knapp: flytta till nästa färg
- SELECT-knappen: växla stegstorlek från 1 till 5-10 till 20 till 50, sedan tillbaka till 1...
Koden använder den Adafruit LCD sköld och Neopixel biblioteken. Exempelkoden är nedan.
Du kan också lägga till en kontakt och driva en full sträng med detta synsätt.
Koden jag använde:
RGB_LCD - Använd Adafruit LCD-skärmen Ange RGB-värden på ett enda WS2812b LED / / baserat på de Adafruit Neopixel och LCD-Shield bibliotek och exempel / / December, 2013 Carl Sutter / / *** / / LCD sköld bibliotek #include < Wire.h > #include < Adafruit_MCP23017.h > #include < Adafruit_RGBLCDShield.h > / / sköld använder I2C SCL och SDA stiften. På klassiska Arduinos / / detta är Analog 4 och 5 så du inte kan använda de för analogRead() längre / / men du kan ansluta andra I2C sensorer till I2C bussen och andel / / I2C bussen.
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
Neopixel bibliotek #include < Adafruit_NeoPixel.h > #define stift 6 / / Parameter 1 = antal pixlar i remsa / / Parameter 2 = pin-kod (de flesta är giltigt) / / Parameter 3 = pixel typ flaggor, Lägg ihop efter behov: / / NEO_KHZ800 800 KHz bitstream (de flesta NeoPixel produkter w/WS2812 lysdioder) / / NEO_KHZ400 400 KHz (classic "v1" (inte v2) FLORA pixlar, WS2811 drivrutiner) / / NEO_GRB pixlar är trådbundet för GRB bitstream (de flesta NeoPixel produkter) / / NEO_RGB pixlar är trådbundet för RGB bitstream (v1 FLORA pixlar inte v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel (1, PIN, NEO_GRB + NEO_KHZ800);
Dessa #defines gör det enkelt att ställa in bakgrundsljus färg - använda om du har en RGB-sköld / / #define röd 0x1 / / #define gula 0x3 / / #define grön 0x2 / / #define kricka 0x6 / / #define blå 0x4 / / #define VIOLET 0x5 #define vit 0x7 #define PILEN 0x7E #define LARROW 0x7F #define DELAY_QUICK 40 / / kort fördröjning mellan pressar så du kan rulla snabbt, men fortfarande komma till en viss knapp tryck / värde #define DELAY_SLOW 100 / / långsammare fördröjning för knappar somär ändra lägen etc.uint8_t curCols [] = {127, 127, 127}; utbud av aktuella RGB valuesuint8_t curCol = 0; index för den aktuella färgen på - 0 = R, 1-G, 2 = Buint8_t step_size = 1; beloppet som skall flytta i varje knapp pressvoidsetup() {
LCD.BEGIN (16, 2);
Strip.BEGIN();
Strip.show(); Initiera alla pixlar till "off"
lcd.setBacklight(WHITE);
lämna den "Step Size:" etikett på displayen så det inte flimrar
lcd.setCursor(2,1);
LCD.Print ("Step Size:");
Visa start-data
Display();
}
Visa - skriver ut RGB-värden och ange LEDvoiddisplay() {
uint8_t i.
strip.setPixelColor (0, curCols [0], curCols [1], curCols[2]);
Strip.show();
lcd.setCursor(0,0);
för (jag = 0; jag < 3; i ++) {
om (curCol == jag) {
LCD.Print(Char('*'));
} annat {
LCD.Print(' ');
}
om (jag == 0) lcd.print('R');
om (jag == 1) lcd.print('G');
om (jag == 2) lcd.print('B');
om (curCols [i] < 100) lcd.print(' ');
om (curCols [i] < 10) lcd.print(' ');
LCD.Print(curCols[i]);
}
lcd.setCursor (2,1), //lcd.print ("Step Size:");
lcd.setCursor(13,1);
LCD.Print(step_size);
LCD.Print(' '); hacka till har en siffra #s ut över gamla 2 siffrigt #s
} / / print_valvoidloop() {
uint8_t knappar = lcd.readButtons();
om (knappar) {
om (knappar & BUTTON_UP) {
curCols [curCol] += step_size;
Display();
Delay(DELAY_QUICK);
}
om (knappar & BUTTON_DOWN) {
curCols [curCol]-= step_size;
Display();
Delay(DELAY_QUICK);
}
om (knappar & BUTTON_LEFT) {
om (curCol == 0) {
curCol = 2;
} annat {
curCol--;
}
Display();
Delay(DELAY_SLOW);
}
om (knappar & BUTTON_RIGHT) {
om (curCol == 2) {
curCol = 0;
} annat {
curCol ++;
}
Display();
Delay(DELAY_SLOW);
}
om (knappar & BUTTON_SELECT) {
växel (step_size) {
case1:
step_size = 5;
bryta;
case5:
step_size = 10;
bryta;
case10:
step_size = 20;
bryta;
case20:
step_size = 50;
bryta;
standard:
step_size = 1;
}
Display();
Delay(DELAY_SLOW);
}
} / / knappar! = 0
} / / slinga