Announcements

November 24, 2007
Reading for November 27th, are now posted. Enjoy!

October 2, 2007
To upload your thoughtless acts, create a new assignment page like any other lab. You'll see "Thoughtless Acts" listed as one of the assignment options.

May 24, 2008
This site has been archived and is no longer editable. Stay tuned for the next version, coming in the fall!


Pots and LEDs

Project Members: 
Jonathan Breitbart

Description

For this homework, I modified the blinking LED and fading LED sample programs so that one pot controls the blinking of all 3 LEDs (at once) and another pot controls the brightness of all 3 LEDs, so that turning the pot cycles through the colors of the rainbow (from green to red to blue, and the colors in between).

 

Materials Used

3 LEDs, 3 220 Ohm resistors, 3 potentiometers

 

Arduino Code

/*
*
* Control 3 LEDs with 1 potentiometer
*
* One potentiometer controls the brightness of each LED.
* Turning the potentiometer changes the LEDs so that the effect is cycling through the rainbow,
* from green to red to blue (and the mixed colors in betwee)
*
* The second potentiometer controls the rate at which the three LEDs blink.
*
*
*If the LEDs are different colors, and are directed at diffusing surface (stuck in a
* a Ping-Pong ball, or placed in a paper coffee cup with a cut-out bottom and
* a white plastic lid), the colors will mix together.
*
*
* The mix values that create the color will be reported via serial out.
*
* Standard colors for light mixing are Red, Green, and Blue, though you can mix
* with any three colors; Red + Blue + White would let you mix shades of red,
* blue, and purple (though no yellow, orange, green, or blue-green.)
*
* Put 220 Ohm resistors in line with pots, to prevent circuit from
* grounding out when the pots are at zero
*/

// Analog pin settings
int aIn = 0; // Potentiometers connected to analog pins 0 and 1
int bIn = 1; // (Connect power to 5V and ground to analog ground)

// Digital pin settings
int aOut = 9; // LEDs connected to digital pins 9, 10 and 11
int bOut = 10; // (Connect cathodes to digital ground)
int cOut = 11;

// Values
int aVal = 0; // Variables to store the input from the potentiometers
int bVal = 0;
int cVal = 0;

// Variables for comparing values between loops
int i = 0; // Loop counter
int wait = (1000); // Delay between most recent pot adjustment and output

int checkSum = 0; // Aggregate pot values
int prevCheckSum = 0;
int sens = 3; // Sensitivity theshold, to prevent small changes in
// pot values from triggering false reporting
// FLAGS
int PRINT = 1; // Set to 1 to output values
int DEBUG = 1; // Set to 1 to turn on debugging output

void setup()
{
pinMode(aOut, OUTPUT); // sets the digital pins as output
pinMode(bOut, OUTPUT);
pinMode(cOut, OUTPUT);
Serial.begin(9600); // Open serial communication for reporting
}

void loop()
{
i += 1; // Count loop

int masterVal = analogRead(aIn); // read in value from pot 1

if (masterVal < 256){
aVal = masterVal;
bVal = 255;
cVal = 0;
}
else if ((256 < masterVal) && (masterVal < 512)){
aVal = 255;
bVal = 512 - masterVal;
cVal = 0;
}
else if ((512 < masterVal) && (masterVal < 768)){
aVal = 255;
bVal = 0;
cVal = masterVal - 512;
}
else if ((768 < masterVal) && (masterVal < 1024)){
aVal = 1024 - masterVal;
bVal = 0;
cVal = 255;
}

analogWrite(aOut, aVal); // Send new values to LEDs
analogWrite(bOut, bVal);
analogWrite(cOut, cVal);

int blinkVal = analogRead(bIn); // read the value from the pot 2
delay(blinkVal); // stop the program for some time
digitalWrite(aOut, LOW); // turn the led a off
digitalWrite(bOut, LOW); // turn the led b off
digitalWrite(cOut, LOW); // turn the led c off
delay(blinkVal);

if (i % wait == 0) // If enough time has passed...
{
checkSum = aVal+bVal+cVal; // ...add up the 3 values.
if ( abs(checkSum - prevCheckSum) > sens ) // If old and new values differ
// above sensitivity threshold
{
if (PRINT) // ...and if the PRINT flag is set...
{
Serial.print("A: "); // ...then print the values.
Serial.print(aVal);
Serial.print("\t");
Serial.print("B: ");
Serial.print(bVal);
Serial.print("\t");
Serial.print("C: ");
Serial.println(cVal);
PRINT = 0;
}
}
else
{
PRINT = 1; // Re-set the flag
}
prevCheckSum = checkSum; // Update the values

if (DEBUG) // If we want debugging output as well...
{
Serial.print(checkSum);
Serial.print("<=>");
Serial.print(prevCheckSum);
Serial.print("\tPrint: ");
Serial.println(PRINT);
}
}
}

Sample Video

Click here to view a sample video.


Comments

unfortunately, I can't view

unfortunately, I can't view the video. I don't think I have the right decoder :(


Powered by Drupal - Design by Artinet