#include #include LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display. ACHTUNG: Adresse kann auch 0x3F sein !!! // Anschlüsse: // GND - GND // VCC - 5V // SDA - ANALOG Pin 4 // SCL - ANALOG pin 5 int Poti_R = A0; int Poti_G = A1; int Poti_B = A2; int R; // Farbwert für Rot int G; // Farbwert für Grün int B; // Farbwert für Blau int R_Prozent; // Prozentwert von Rot int G_Prozent; // Prozentwert von Grün int B_Prozent; // Prozentwert von Blau // =========================== // ======= SETUP ========= // =========================== void setup() { Serial.begin(9600); lcd.begin(); // initialize the lcd lcd.backlight(); lcd.setCursor(0,0); lcd.print("Farbmischer"); lcd.setCursor(0,1); lcd.print("Version 1.0"); delay(3000); lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,0); lcd.print("R:"); lcd.setCursor(5,0); lcd.print("G:"); lcd.setCursor(10,0); lcd.print("B:"); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); } // =========================== // ======= LOOP ========= // =========================== void loop() { // Einlesen der mit Poti eingestellten 3 Farbwerte R = analogRead(Poti_R); G = analogRead(Poti_G); B = analogRead(Poti_B); // Umwandlung vom Wertebereich [0,1023] nach [0,255] R = map(R, 0, 1023, 0, 255); G = map(G, 0, 1023, 0, 255); B = map(B, 0, 1023, 0, 255); // PWM-Ausgabe der 3 Farbwerte an die RGB-LED analogWrite(9,R); analogWrite(10,G); analogWrite(11,B); // Bestimmung der Farbprozente 0-100% R_Prozent = map(R, 0, 255, 0, 100); G_Prozent = map(G, 0, 255, 0, 100); B_Prozent = map(B, 0, 255, 0, 100); lcd.setCursor(2,0); lcd.print(" "); lcd.setCursor(7,0); lcd.print(" "); lcd.setCursor(12,0); lcd.print(" "); lcd.setCursor(2,0); lcd.print(R_Prozent); lcd.setCursor(7,0); lcd.print(G_Prozent); lcd.setCursor(12,0); lcd.print(B_Prozent); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(5,1); lcd.print(" "); lcd.setCursor(10,1); lcd.print(" "); Serial.println(100.0 * R/(R + G + B),1); lcd.setCursor(0,1); lcd.print(100.0 * R/(R + G + B),0); lcd.print("%"); lcd.setCursor(5,1); lcd.print(100.0 * G/(R + G + B),0); lcd.print("%"); lcd.setCursor(10,1); lcd.print(100.0 * B/(R + G + B),0); lcd.print("%"); delay(200); }