Included Button to start rainbow
This commit is contained in:
		
							
								
								
									
										123
									
								
								SideboardLED.ino
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								SideboardLED.ino
									
									
									
									
									
								
							| @@ -23,6 +23,8 @@ CRGBSet ledset(leds, NUM_LEDS); | |||||||
| #define BRIGHTNESS  128   /** Average brightness, that shall not exeeded */ | #define BRIGHTNESS  128   /** Average brightness, that shall not exeeded */ | ||||||
| #define FADEBLACK   -2 | #define FADEBLACK   -2 | ||||||
|  |  | ||||||
|  | #define PIN_BUTTON 4      /** PD4 = Input for button */ | ||||||
|  |  | ||||||
| /****************** Command line ***********************/ | /****************** Command line ***********************/ | ||||||
| int CMD_MAX = 128; | int CMD_MAX = 128; | ||||||
| char myCmd[128]; | char myCmd[128]; | ||||||
| @@ -35,9 +37,7 @@ void setup() { | |||||||
|   // so that colors can be more accurately rendered through the 'temperature' profiles |   // so that colors can be more accurately rendered through the 'temperature' profiles | ||||||
|   FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS); |   FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS); | ||||||
|  |  | ||||||
|   //TODO: Can this line be removed? |   pinMode(PIN_BUTTON, INPUT);        // sets the digital pin 7 as input | ||||||
|   //FastLED.setBrightness( BRIGHTNESS ); |  | ||||||
|  |  | ||||||
|    |    | ||||||
|   // Turn the LED on, then pause |   // Turn the LED on, then pause | ||||||
|   leds[0] = CRGB::Red; |   leds[0] = CRGB::Red; | ||||||
| @@ -104,10 +104,56 @@ void sendPingAckOverSerial(){ | |||||||
|   Serial.println(F("PACK")); |   Serial.println(F("PACK")); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Extract the color from the given LED command | ||||||
|  |  */ | ||||||
|  | void parseColor(char* pCmd, CRGB *pColor) { | ||||||
|  |   unsigned int colorParts[3]; /* 0: red, 1: green, 2: blue */ | ||||||
|  |   unsigned int colorSum = 0; | ||||||
|  |   for(int i=0; i < (2*3); i+= 2) { | ||||||
|  |     colorParts[i/2] = (pCmd[i] <= '9') ? ((pCmd[i]-'0') << 4) : (((pCmd[i]-'A')+10) << 4); | ||||||
|  |     if (colorParts[i/2] < 0) { Serial.print("calcErr:"); Serial.println(colorParts[i/2]); } | ||||||
|  |     colorParts[i/2] += (pCmd[i+1] <= '9') ? ((pCmd[i+1]-'0')) : (((pCmd[i+1]-'A')+10)); | ||||||
|  |   } | ||||||
|  |   pColor->r = colorParts[0]; /* fill red */ | ||||||
|  |   pColor->g = colorParts[1]; /* fill green */ | ||||||
|  |   pColor->b = colorParts[2]; /* fill blue */ | ||||||
|  |  | ||||||
|  |   colorSum = pColor->r; | ||||||
|  |   colorSum += pColor->g; | ||||||
|  |   colorSum += pColor->b; | ||||||
|  |   /* Generate the average brightness */ | ||||||
|  |   colorSum = (colorSum / 3); | ||||||
|  |   if (colorSum > BRIGHTNESS) { | ||||||
|  |     /* scale the brightness, if the values are too high */ | ||||||
|  |     pColor->r = pColor->r * BRIGHTNESS / colorSum; | ||||||
|  |     pColor->g = pColor->g * BRIGHTNESS / colorSum; | ||||||
|  |     pColor->b = pColor->b * BRIGHTNESS / colorSum; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Give the user some helpfull advice. | ||||||
|  |  * (Text is stored in the flash to save RAM of the Arduino) | ||||||
|  |  */ | ||||||
|  | void sendHelpOverSerial() | ||||||
|  | { | ||||||
|  |   Serial.println(F("----help is coming----")); | ||||||
|  |   Serial.println(F("all commands must be prefixed with \"ollpe\"")); | ||||||
|  |   Serial.println(F("----commands----")); | ||||||
|  |   Serial.println(F("axxxxxx\t set all leds to RRGGBB (hex: 0-9A-F)")); | ||||||
|  |   Serial.println(F("w00xxxxxx\t set led 0 (first) to RRGGBB (hex: 0-9A-F)"));   | ||||||
|  |   Serial.println(F("r00\t returns state of led 0 (first)")); | ||||||
|  |   Serial.println(F("c\t clear all leds (000000h)")); | ||||||
|  |   Serial.println(F("m\t magic rainbow for all leds until next command is received")); | ||||||
|  |   Serial.println(F("ping\t returns \"PACK\"")); | ||||||
|  |   Serial.println(F("help\t prints this help")); | ||||||
|  |   Serial.println(F("----help end----")); | ||||||
|  | } | ||||||
|  |  | ||||||
| void loop() {  | void loop() {  | ||||||
|   /* spcial rainbow mode */ |   /* spcial rainbow mode */ | ||||||
|   static long rainbowIndex = -1; |   static int rainbowIndex = -1; | ||||||
|   static CRGB color; |   static CRGB color; | ||||||
|   if (rainbowIndex < 0) { |   if (rainbowIndex < 0) { | ||||||
|     //delay needed to have a chance to get the whole message |     //delay needed to have a chance to get the whole message | ||||||
| @@ -123,9 +169,16 @@ void loop() { | |||||||
|       rainbowIndex=0; |       rainbowIndex=0; | ||||||
|     } |     } | ||||||
|     ledset.fill_rainbow(rainbowIndex++); |     ledset.fill_rainbow(rainbowIndex++); | ||||||
|     ledset.fadeLightBy( 64 ); |     // Dim a color by 25% (64/256ths) | ||||||
|  |     ledset.fadeLightBy( 60 ); | ||||||
|     FastLED.delay(30); |     FastLED.delay(30); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   // check if button was pressed | ||||||
|  |   if (digitalRead(PIN_BUTTON)) { | ||||||
|  |     Serial.println(F("BTN")); | ||||||
|  |     rainbowIndex=0; /* activate rainbow */ | ||||||
|  |   } | ||||||
|   |   | ||||||
|   int inputSize = readFromSerialIntoCmdArray(); |   int inputSize = readFromSerialIntoCmdArray(); | ||||||
|   if (inputSize > 0) |   if (inputSize > 0) | ||||||
| @@ -153,12 +206,6 @@ void loop() { | |||||||
|     else if(myCmd[5] == 'a') |     else if(myCmd[5] == 'a') | ||||||
|     { |     { | ||||||
|       parseColor(myCmd+6, &color); |       parseColor(myCmd+6, &color); | ||||||
|       Serial.print("RGB:"); |  | ||||||
|       Serial.print(color.r); |  | ||||||
|       Serial.print(";"); |  | ||||||
|       Serial.print(color.g); |  | ||||||
|       Serial.print(";"); |  | ||||||
|       Serial.println(color.b); |  | ||||||
|       ledset.fill_solid(color); |       ledset.fill_solid(color); | ||||||
|       sendAckOverSerial(); |       sendAckOverSerial(); | ||||||
|     } |     } | ||||||
| @@ -170,7 +217,7 @@ void loop() { | |||||||
|     else if(myCmd[5] == 'm') |     else if(myCmd[5] == 'm') | ||||||
|     { |     { | ||||||
|       rainbowIndex=0; /* activate rainbow */ |       rainbowIndex=0; /* activate rainbow */ | ||||||
|       Serial.println(F("Rainbow started")); |       Serial.println(F("Rainbow")); | ||||||
|       sendAckOverSerial(); |       sendAckOverSerial(); | ||||||
|     } |     } | ||||||
|     else if(myCmd[5] == 'w') |     else if(myCmd[5] == 'w') | ||||||
| @@ -189,61 +236,11 @@ void loop() { | |||||||
|     { |     { | ||||||
|       int index = (myCmd[6]-'0') * 10 + (myCmd[7]-'0'); |       int index = (myCmd[6]-'0') * 10 + (myCmd[7]-'0'); | ||||||
|       if (index > NUM_LEDS) { |       if (index > NUM_LEDS) { | ||||||
|         Serial.println(F("Index too large")); |  | ||||||
|         sendNackOverSerial(); |         sendNackOverSerial(); | ||||||
|       } else { |       } else { | ||||||
|        Serial.println(leds[index]); |        Serial.println(leds[index]); | ||||||
|  |         sendAckOverSerial(); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Extract the color from the given LED command |  | ||||||
|  */ |  | ||||||
| void parseColor(char* pCmd, CRGB *pColor) { |  | ||||||
|   unsigned int colorParts[3]; /* 0: red, 1: green, 2: blue */ |  | ||||||
|   unsigned long colorSum = 0; |  | ||||||
|   for(int i=0; i < (2*3); i+= 2) { |  | ||||||
|     Serial.print(pCmd[i]);Serial.print(" and "); Serial.println(pCmd[i+1]); |  | ||||||
|     colorParts[i/2] = (pCmd[i] <= '9') ? ((pCmd[i]-'0') << 4) : (((pCmd[i]-'A')+10) << 4); |  | ||||||
|     if (colorParts[i/2] < 0) { Serial.print("calcErr:"); Serial.println(colorParts[i/2]); } |  | ||||||
|     colorParts[i/2] += (pCmd[i+1] <= '9') ? ((pCmd[i+1]-'0')) : (((pCmd[i+1]-'A')+10)); |  | ||||||
|   } |  | ||||||
|   pColor->r = colorParts[0]; /* fill red */ |  | ||||||
|   pColor->g = colorParts[1]; /* fill green */ |  | ||||||
|   pColor->b = colorParts[2]; /* fill blue */ |  | ||||||
|  |  | ||||||
|   colorSum = pColor->r; |  | ||||||
|   colorSum += pColor->g; |  | ||||||
|   colorSum += pColor->b; |  | ||||||
|   /* Generate the average brightness */ |  | ||||||
|   colorSum = (colorSum / 3); |  | ||||||
|   Serial.print("sum:"); |  | ||||||
|   Serial.println(colorSum); |  | ||||||
|   if (colorSum > BRIGHTNESS) { |  | ||||||
|     /* scale the brightness, if the values are too high */ |  | ||||||
|     pColor->r = pColor->r * BRIGHTNESS / colorSum; |  | ||||||
|     pColor->g = pColor->g * BRIGHTNESS / colorSum; |  | ||||||
|     pColor->b = pColor->b * BRIGHTNESS / colorSum; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * Give the user some helpfull advice. |  | ||||||
|  * (Text is stored in the flash to save RAM of the Arduino) |  | ||||||
|  */ |  | ||||||
| void sendHelpOverSerial() |  | ||||||
| { |  | ||||||
|   Serial.println(F("----help is coming----")); |  | ||||||
|   Serial.println(F("all commands must be prefixed with \"ollpe\"")); |  | ||||||
|   Serial.println(F("----commands----")); |  | ||||||
|   Serial.println(F("axxxxxx\t set all leds to RRGGBB (hex: 0-9A-F)")); |  | ||||||
|   Serial.println(F("w00xxxxxx\t set led 0 (first) to RRGGBB (hex: 0-9A-F)"));   |  | ||||||
|   Serial.println(F("r00\t returns state of led 0 (first)")); |  | ||||||
|   Serial.println(F("c\t clear all leds (000000h)")); |  | ||||||
|   Serial.println(F("m\t magic rainbow for all leds until next command is received")); |  | ||||||
|   Serial.println(F("ping\t returns \"PACK\"")); |  | ||||||
|   Serial.println(F("help\t prints this help")); |  | ||||||
|   Serial.println(F("----help end----")); |  | ||||||
| } |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user