Imagine | Develop | Create
//#include <EEPROM.h> #include <LiquidCrystal.h> byte saveR[3] = {255, 0, 0}; byte saveG[3] = {0, 255, 0}; byte saveB[3] = {0, 0, 255}; byte R = 0; byte G = 0; byte B = 0; int DMX = 0; int mode = 1; int menu = 1; int setting = 1; int level = 1; int changespeed = 1000; int selectedcolor = 0; unsigned long storgedtime; int val; int RledPin = 1; int GledPin = 11; int BledPin = 9; int buttonPin = 14; int encoder0PinA = 15; int encoder0PinB = 16; int encoder0PinALast = LOW; int n = LOW; LiquidCrystal lcd(3, 4, 5, 6, 7, 8); void setup() { lcd.begin(16, 2); pinMode (encoder0PinA,INPUT); pinMode (encoder0PinB,INPUT); pinMode(buttonPin, INPUT); LCDcon(); runcolor(); } void loop() { n = digitalRead(encoder0PinA); if ((encoder0PinALast == LOW) && (n == HIGH)) { if (digitalRead(encoder0PinB) == LOW) { SelectOption(false); } else { SelectOption(true); } } encoder0PinALast = n; if(digitalRead(buttonPin) == HIGH) { while(digitalRead(buttonPin) == HIGH){runcolor();} if(level == 1) { mode = menu; menu = 1; level = 2; } else if(mode == 4) { level++; if(level>4) { level = 1; } } else { level = 1; } //LCDcon(); } runcolor(); } void runcolor() { switch (mode) { case 0: R = 0; B = 0; G = 0; break; case 1: if(storgedtime+30<millis()) { storgedtime = millis(); if(R+setting>255 || G+setting>255 || B+setting>255 || R+setting<0 || G+setting<0 || B+setting<0) { selectedcolor++; } if(selectedcolor>6) { selectedcolor = 0; } switch (selectedcolor) { case 0: B = B + setting; break; case 1: R = R - setting; break; case 2: G = G + setting; break; case 3: B = B - setting; break; case 4: R = R + setting; break; case 5: G = G - setting; break; } } break; case 2: if(storgedtime+setting<millis()) { storgedtime = millis(); R = saveR[selectedcolor]; G = saveG[selectedcolor]; B = saveB[selectedcolor]; selectedcolor++; if(selectedcolor >= sizeof(saveB)) { selectedcolor = 0; } } break; case 5: break; } analogWrite(RledPin, R); analogWrite(GledPin, G); analogWrite(BledPin, B); } void SelectOption(bool incres) { int var = -1; if(incres) { var = 1; } if(level == 1) { menu = menu + var; if(menu>5) { menu = 0; } else if(menu<0) { menu = 5; } } else if(level == 2 && (mode == 1||mode == 2)) { setting = setting + var; if(setting>255) { setting = 255; } else if(setting<0) { setting = 0; } } else if(level == 2 && (mode == 3)) { setting = setting + var; if(setting>=sizeof(saveR)) { setting = 0; } else if(setting<0) { setting = sizeof(saveR)-1; } } else if(level == 2 && mode == 4) { R = R + var; if(R>255) { R = 255; } else if(R<0) { R = 0; } } else if(level == 3 && mode == 4) { G = G + var; if(G>255) { G = 255; } else if(G<0) { G = 0; } } else if(level == 4 && mode == 4) { B = B + var; if(B>255) { B = 255; } else if(B<0) { B = 0; } } //LCDcon(); } void LCDcon() { lcd.clear(); lcd.setCursor(0, 0); switch (menu) { case 0: lcd.print("OFF"); break; case 1: lcd.print("Fade"); break; case 2: lcd.print("Strobe"); break; case 3: lcd.print("color"); break; case 4: lcd.print("custom"); break; case 5: lcd.print("DMX"); break; } if(level > 1) { lcd.setCursor(0, 1); switch (mode) { case 1: lcd.print("Speed:"); lcd.print(setting); break; case 2: lcd.print("Speed:"); lcd.print(setting); break; case 3: switch (setting) { case 1: lcd.print("red"); R = saveR[0]; G = saveG[0]; B = saveB[0]; break; case 2: lcd.print("green"); R = saveR[1]; G = saveG[1]; B = saveB[1]; break; case 3: lcd.print("Blue"); R = saveR[2]; G = saveG[2]; B = saveB[2]; break; } break; case 4: lcd.print("R:"); lcd.print(R); lcd.print("G:"); lcd.print(G); lcd.print("B:"); lcd.print(B); break; case 5: lcd.print(DMX); break; } lcd.print(" "); } }