Lab 2

1.

Description: Using the code from in-class practice Part 3, Arduino lights up the red, blue, and green LED lights. A BART card was used as a diffuser. 

Photo: Attached

Code:

 

/* 
 * Serial RGB LED
 * ---------------
 * Serial commands control the brightness of R,G,B LEDs
 *
 * Command structure is "<colorCode><colorVal>", where "colorCode" is
 * one of "r","g",or "b" and "colorVal" is a number 0 to 255.
 * E.g. "r0"   turns the red LED off.  
 *      "g127" turns the green LED to half brightness
 *      "b64"  turns the blue LED to 1/4 brightness
 *
 * Created 18 October 2006
 * copyleft 2006 Tod E. Kurt <tod@todbot.com
 * http://todbot.com/
 */
 
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 colorVal;
 
int redPin   = 9;   // Red LED,   connected to digital pin 9
int greenPin = 10;  // Green LED, connected to digital pin 10
int bluePin  = 11;  // 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,   127);   // set them all to mid brightness
  analogWrite(greenPin, 127);   // set them all to mid brightness
  analogWrite(bluePin,  127);   // set them all to mid brightness
  Serial.println("enter color command (e.g. 'r43') :");  
}
 
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' || 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;
  }
  while (Serial.available()) {
    strArray[i] = Serial.read();
    i++;
  }
}
 

2. Description: The code was changed so that it can control the RGB value with multiple key presses. Here, every time 'r', 'g', or 'b' is entered, the corresponding LED gets 10% brighter. When it becomes maximum brightness, it starts with minimum brightness if it gets more inputs.

Photo: attached

Code:

 

 

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 colorVal;
 
int redPin   = 9;   // Red LED,   connected to digital pin 9
int greenPin = 10;  // Green LED, connected to digital pin 10
int bluePin  = 11;  // Blue LED,  connected to digital pin 11
 
int redColor = 0; //red color value
int greenColor = 0; //green color value
int blueColor = 0; //blue color value
 
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("enter r, g, b to adjust brightness");  
}
 
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' || colorCode == 'g' || colorCode == 'b' ) {
 
    serInString[0] = 0;                   // indicates we've used this string
    if(colorCode == 'r') {
      redColor = redColor + 25;
      if(redColor > 255){
        redColor = 0;
      }
      Serial.print("setting color red to ");
      Serial.print(redColor);
 
      analogWrite(redPin, redColor);      
    }else if(colorCode == 'g'){
      greenColor = greenColor + 25;
      if(greenColor > 255){
        greenColor = 0;
      }
      
      Serial.print("setting color green to ");
      Serial.print(greenColor);
      
      analogWrite(greenPin, greenColor);            
    }else if(colorCode == 'b'){
      blueColor = blueColor + 25;
      if(blueColor > 255){
        blueColor = 0;
      }
      
      Serial.print("setting color blue to ");
      Serial.print(blueColor);
      
      analogWrite(bluePin, blueColor);                  
    }
    Serial.println();  
  }
  
 
  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;
  }
  while (Serial.available()) {
    strArray[i] = Serial.read();
    i++;
  }
}
 
RGB value controller
BART card as a diffuser
5
Your rating: None Average: 5 (1 vote)