RGB/ FSR pressure sensor, code not doing what it says.
i have hooked arduino , used code below. code says isn't code doing. when there no pressure, rgb still on. pressure sensor working, not changing colours right. here code , photo.
any ??
thanks
*/
//setup pins
int senspin = 2; // set touch sensor (analog) input pin on arduino
int redpin = 3; // set pwm (analog) output pin on arduino controlling red anode
int grnpin = 5; // set pwm (analog) output pin on arduino controlling green anode
int blupin = 6; // set pwm (analog) output pin on arduino controlling blue anode
//setup initial values
int val = 0; // initial value touch sensor input
int state = 1; // initial machine state
//initialize variables
int redval; // pulse width variable red anode
int grnval; // pulse width variable green anode
int bluval; // pulse width variable blue anode
void setup() {
pinmode(redpin, output); // set led pins 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 low pressure
if (val > 500 && val <= 850) {state = 3;} // test medium pressure
if (val > 850) {state = 4;} // test high pressure
}
void redin() { // function fade in red color , transition other states
grnval = 0;
analogwrite(grnpin, grnval); // turn off green in case last state green
if (redval == 255) { // if red @ maximum, continue light up
analogwrite(redpin, redval);
} else { // else fade in red color
redval ++;
analogwrite(redpin, redval);
}
if (val < 20) {state = 1;} // turn off led if no pressure detected
if (val > 500) {state = 3;} // fade in green if pressure has increased
}
void grnin() { // function fade in green color , transition other states
redval = 0;
bluval = 0;
analogwrite(redpin, redval); // turn off red in case last state blue
analogwrite(blupin, bluval); // turn off blue in case last state blue
if (grnval == 255) { // if green @ maximum, continue light up
analogwrite(grnpin, grnval);
} else { // else fade in 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 fade in blue color , transition other states
grnval = 0;
analogwrite(grnpin, grnval); // turn off green in case last state green
if (bluval == 255) { // if blue @ maximum, continue light up
analogwrite(blupin, bluval);
} else { // else fade in blue color
bluval ++;
analogwrite(blupin, bluval);
}
if (val <= 850) {state = 3;} // fade in green if pressure has decreased
}
void alloff() { // function turn off led
redval = 0;
grnval = 0;
bluval = 0;
analogwrite(redpin, redval);
analogwrite(grnpin, grnval);
analogwrite(blupin, bluval);
}
any ??
thanks
*/
//setup pins
int senspin = 2; // set touch sensor (analog) input pin on arduino
int redpin = 3; // set pwm (analog) output pin on arduino controlling red anode
int grnpin = 5; // set pwm (analog) output pin on arduino controlling green anode
int blupin = 6; // set pwm (analog) output pin on arduino controlling blue anode
//setup initial values
int val = 0; // initial value touch sensor input
int state = 1; // initial machine state
//initialize variables
int redval; // pulse width variable red anode
int grnval; // pulse width variable green anode
int bluval; // pulse width variable blue anode
void setup() {
pinmode(redpin, output); // set led pins 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 low pressure
if (val > 500 && val <= 850) {state = 3;} // test medium pressure
if (val > 850) {state = 4;} // test high pressure
}
void redin() { // function fade in red color , transition other states
grnval = 0;
analogwrite(grnpin, grnval); // turn off green in case last state green
if (redval == 255) { // if red @ maximum, continue light up
analogwrite(redpin, redval);
} else { // else fade in red color
redval ++;
analogwrite(redpin, redval);
}
if (val < 20) {state = 1;} // turn off led if no pressure detected
if (val > 500) {state = 3;} // fade in green if pressure has increased
}
void grnin() { // function fade in green color , transition other states
redval = 0;
bluval = 0;
analogwrite(redpin, redval); // turn off red in case last state blue
analogwrite(blupin, bluval); // turn off blue in case last state blue
if (grnval == 255) { // if green @ maximum, continue light up
analogwrite(grnpin, grnval);
} else { // else fade in 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 fade in blue color , transition other states
grnval = 0;
analogwrite(grnpin, grnval); // turn off green in case last state green
if (bluval == 255) { // if blue @ maximum, continue light up
analogwrite(blupin, bluval);
} else { // else fade in blue color
bluval ++;
analogwrite(blupin, bluval);
}
if (val <= 850) {state = 3;} // fade in green if pressure has decreased
}
void alloff() { // function turn off led
redval = 0;
grnval = 0;
bluval = 0;
analogwrite(redpin, redval);
analogwrite(grnpin, grnval);
analogwrite(blupin, bluval);
}
code: [select]
if (bluval == 255) { // if blue @ maximum, continue light up
analogwrite(blupin, bluval);
} else { // else fade in blue color
bluval ++;
analogwrite(blupin, bluval);
}can shorter ==>
code: [select]
if (bluval < 255) bluval ++;
analogwrite(blupin, bluval);
}also other colors

i rethink code,
you have 3 leds should overlap
red [0..512] => 0..255..0
green [256-768] ==> 0..255..0
blue [512-768] ==> 0..255
that give following code - give try
code: [select]
//setup pins
int senspin = 2; // set touch sensor (analog) input pin on arduino
int redpin = 3; // set pwm (analog) output pin on arduino controlling red anode
int grnpin = 5; // set pwm (analog) output pin on arduino controlling green anode
int blupin = 6; // set pwm (analog) output pin on arduino controlling blue anode
//initialize variables
int redval; // pulse width variable red anode
int grnval; // pulse width variable green anode
int bluval; // pulse width variable blue anode
void setup()
{
pinmode(redpin, output); // set led pins output
pinmode(grnpin, output);
pinmode(blupin, output);
serial.begin(9600);
}
void loop()
{
int val = analogread(senspin); // read touch sensor values
if (val < 256)
{
redval = val;
greenval = 0;
blueval = 0;
}
else if (val < 512)
{
redval = 512 - val;
greenval = val-256;
blueval = 0;
}
else if (val < 768)
{
redval = 0;
greenval = 768-val;
blueval = val-512;
}
else
{
redval = 1023-val;
greenval = 1023-val;
blueval = 255;
}
display(redval, greenval, blueval);
}
void display(int r, int g, int b)
{
analogwrite(redpin, r);
analogwrite(grnpin, g);
analogwrite(blupin, b);
}
Arduino Forum > Using Arduino > Sensors > RGB/ FSR pressure sensor, code not doing what it says.
arduino
Comments
Post a Comment