Hi, Im wanting to change the colour of an RGB LED. To do this I am using the FSR (Force sensitive resistor), I have the arduino reading the FSR pressure but its not changing the colour of the RGB.
Any help would be appreciated.
Thanks
/*
* This script does the following:
* 1. Gets analog sensor input from a touch sensor
* 2. Processes sensor data in a four state machine
* 3. Adjusts an RGB LED color based on toouch sensor pressure using PWM
*
* Written by: Jacek Spiewla (jacekspi@umich.edu)
* Date Created: 2/23/2009
* Date Modified: 3/17/2009
*/
//Setup all pins
int sensPin = 2; // set the touch sensor (analog) input pin on Arduino
int redPin = 11; // set the PWM (analog) output pin on Arduino controlling the red anode
int grnPin = 9; // set the PWM (analog) output pin on Arduino controlling the green anode
int bluPin = 10; // set the PWM (analog) output pin on Arduino controlling the blue anode
//Setup all initial values
int val = 0; // initial value for touch sensor input
int state = 1; // initial machine state
//Initialize variables
int redVal; // pulse width variable for red anode
int grnVal; // pulse width variable for green anode
int bluVal; // pulse width variable for blue anode
void setup() {
pinMode(redPin, OUTPUT); // set the LED pins as output
pinMode(grnPin, OUTPUT);
pinMode(bluPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
val = analogRead(sensPin); // read touch sensor values
Serial.println(val);
if (state == 1) {sleep();} // turn off LED
else if (state == 2) {redIn();} // fade in red color
else if (state == 3) {grnIn();} // fade in green color
else if (state == 4) {bluIn();} // fade in blue color
}
void sleep() {
alloff(); // turn off LED
if (val > 20 && val <= 500) {state = 2;} // test for low pressure
if (val > 500 && val <= 850) {state = 3;} // test for medium pressure
if (val > 850) {state = 4;} // test for high pressure
}
void redIn() { // function to fade in red color and transition to other states
grnVal = 0;
analogWrite(grnPin, grnVal); // turn off green in case the last state was green
if (redVal == 255) { // if red is at maximum, continue to light it up
analogWrite(redPin, redVal);
} else { // else fade in the red color
redVal ++;
analogWrite(redPin, redVal);
}
if (val < 20) {state = 1;} // turn off the LED if no pressure detected
if (val > 500) {state = 3;} // fade in green if pressure has increased
}
void grnIn() { // function to fade in green color and transition to other states
redVal = 0;
bluVal = 0;
analogWrite(redPin, redVal); // turn off red in case the last state was blue
analogWrite(bluPin, bluVal); // turn off blue in case the last state was blue
if (grnVal == 255) { // if green is at maximum, continue to light it up
analogWrite(grnPin, grnVal);
} else { // else fade in the green color
grnVal ++;
analogWrite(grnPin, grnVal);
}
if (val <= 500) {state = 2;} // fade in red if pressure has decrease
if (val >= 850) {state = 4;} // fade in blue if pressure has increased
}
void bluIn() { // function to fade in blue color and transition to other states
grnVal = 0;
analogWrite(grnPin, grnVal); // turn off green in case the last state was green
if (bluVal == 255) { // if blue is at maximum, continue to light it up
analogWrite(bluPin, bluVal);
} else { // else fade in the blue color
bluVal ++;
analogWrite(bluPin, bluVal);
}
if (val <= 850) {state = 3;} // fade in green if pressure has decreased
}
void alloff() { // function to turn off the LED
redVal = 0;
grnVal = 0;
bluVal = 0;
analogWrite(redPin, redVal);
analogWrite(grnPin, grnVal);
analogWrite(bluPin, bluVal);
}
Moderator edit: Please use tags when posting code.