Advertisement
Guest User

serialRGB.ino

a guest
May 30th, 2012
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.91 KB | None | 0 0
  1. #include <Servo.h>
  2. Servo servoMain; // Define our Servo
  3.  
  4. int colorRGB[3];
  5. int servo[3];
  6.  
  7. int redPin = 9;
  8. int greenPin = 10;
  9. int bluePin = 11;
  10.  
  11. int servoPin = 3;
  12.  
  13. int delayVal = 50;
  14. int blnFade = 0;
  15. int h_int;
  16. float h;
  17. int r=0, g=0, b=0;
  18.  
  19. void h2rgb(float h, int &R, int &G, int &B);
  20. void colorFade();
  21.  
  22. void setup() {
  23.  
  24.   
  25.   randomSeed(analogRead(0));
  26.   Serial.begin(57600);
  27.   //Serial.begin(38400);
  28.   
  29.   //If the following line gets commented out, the colours work
  30.   servoMain.attach(servoPin); // servo
  31.   pinMode(redPin, OUTPUT);
  32.   pinMode(greenPin, OUTPUT);
  33.   pinMode(bluePin, OUTPUT);
  34.   
  35.   pinMode(servoPin, OUTPUT);
  36.  
  37. }
  38.  
  39. void loop() {
  40.  
  41.   if(Serial.available() >= 3){
  42.  
  43.     switch( byte( Serial.read() )) {
  44.     case 'r':
  45.       colorRGB[0] = Serial.read();
  46.       blnFade = 0;
  47.       break;
  48.     case 'g':
  49.       colorRGB[1] = Serial.read();
  50.       blnFade = 0;
  51.       break;
  52.     case 'b':
  53.       colorRGB[2] = Serial.read();
  54.       blnFade = 0;
  55.       break;
  56.     case 's':
  57.       servo[0] = Serial.read();
  58.       blnFade = 0;
  59.       break;
  60.  
  61.     case 'c':
  62.       Serial.flush();
  63.       blnFade = 0;
  64.       break;
  65.     case 'f':
  66.       delayVal = Serial.read();
  67.       Serial.flush();
  68.       colorFade();
  69.       blnFade = 1;
  70.     }
  71.    }
  72.    analogWrite(redPin, colorRGB[0]);
  73.    analogWrite(greenPin, colorRGB[1]);
  74.    analogWrite(bluePin, colorRGB[2]);
  75.   
  76.    servoMain.write(servo[0]);  // Turn Servo Left to 45 degrees
  77.    delay(15);
  78. }
  79.  
  80. void colorFade() {
  81.  
  82.  while (blnFade == 1) {
  83.  if(Serial.available() ){
  84.    blnFade = 0;
  85.    break;
  86.  }
  87.  for(int fadeValue = 0 ; fadeValue <= 1024; fadeValue +=5) {
  88.     h = ((float)fadeValue)/1024;
  89.     h_int = (int) 360*h;
  90.     h2rgb(h,r,g,b);
  91.     if(Serial.available() ){
  92.     blnFade = 0;
  93.     break;
  94.     }
  95.     analogWrite(redPin, r);
  96.     analogWrite(greenPin, g);
  97.     analogWrite(bluePin, b);
  98.     delay(delayVal);
  99.   }
  100.  }
  101. }
  102.  
  103. void h2rgb(float H, int& R, int& G, int& B) {
  104.   int var_i;
  105.   float S=1, V=1, var_1, var_2, var_3, var_h, var_r, var_g, var_b;
  106.   if ( S == 0 ) {
  107.     R = V * 255;
  108.     G = V * 255;
  109.     B = V * 255;
  110.   } else {
  111.     var_h = H * 6;
  112.     if ( var_h == 6 ) var_h = 0;
  113.     var_i = int( var_h ) ;
  114.     var_1 = V * ( 1 - S );
  115.     var_2 = V * ( 1 - S * ( var_h - var_i ) );
  116.     var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) );
  117.  
  118.     if ( var_i == 0 ) {
  119.     var_r = V     ;
  120.     var_g = var_3 ;
  121.     var_b = var_1 ;
  122.     } else if ( var_i == 1 ) {
  123.     var_r = var_2 ;
  124.     var_g = V     ;
  125.     var_b = var_1 ;
  126.     } else if ( var_i == 2 ) {
  127.     var_r = var_1 ;
  128.     var_g = V     ;
  129.     var_b = var_3 ;
  130.     } else if ( var_i == 3 ) {
  131.     var_r = var_1 ;
  132.     var_g = var_2 ;
  133.     var_b = V     ;
  134.     } else if ( var_i == 4 ) {
  135.     var_r = var_3 ;
  136.     var_g = var_1 ;
  137.     var_b = V     ;
  138.     } else {
  139.     var_r = V     ;
  140.     var_g = var_1 ;
  141.     var_b = var_2 ;
  142.     }
  143.     R = (1-var_r) * 255;
  144.     G = (1-var_g) * 255;
  145.     B = (1-var_b) * 255;
  146.   }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement