-A +A

 

Announcements

Framing Workshop

There will be a Workshop on Making Frames next week, on Friday, February 6th from 10 a.m. until 12 noon. It will take place at the woodshop Baskin C-101.

The workshop will include the basic construction of wood frames using solid milled lumber, and other general aspects of picture framing. Open to all students

Code Examples

Update to delay-free timing 03

BIG TEXT | SMALL TEXT

Download delay-free_timing03.txt file

// Delay-Free Timing 03
//
// In this case, we will set up a bunch of independent timers
// And, we'll use only one function instead of 6!

// Set variables
// Set up three timers, each with a different offset to check against.
long timer1 = 0;           
int  timer1offset = 1000;                         
long timer2 = 0;           
int  timer2offset = 900;                         
long timer3 = 0;           
int  timer3offset = 800;   
long timer4 = 0;           
int  timer4offset = 700;   
long timer5 = 0;           
int  timer5offset = 600;   
long timer6 = 0;           
int  timer6offset = 500;   

// Setup pins
int ledPin1 = 11; // Note: needed to change the number of the pins 
int ledPin2 = 10; // from Delay-Free Timing 02, but the idea is the same.
int ledPin3 = 9;
int ledPin4 = 6;
int ledPin5 = 5;
int ledPin6 = 3;

void setup() {                  // The standard stuff...
  Serial.begin(9600);         // Setup the serial communications so we can debug
  // Save some vertical space by combining lines
  pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT);   
  pinMode(ledPin4, OUTPUT); pinMode(ledPin5, OUTPUT); pinMode(ledPin6, OUTPUT); 
  timer1 = millis(); timer2 = millis(); timer3 = millis();
  timer4 = millis(); timer5 = millis(); timer6 = millis();   
  // Start with all pins on
  digitalWrite(ledPin1,HIGH); digitalWrite(ledPin2,HIGH); digitalWrite(ledPin3,HIGH);
  digitalWrite(ledPin4,HIGH); digitalWrite(ledPin5,HIGH);  digitalWrite(ledPin6,HIGH); 
}

// Das Loop...
void loop() {
  if((timer1 + timer1offset) < millis() ) {   //Timer 1
     doLED(ledPin1);              
     timer1 = millis();  
  }
  if((timer2 + timer2offset) < millis() ) {   //Timer 2
     doLED(ledPin2);              
     timer2 = millis();  
  }
  if((timer3 + timer3offset) < millis() ) {   //Timer 3
     doLED(ledPin3);              
     timer3 = millis();  
  }
  if((timer4 + timer4offset) < millis() ) {   //Timer 4
     doLED(ledPin4);              
     timer4 = millis();  
  }
  if((timer5 + timer5offset) < millis() ) {   //Timer 5
     doLED(ledPin5);              
     timer5 = millis();  
  }
  if((timer6 + timer6offset) < millis() ) {   //Timer 6
     doLED(ledPin6);              
     timer6 = millis();  
  }
}

// The doLED functions
void doLED(int whichLED) {
  Serial.print("LED");Serial.print(whichLED);Serial.print(": ");
  Serial.println(!digitalRead(whichLED));
  digitalWrite(whichLED,!digitalRead(whichLED));
}
				

Timer/ Fader

BIG TEXT | SMALL TEXT

Download timer-fader01.txt file

// Timer/Fader 01
//
// A delay-free timer for a single LED that fades in and out

// Timer variables
long timer = 0;
int offset = 10;              // Change this for faster or slower fades                     
// Pin variable
int pwm = 11;
// Direction variable
int upDown = 1;
// pwm value holding variable
int val1 = 0;

//Setup
void setup() {                  // The standard stuff...
    Serial.begin(9600);         // Setup the serial communications so we can debug
    pinMode(pwm, OUTPUT);  
    timer = millis();          
}

// Das Loop...
void loop() {
  // Timer
  if((timer + offset) < millis() ) { 
     doFade();              
     timer = millis();  
  }
}

// Fade function
void doFade() {
  if(val1 >= 50) { upDown = -1; }  // The LED on my board only appears to be getting
  if(val1 <= 0)  { upDown = 1;  }  // brighter on pwm values up to 50 (out of 255)
  val1 = val1 + ( 1 * upDown);     // so, I've set the max value to change the direction
  analogWrite(pwm, val1);          // to 50.
}
				

BIG TEXT | SMALL TEXT

Download timer-fader02.txt file

// Timer/Fader 02
//
// A delay-free timer for a single LED that fades in and out
// and cascades 6 faders

// Timer variables
long timer1 = 0; long timer2 = 0; long timer3 = 0;
long timer4 = 0; long timer5 = 0; long timer6 = 0;
int offset = 10;              // Change this for faster or slower fades                     
// Pin variables
int pwm1 = 11; int pwm2 = 10; int pwm3 = 9;
int pwm4 = 6;  int pwm5 = 5;  int pwm6 = 3;
// Direction variable
int upDown1 = 1; int upDown2 = 1; int upDown3 = 1; 
int upDown4 = 1; int upDown5 = 1; int upDown6 = 1; 
// pwm value holding variable
int val1 = 1; int val2 = 1; int val3 = 1; 
int val4 = 1; int val5 = 1; int val6 = 1; 
// flag variables
boolean flag1 = 0; boolean flag2 = 0; boolean flag3 = 0;
boolean flag4 = 0; boolean flag5 = 0; boolean flagDoOver = 0;

//Setup
void setup() {                  // The standard stuff...
    Serial.begin(9600);         // Setup the serial communications so we can debug
    pinMode(pwm1,OUTPUT); pinMode(pwm2,OUTPUT); pinMode(pwm3,OUTPUT); 
    pinMode(pwm4,OUTPUT); pinMode(pwm5,OUTPUT); pinMode(pwm6,OUTPUT); 
    timer1 = millis();              
}

// Das Loop...
void loop() {
  // Timer
  if( (timer1 + offset) < millis() ) { 
     doFade1();           
     timer1 = millis();
  }
  if(flagDoOver) {
   resetFade(); 
  }
}

// Reset Fade Function
void resetFade() {
  Serial.println("Resetting fade...");
  // pwm value variables
  val1 = 1; val2 = 1; val3 = 1; 
  val4 = 1; val5 = 1; val6 = 1; 
  // Direction variables
  upDown1 = 1; upDown2 = 1; upDown3 = 1; 
  upDown4 = 1; upDown5 = 1; upDown6 = 1; 
  // flag variables
  flag1 = 0; flag2 = 0; flag3 = 0;
  flag4 = 0; flag5 = 0; flagDoOver = 0;
}

// Fade function
void doFade1() {
  if(val1 >= 70) { upDown1 = -1; }  
  if(val1 <= 0)  { upDown1 = 0;  } 
  if(val1 == 30) { flag1 = 1;    } 
  val1 = val1 + ( 1 * upDown1);    
  analogWrite(pwm1, val1);   
  if(flag1) {
    if(val2 >= 70) { upDown2 = -1; }  
    if(val2 <= 0)  { upDown2 = 0;  } 
    if(val2 == 30) { flag2 = 1;    } 
    val2 = val2 + ( 1 * upDown2);
    analogWrite(pwm2, val2);
  }
  if(flag2) {
    if(val3 >= 70) { upDown3 = -1; }  
    if(val3 <= 0)  { upDown3 = 0;  } 
    if(val3 == 30) { flag3 = 1;    } 
    val3 = val3 + ( 1 * upDown3);
    analogWrite(pwm3, val3);
  }
  if(flag3) {
    if(val4 >= 70) { upDown4 = -1; }  
    if(val4 <= 0)  { upDown4 = 0;  } 
    if(val4 == 30) { flag4 = 1;    } 
    val4 = val4 + ( 1 * upDown4);
    Serial.println(val4);
    analogWrite(pwm4, val4);
  }
  if(flag4) {
    if(val5 >= 70) { upDown5 = -1; }  
    if(val5 <= 0)  { upDown5 = 0;  } 
    if(val5 == 30) { flag5 = 1;    } 
    val5 = val5 + ( 1 * upDown5);
    analogWrite(pwm5, val5);
  }
  if(flag5) {
    if(val6 >= 70) { upDown6 = -1; }  
    if(val6 <= 0)  { 
      upDown6 = 0;  
      flagDoOver = 1;
    } 
    val6 = val6 + ( 1 * upDown6);
    analogWrite(pwm6, val6);
  }
}
				

Adding Interact­ivity

BIG TEXT | SMALL TEXT

Download interactive_timer-fader01.txt file

// Interactive Timer/Fader 01
//
// A delay-free timer for a single LED that fades in and out
// and cascades 6 faders. 
// Added a switch to reset and added a poteniometer to 
// change the timing.

// Timer variables
long timer1 = 0; long timer2 = 0; long timer3 = 0;
long timer4 = 0; long timer5 = 0; long timer6 = 0;
int offset = 10;              // Change this for faster or slower fades                     
// Pin variables
int pwm1 = 11; int pwm2 = 10; int pwm3 = 9;
int pwm4 = 6;  int pwm5 = 5;  int pwm6 = 3;
// Direction variable
int upDown1 = 1; int upDown2 = 1; int upDown3 = 1; 
int upDown4 = 1; int upDown5 = 1; int upDown6 = 1; 
// pwm value holding variable
int val1 = 1; int val2 = 1; int val3 = 1; 
int val4 = 1; int val5 = 1; int val6 = 1; 
// flag variables
boolean flag1 = 0; boolean flag2 = 0; boolean flag3 = 0;
boolean flag4 = 0; boolean flag5 = 0; 
boolean constantOn = 0;

//Setup
void setup() {                  // The standard stuff...
    Serial.begin(9600);         // Setup the serial communications so we can debug
    timer1 = millis();
    // Set the pin for the digital switch to INPUT
    pinMode(12,INPUT);    
    // Set pinModes for PWMs
    pinMode(pwm1,OUTPUT); pinMode(pwm2,OUTPUT); pinMode(pwm3,OUTPUT); 
    pinMode(pwm4,OUTPUT); pinMode(pwm5,OUTPUT); pinMode(pwm6,OUTPUT); 
}

// Das Loop...
void loop() {
  // Timer
  if( (timer1 + offset) < millis() ) { 
     doFade1();           
     timer1 = millis();
  }
  // DIGITAL SWITCH
  if(!digitalRead(12))   { 
    constantOn = 0;
    resetFade(); 
  }
  // ANALOG SWITCH 
  if(analogRead(1)>1000) { 
    constantOn = 1; 
  }
  // EXPERIMENT WITH DIFFERENT SENSORS
  // Use one of the following senors to modify the
  // value of "offset", and thereby make the LED's
  // flash faster or slower
  // POTENTIOMETER
  // This pot has a range from ~650 to 1023. 
  // Serial.println(analogRead(2));[
  // Change that to a range from 0 to 50 or so
  // then set offset to change the fade timer
  //    offset = (analogRead(2) - 650)/10;
  // PHOTORESISTOR
  // This photoresistor has a range from ~10 to ~225.
  // Serial.println(analogRead(4));
  // Change that range to 1 to 10 or so
  //   offset = analogRead(4)/20;
}

// Reset Fade Function
void resetFade() {
  Serial.println("Resetting fade...");
  // pwm value variables
  val1 = 1; val2 = 1; val3 = 1; 
  val4 = 1; val5 = 1; val6 = 1; 
  // Direction variables
  upDown1 = 1; upDown2 = 1; upDown3 = 1; 
  upDown4 = 1; upDown5 = 1; upDown6 = 1; 
  // flag variables
  flag1 = 0; flag2 = 0; flag3 = 0;
  flag4 = 0; flag5 = 0; 
}

// Fade function
void doFade1() {
  if(val1 >= 70) { upDown1 = -1; }  
  if(val1 <= 0)  { upDown1 = 0;  } 
  if(val1 == 30) { flag1 = 1;    } 
  val1 = val1 + ( 1 * upDown1);    
  analogWrite(pwm1, val1);   
  if(flag1) {
    if(val2 >= 70) { upDown2 = -1; }  
    if(val2 <= 0)  { upDown2 = 0;  } 
    if(val2 == 30) { flag2 = 1;    } 
    val2 = val2 + ( 1 * upDown2);
    analogWrite(pwm2, val2);
  }
  if(flag2) {
    if(val3 >= 70) { upDown3 = -1; }  
    if(val3 <= 0)  { upDown3 = 0;  } 
    if(val3 == 30) { flag3 = 1;    } 
    val3 = val3 + ( 1 * upDown3);
    analogWrite(pwm3, val3);
  }
  if(flag3) {
    if(val4 >= 70) { upDown4 = -1; }  
    if(val4 <= 0)  { upDown4 = 0;  } 
    if(val4 == 30) { flag4 = 1;    } 
    val4 = val4 + ( 1 * upDown4);
    analogWrite(pwm4, val4);
  }
  if(flag4) {
    if(val5 >= 70) { upDown5 = -1; }  
    if(val5 <= 0)  { upDown5 = 0;  } 
    if(val5 == 30) { flag5 = 1;    } 
    val5 = val5 + ( 1 * upDown5);
    analogWrite(pwm5, val5);
  }
  if(flag5) {
    if(val6 >= 70) { upDown6 = -1; }  
    if(val6 <= 0)  { 
      upDown6 = 0;  
      if(constantOn){
        resetFade();
      }
    } 
    val6 = val6 + ( 1 * upDown6);
    analogWrite(pwm6, val6);
  }
}
			

BIG TEXT | SMALL TEXT

Download if-then_interactivity01.txt file

// IF-THEN INTERACTIVITY 01
//
// Testing for a value as it changes to
// trigger interativity

// pin variable
int p1 = 11;  // These can be anything we want. my board
int p2 = 10;  // just happens to be set up with PWM pins...
int p3 = 9;
int p4 = 6;
int p5 = 5;
int p6 = 3;
// variables to hold values to test for
int lightVal = 0;  
int minVal = 70;  // Last time I tested, my range from the 
int maxVal = 240; // photoresistor was 70 to 245. I'll use
                  // these min and max variables to divide 
                  // the lightVal into 6  even parts

//Setup
void setup() {                 
  Serial.begin(9600);        
  // Set pins to output
  pinMode(p1, OUTPUT); pinMode(p2, OUTPUT); pinMode(p3, OUTPUT); 
  pinMode(p4 ,OUTPUT); pinMode(p5 ,OUTPUT); pinMode(p6, OUTPUT);   
}

// Das Loop...
void loop() {
 // On every loop, read the value of the lignt sensor on analog 
 // pin 4. I know that with my hardware setup I get values from 
 // around 70 to 245.
 lightVal = analogRead(4);
 Serial.println(lightVal); 
 // Test for increasing values and turn on the six lights as they get higher.
 // LED 1
 if(lightVal - minVal > maxVal/6) {
   digitalWrite(p1,HIGH);
 }else{
   digitalWrite(p1,LOW);
 }
 // LED 2
 if(lightVal - minVal > ((maxVal - minVal) * 2)/6) {
   digitalWrite(p2,HIGH);
 }else{
   digitalWrite(p2,LOW);
 }
 // LED 3
 if(lightVal - minVal > ((maxVal - minVal) * 3)/6) {
   digitalWrite(p3,HIGH);
 }else{
   digitalWrite(p3,LOW);
 }
 // LED 4
 if(lightVal - minVal > ((maxVal - minVal) * 4)/6) {
   digitalWrite(p4,HIGH);
 }else{
   digitalWrite(p4,LOW);
 }
 // LED 5
 if(lightVal - minVal > ((maxVal - minVal) * 5)/6) {
   digitalWrite(p5,HIGH);
 }else{
   digitalWrite(p5,LOW);
 }
 // LED 6
  if(lightVal - minVal > (maxVal - minVal)) {
   digitalWrite(p6,HIGH);
 }else{
   digitalWrite(p6,LOW);
 }
}
				
finB+