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);
}

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

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial