Pages: [1]   Go Down
Author Topic: Programming a flex sensor to RGB LED's  (Read 84 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I feel like I am almost there, there is just something wrong. The red LED turns off when it goes under 242, but I don't know why the LED won't change to yellow and green.

Code:
/*
  Analog input, analog output, serial output
 
 Reads an analog input pin, maps the result to a range from 0 to 255
 and uses the result to set the pulsewidth modulation (PWM) of an output pin.
 Also prints the results to the serial monitor.
 
 The circuit:
 * potentiometer connected to analog pin 0.
   Center pin of the potentiometer goes to the analog pin.
   side pins of the potentiometer go to +5V and ground
 * LED connected from digital pin 9 to ground
 
 created 29 Dec. 2008
 modified 9 Apr 2012
 by Tom Igoe
 
 This example code is in the public domain.
 
 */

// These constants won't change.  They're used to give names
// to the pins used:
const int analogInPin = A0;  // Analog input pin that the flex sensor is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0;        // value read from the flexsensor
int outputValue = 0;        // value output to the PWM (analog out)
int redPin   = 7;   // Red LED,   connected to digital pin 5
int greenPin = 6;  // Green LED, connected to digital pin 6
int bluePin  = 5;  // Blue LED,  connected to digital pin 7

void setup() {
 
  // sets the pins as output
  pinMode(redPin,   OUTPUT); 
  pinMode(greenPin, OUTPUT);   
  pinMode(bluePin,  OUTPUT);
 
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
 
}
/*
void outputColor(int red, int green, int blue) {
 
  analogWrite(redPin, red);
  analogWrite(bluePin, blue);
  analogWrite(greenPin, green);   
 
}
*/

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);           
  // map it to the range of the analog out:
  outputValue = map(sensorValue, 0, 1023, 0, 255); 
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);           

  // print the results to the serial monitor:
  Serial.print("sensor = " );                       
  Serial.print(sensorValue);     
  Serial.print("\t output = ");     
  Serial.println(outputValue);   

  // wait 2 milliseconds before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:
  delay(2);

  flexvalue();

}

void flexvalue() {

  int sensorValue = analogRead(A0);
 
   if (sensorValue > 130 && sensorValue < 240 ){
     
      digitalWrite(bluePin, LOW);
      digitalWrite(redPin, LOW);
      digitalWrite(greenPin, HIGH);
     
    }
   
    else if (sensorValue > 159 && sensorValue < 241){
     
      digitalWrite(bluePin, LOW);
      digitalWrite(redPin, HIGH);
      digitalWrite(greenPin, HIGH);
     
    }
   
     else if (sensorValue > 242 && sensorValue < 400){
       
      digitalWrite(bluePin, LOW);
      digitalWrite(redPin, HIGH);
      digitalWrite(greenPin, LOW);
   
        }
 
}
Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 224
Posts: 13915
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The if ranges were overlapping and unnecessary "complex"

try this as a starter (use CTRL-T to auto align the code)
removed unneeded comments and added some (in capitals to see them easily)
Code: (not tested)

// These constants won't change.  They're used to give names
// to the pins used:
const int analogInPin = A0;  // Analog input pin that the flex sensor is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to
const int redPin   = 7;
const int greenPin = 6;
const int bluePin  = 5;

int sensorValue = 0;        // value read from the flexsensor
int outputValue = 0;        // value output to the PWM (analog out)


void setup()
{
  pinMode(redPin,   OUTPUT); 
  pinMode(greenPin, OUTPUT);   
  pinMode(bluePin,  OUTPUT);

  Serial.begin(9600);
}


void loop()
{
  sensorValue = analogRead(analogInPin);           
  outputValue = map(sensorValue, 0, 1023, 0, 255); 
  analogWrite(analogOutPin, outputValue);           

  Serial.print("sensor = " );                       
  Serial.print(sensorValue);     
  Serial.print("\t output = ");     
  Serial.println(outputValue);   

  // wait 2 milliseconds before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:
  delay(2);

  flexvalue();

}

void flexvalue()
{
  // int sensorValue = analogRead(A0); // WAS ALREADY READ !

  if (sensorValue < 200 )
  {
    digitalWrite(bluePin, LOW);
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, HIGH);
  }
  else if (sensorValue < 300)
  {
    digitalWrite(bluePin, LOW);
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, HIGH);
  }
  else if (sensorValue < 400)
  {
    digitalWrite(bluePin, LOW);
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, LOW);
  }
  else  // ADDED THIS CASE TO CATCH ALL NON COVERED VALUES IN YOUR CODE
  {
    digitalWrite(bluePin, HIGH);
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, HIGH);
  }

}
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Pages: [1]   Go Up
Jump to: