Description:
I used dryer sheets, ping pong balls and the cotton-like material that we had used in class to create an impression of a smoke chimney. The diffuser gives a very close approximation of white and the output is in RGB format. Of the things I had trouble with was using only a single input (no carriage return) and changing the color. The blue was also the strongest LED in the set and hence the resultant white had a tinge of blue.
Components:
I used dryer sheets, ping pong balls and the cotton-like material that we had used in class to create an
- 1 Arduino Uno
- 1 Breadboard
- Resistors, Jumper cables
- Ping pong balls
- Dryer sheets
- Cotton-like material for impression of smoke
Code:
/*
Smoke cylinder by Ganesh Iyer
*/
char serInString[100]; // array that will hold the different bytes of the string. 100=100characters;
// -> you must state how long the array will be else it won't work properly
char colorCode;
int colorValRed = 0;
int colorValBlue = 0;
int colorValGreen = 0;
int redPin = 11; // Red LED, connected to digital pin 9
int greenPin = 9; // Green LED, connected to digital pin 10
int bluePin = 10; // Blue LED, connected to digital pin 11
void setup() {
pinMode(redPin, OUTPUT); // sets the pins as output
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(9600);
analogWrite(redPin, 0); // set them all to mid brightness
analogWrite(greenPin, 0); // set them all to mid brightness
analogWrite(bluePin, 0); // set them all to mid brightness
Serial.println("Use the r, g and b keys to manipulate and mix colors!");
}
void loop () {
// clear the string
memset(serInString, 0, 100);
//read the serial port and create a string out of what you read
readSerialString(serInString);
colorCode = serInString[0];
if (colorCode == 'r'){
serInString[0] = 0;
if (colorValRed == 255){
colorValRed = 0;
analogWrite(redPin, colorValRed);
}
else{
colorValRed = colorValRed + 20;
}
if (colorValRed < 255){
analogWrite(redPin, colorValRed);
}
else{
colorValRed = 255;
analogWrite(redPin, colorValRed);
}
Serial.print("RGB( ");
Serial.print(colorValRed);
Serial.print(", ");
Serial.print(colorValGreen);
Serial.print(", ");
Serial.print(colorValBlue);
Serial.print(" )");
Serial.println();
}
if (colorCode == 'g'){
serInString[0] = 0;
if (colorValGreen == 255){
colorValGreen = 0;
analogWrite(greenPin, colorValGreen);
}
else{
colorValGreen = colorValGreen + 20;
}
if (colorValGreen < 255){
analogWrite(greenPin, colorValGreen);
}
else{
colorValGreen = 255;
analogWrite(greenPin, colorValGreen);
}
Serial.print("RGB( ");
Serial.print(colorValRed);
Serial.print(", ");
Serial.print(colorValGreen);
Serial.print(", ");
Serial.print(colorValBlue);
Serial.print(" )");
Serial.println();
}
if (colorCode == 'b'){
serInString[0] = 0;
if (colorValBlue == 255){
colorValBlue = 0;
analogWrite(bluePin, colorValBlue);
}
else{
colorValBlue = colorValBlue + 20;
}
if (colorValBlue < 255){
analogWrite(bluePin, colorValBlue);
}
else{
colorValBlue = 255;
analogWrite(bluePin, colorValBlue);
}
Serial.print("RGB( ");
Serial.print(colorValRed);
Serial.print(", ");
Serial.print(colorValGreen);
Serial.print(", ");
Serial.print(colorValBlue);
Serial.print(" )");
Serial.println();
}
// if( colorCode == 'r' || colorCode == 'g' || colorCode == 'b' ) {
// colorVal = atoi(serInString+1);
// Serial.print("setting color ");
// Serial.print(colorCode);
// Serial.print(" to ");
// Serial.print(colorVal);
// Serial.println();
// serInString[0] = 0; // indicates we've used this string
// if(colorCode == 'r')
// analogWrite(redPin, colorVal);
// else if(colorCode == 'g')
// analogWrite(greenPin, colorVal);
// else if(colorCode == 'b')
// analogWrite(bluePin, colorVal);
// }
delay(100); // wait a bit, for serial data
}
//read a string from the serial and store it in an array
//you must supply the array variable
void readSerialString (char *strArray) {
int i = 0;
if(!Serial.available()) {
return;
}
if (Serial.available() > 0) {
strArray[i] = Serial.read();
}
}