Advertisement
Guest User

Untitled

a guest
Jan 15th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <IRremote.h>
  2.  
  3. const int RECV_PIN = 7;
  4. IRrecv irrecv(RECV_PIN);
  5. decode_results results;
  6.  
  7. #define RED 9
  8. #define GREEN 5
  9. #define BLUE 6
  10.  
  11. int curr = 0;
  12. unsigned long previousMillis = 0;
  13. boolean inLoop = false;
  14. boolean direct = false;
  15. long interval = 250;
  16. float loopState = 0.000f;
  17.  
  18. float redf = (2.7700f / 5.79f);
  19. float bluf = (1.0000f / 5.79f);
  20.  
  21. float statics [10][3] = {
  22.   {   0,   0,   0 },
  23.   { 189,  61,  58 },
  24.   { 213, 174,  65 },
  25.   { 118, 111,  87 },
  26.   { 228, 122,  46 },
  27.   { 190, 158, 201 },
  28.   { 241, 234, 127 },
  29.   {  72,  81, 103 },
  30.   { 169, 117,  79 },
  31.   {  59, 134, 134 }
  32. };
  33.  
  34. void setup() {
  35.   pinMode(RED, OUTPUT);
  36.   pinMode(GREEN, OUTPUT);
  37.   pinMode(BLUE, OUTPUT);
  38.  
  39.   Serial.begin(9600);
  40.   irrecv.enableIRIn();
  41.   adjustedColour( 0x99, 0xCC, 0xFF );
  42. }
  43.  
  44. /**
  45.    Buttons 1-9: static colour. If same button pressed twice, toggle
  46.    between "real" and adjusted colours.
  47.  
  48.    Button 100+/200+: Cycle through RGB spectrum, slow and faster
  49.  
  50.    Button 0: Lights off
  51.  
  52.    Buttons -/+: Half and full adjusted RGB (pure white)
  53.  
  54.    Button EQ: Full RGB, non-adjusted.
  55. */
  56. void loop() {
  57.  
  58.   boolean valueChanged = true;
  59.   int newCurr = 0;
  60.  
  61.   if (irrecv.decode(&results)) {
  62.     switch ( results.value ) {
  63.       case 0xFFFFFFFF: // ignore repeats
  64.         valueChanged = false;
  65.         break;
  66.       case 0xFF6897: // off
  67.         newCurr = 0;
  68.         break;
  69.  
  70.       /*
  71.          1-9
  72.       */
  73.       case 0xFF30CF: newCurr = 1; break;
  74.       case 0xFF18E7: newCurr = 2; break;
  75.       case 0xFF7A85: newCurr = 3; break;
  76.       case 0xFF10EF: newCurr = 4; break;
  77.       case 0xFF38C7: newCurr = 5; break;
  78.       case 0xFF5AA5: newCurr = 6; break;
  79.       case 0xFF42BD: newCurr = 7; break;
  80.       case 0xFF4AB5: newCurr = 8; break;
  81.       case 0xFF52AD: newCurr = 9; break;
  82.  
  83.       // loops 1 and 2:
  84.       case 0xFF9867: newCurr = 10; break;
  85.       case 0xFFB04F: newCurr = 11; break;
  86.  
  87.       // grays
  88.       case 0xFFE01F: newCurr = 12; break;
  89.       case 0xFFA857: newCurr = 13; break;
  90.       case 0xFF906F: newCurr = 14; break;
  91.  
  92.       default: // unknown code
  93.         Serial.println(results.value, HEX);
  94.         valueChanged = false;
  95.         break;
  96.     }
  97.     irrecv.resume();
  98.   }
  99.   else {
  100.     valueChanged = false;
  101.   }
  102.  
  103.   if ( valueChanged ) {
  104.     if ( curr == newCurr && curr >= 0 && curr < 10 ) {
  105.       direct = !direct;
  106.       inLoop = false;
  107.     }
  108.     curr = newCurr;
  109.     if ( direct ) {
  110.       directColour( statics[curr][0], statics[curr][1], statics[curr][2] );
  111.     }
  112.     else {
  113.       adjustedColour( statics[curr][0], statics[curr][1], statics[curr][2] );
  114.     }
  115.     if ( curr == 11 || curr == 10 ) {
  116.       inLoop = true;
  117.     }
  118.     else {
  119.       switch ( curr ) {
  120.         case 12:
  121.           adjustedColour( 127, 127, 127 );
  122.           break;
  123.         case 13:
  124.           adjustedColour( 255, 255, 255 );
  125.           break;
  126.         case 14:
  127.           directColour( 255, 255, 255 );
  128.           break;
  129.       }
  130.     }
  131.   }
  132.  
  133.   unsigned long currentMillis = millis();
  134.  
  135.   if (inLoop && (unsigned long)(currentMillis - previousMillis) > interval) {
  136.     previousMillis = currentMillis;
  137.     loopState++;
  138.     if ( loopState > 359.000f ) {
  139.       loopState = 0.000f;
  140.     }
  141.     float radRed = loopState * DEG_TO_RAD;
  142.     float radGreen = (loopState + 120) * DEG_TO_RAD;
  143.     float radBlue = (loopState + 240) * DEG_TO_RAD;
  144.     if ( curr == 10 ) {
  145.       directColour(int((sin(radRed) + 1) * 127), int((sin(radGreen) + 1) * 127), int((sin(radBlue) + 1) * 127));
  146.     }
  147.     else {
  148.       adjustedColour(int((sin(radRed) + 1) * 127), int((sin(radGreen) + 1) * 127), int((sin(radBlue) + 1) * 127));
  149.     }
  150.   }
  151. }
  152.  
  153. void directColour(int red, int green, int blue) {
  154.   analogWrite(RED,   red);
  155.   analogWrite(GREEN, green);
  156.   analogWrite(BLUE,  blue);
  157. }
  158.  
  159. void adjustedColour(int red, int green, int blue) {
  160.   float redAdjust = (red * 1.00f) * redf;
  161.   float bluAdjust = (blue * 1.00f) * bluf;
  162.   analogWrite(RED,   int(redAdjust));
  163.   analogWrite(GREEN, green);
  164.   analogWrite(BLUE,  int(bluAdjust));
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement