/* Tagtool - Arduino 2 Nodekit V02 */ /* Code adapted from original @ www.tagtool.org */ /* RGB LEDs included - change color as color potentiometer value changes */ /* All turns red and blink when push button is pressed */ /* Modified by Fred Paulino & Lucas Mafra - gambiologia.net */ /* Graffiti Research Lab Brasil */ // inputs int pinS1 = 0; int pinS2 = 1; int pinS3 = 2; int pinS4 = 3; int pinS5 = 4; int pinS6 = 5; static const int avgCount = 6; int valS1, valS2, valS3, valS4, valS5, valS6 = 0; int arr1[avgCount]; int arr2[avgCount]; int arr3[avgCount]; int arr4[avgCount]; int arr5[avgCount]; int arr6[avgCount]; int pinButton = 7; int valButton = 0; int i; int index = 0; // RGB LEDs PWM int rPin1 = 11; int rPin2 = 10; int gPin1 = 9; int gPin2 = 6; int bPin1 = 5; int bPin2 = 3; float h; int h_int; int r=0, g=0, b=0; int val=0; void h2rgb(float h, int &R, int &G, int &B); /** * Average the values in the averaging arrays */ void avg() { valS1 = valS2 = valS3 = valS4 = valS5 = valS6 = 0; for(i = 0; i < avgCount; i++) { valS1 += arr1[i]; valS2 += arr2[i]; valS3 += arr3[i]; valS4 += arr4[i]; valS5 += arr5[i]; valS6 += arr6[i]; } valS1 /= avgCount; valS2 /= avgCount; valS3 /= avgCount; valS4 /= avgCount; valS5 /= avgCount; valS6 /= avgCount; } void setup() { // reset averageArrays for (i = 0; i < avgCount; i++) { arr1[i] = 0; arr2[i] = 0; arr3[i] = 0; arr4[i] = 0; arr5[i] = 0; arr6[i] = 0; } index = 0; // start serial port at 9600 bps: Serial.begin(9600); } void loop() { // if we get a valid byte, read analog ins: byte request; //Serial.print(10); if (Serial.available() > 0) { request = Serial.read(); if(request == 'A') { valButton = digitalRead(pinButton); // read input value from the Pushbutton // out actual values into the averaging arrays val = arr1[index] = analogRead(pinS1); arr2[index] = analogRead(pinS2); arr3[index] = analogRead(pinS3); arr4[index] = analogRead(pinS4); arr5[index] = analogRead(pinS5); arr6[index] = analogRead(pinS6); // increment index -> if index exceeds array sizes reset to zero index++; if (index >= avgCount) { index = 0; } // calculate average values avg(); delay(10); // Slider 1 Serial.print(valS1 / 4, BYTE); // Slider 2 Serial.print(valS2 / 4, BYTE); // Slider 3 Serial.print(valS3 / 4, BYTE); // Slider 4 Serial.print(valS4 / 4, BYTE); // Slider 5 Serial.print(valS5 / 4, BYTE); // Slider 6 Serial.print(valS6 / 4, BYTE); // Pushbutton Serial.print(valButton * 255, BYTE); // setup RGB LEDs colors executaLEDS(val); } else if(request == 'N') { Serial.print("Tagtool.Controller"); } } //serial.available() } // turn all RGB LEDs red and blink void blinkAllRed() { analogWrite(rPin1, 255); analogWrite(rPin2, 255); analogWrite(gPin1, 0); analogWrite(gPin2, 0); analogWrite(bPin1, 0); analogWrite(bPin2, 0); delay(150); analogWrite(rPin1, 0); analogWrite(rPin2, 0); analogWrite(gPin1, 0); analogWrite(gPin2, 0); analogWrite(bPin1, 0); analogWrite(bPin2, 0); delay(150); } void executaLEDS(int valCor) { /*************** TAGTOOL TABLE LEDs CONTROL *******************/ h = ((float)valCor)/1024; h_int = (int) 360*h; // convert value from potentiometer to three color variables h2rgb(h,r,g,b); // if pushbutton pressed, turns red & blink - this is cool if (valButton == 0) { blinkAllRed(); } else { // otherwise keep RGB value analogWrite(rPin1, r); analogWrite(rPin2, r); analogWrite(gPin1, g); analogWrite(gPin2, g); analogWrite(bPin1, b); analogWrite(bPin2, b); } } // executa leds fim // hue control - convert potentiometer value to RGB color // still don't follow same color as brush at Nodekit :^( // but it will be corrected soon :^) // original function from akgraphics @ http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1207331496 void h2rgb(float H, int& R, int& G, int& B) { int var_i; float S=1, V=1, var_1, var_2, var_3, var_h, var_r, var_g, var_b; if ( S == 0 ) //HSV values = 0 Ö 1 { R = V * 255; G = V * 255; B = V * 255; } else { var_h = H * 6; if ( var_h == 6 ) var_h = 0; //H must be < 1 var_i = int( var_h ) ; //Or ... var_i = floor( var_h ) var_1 = V * ( 1 - S ); var_2 = V * ( 1 - S * ( var_h - var_i ) ); var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) ); if ( var_i == 0 ) { var_r = V ; var_g = var_3 ; var_b = var_1 ; } else if ( var_i == 1 ) { var_r = var_2 ; var_g = V ; var_b = var_1 ; } else if ( var_i == 2 ) { var_r = var_1 ; var_g = V ; var_b = var_3 ; } else if ( var_i == 3 ) { var_r = var_1 ; var_g = var_2 ; var_b = V ; } else if ( var_i == 4 ) { var_r = var_3 ; var_g = var_1 ; var_b = V ; } else { var_r = V ; var_g = var_1 ; var_b = var_2 ; } R = (1-var_r) * 255; //RGB results = 0 Ö 255 G = (1-var_g) * 255; B = (1-var_b) * 255; } }