Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <IRremote.h>
- const int RECV_PIN = 7;
- IRrecv irrecv(RECV_PIN);
- decode_results results;
- #define RED 9
- #define GREEN 5
- #define BLUE 6
- int curr = 0;
- unsigned long previousMillis = 0;
- boolean inLoop = false;
- boolean direct = false;
- long interval = 250;
- float loopState = 0.000f;
- float redf = (2.7700f / 5.79f);
- float bluf = (1.0000f / 5.79f);
- float statics [10][3] = {
- { 0, 0, 0 },
- { 189, 61, 58 },
- { 213, 174, 65 },
- { 118, 111, 87 },
- { 228, 122, 46 },
- { 190, 158, 201 },
- { 241, 234, 127 },
- { 72, 81, 103 },
- { 169, 117, 79 },
- { 59, 134, 134 }
- };
- void setup() {
- pinMode(RED, OUTPUT);
- pinMode(GREEN, OUTPUT);
- pinMode(BLUE, OUTPUT);
- Serial.begin(9600);
- irrecv.enableIRIn();
- adjustedColour( 0x99, 0xCC, 0xFF );
- }
- /**
- Buttons 1-9: static colour. If same button pressed twice, toggle
- between "real" and adjusted colours.
- Button 100+/200+: Cycle through RGB spectrum, slow and faster
- Button 0: Lights off
- Buttons -/+: Half and full adjusted RGB (pure white)
- Button EQ: Full RGB, non-adjusted.
- */
- void loop() {
- boolean valueChanged = true;
- int newCurr = 0;
- if (irrecv.decode(&results)) {
- switch ( results.value ) {
- case 0xFFFFFFFF: // ignore repeats
- valueChanged = false;
- break;
- case 0xFF6897: // off
- newCurr = 0;
- break;
- /*
- 1-9
- */
- case 0xFF30CF: newCurr = 1; break;
- case 0xFF18E7: newCurr = 2; break;
- case 0xFF7A85: newCurr = 3; break;
- case 0xFF10EF: newCurr = 4; break;
- case 0xFF38C7: newCurr = 5; break;
- case 0xFF5AA5: newCurr = 6; break;
- case 0xFF42BD: newCurr = 7; break;
- case 0xFF4AB5: newCurr = 8; break;
- case 0xFF52AD: newCurr = 9; break;
- // loops 1 and 2:
- case 0xFF9867: newCurr = 10; break;
- case 0xFFB04F: newCurr = 11; break;
- // grays
- case 0xFFE01F: newCurr = 12; break;
- case 0xFFA857: newCurr = 13; break;
- case 0xFF906F: newCurr = 14; break;
- default: // unknown code
- Serial.println(results.value, HEX);
- valueChanged = false;
- break;
- }
- irrecv.resume();
- }
- else {
- valueChanged = false;
- }
- if ( valueChanged ) {
- if ( curr == newCurr && curr >= 0 && curr < 10 ) {
- direct = !direct;
- inLoop = false;
- }
- curr = newCurr;
- if ( direct ) {
- directColour( statics[curr][0], statics[curr][1], statics[curr][2] );
- }
- else {
- adjustedColour( statics[curr][0], statics[curr][1], statics[curr][2] );
- }
- if ( curr == 11 || curr == 10 ) {
- inLoop = true;
- }
- else {
- switch ( curr ) {
- case 12:
- adjustedColour( 127, 127, 127 );
- break;
- case 13:
- adjustedColour( 255, 255, 255 );
- break;
- case 14:
- directColour( 255, 255, 255 );
- break;
- }
- }
- }
- unsigned long currentMillis = millis();
- if (inLoop && (unsigned long)(currentMillis - previousMillis) > interval) {
- previousMillis = currentMillis;
- loopState++;
- if ( loopState > 359.000f ) {
- loopState = 0.000f;
- }
- float radRed = loopState * DEG_TO_RAD;
- float radGreen = (loopState + 120) * DEG_TO_RAD;
- float radBlue = (loopState + 240) * DEG_TO_RAD;
- if ( curr == 10 ) {
- directColour(int((sin(radRed) + 1) * 127), int((sin(radGreen) + 1) * 127), int((sin(radBlue) + 1) * 127));
- }
- else {
- adjustedColour(int((sin(radRed) + 1) * 127), int((sin(radGreen) + 1) * 127), int((sin(radBlue) + 1) * 127));
- }
- }
- }
- void directColour(int red, int green, int blue) {
- analogWrite(RED, red);
- analogWrite(GREEN, green);
- analogWrite(BLUE, blue);
- }
- void adjustedColour(int red, int green, int blue) {
- float redAdjust = (red * 1.00f) * redf;
- float bluAdjust = (blue * 1.00f) * bluf;
- analogWrite(RED, int(redAdjust));
- analogWrite(GREEN, green);
- analogWrite(BLUE, int(bluAdjust));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement