Difference between revisions of "Classes/2010/VIS147A/Lab7"

From Robert-Depot
Jump to: navigation, search
(Part 2 - Simple Digital In)
(Part 2 - Simple Digital In)
Line 39: Line 39:
  
 
=== Part 2 - Simple Digital In ===
 
=== Part 2 - Simple Digital In ===
[[Image:Digital_in.png|400px]]
+
[[Image:Digital_in.png|300px]]
 
[[Image:switch.jpg|400px]]
 
[[Image:switch.jpg|400px]]
  

Revision as of 08:49, 23 February 2010

Lab 7 - Digital Input/Output, Microcontrollers

Topics

  • Digital input, output from Freeduino.
  • basic LED driver circuit for Freeduino.
  • Basic Freeduino programming:
    • delay()
    • digitalRead()
    • digitalWrite()
    • pinMode()
  • Compiling and uploading sketches.

Materials

  • red LED
  • 220 Ohm resistor
  • hookup wire
  • wire clippers, strippers, pliers.
  • breadboard
  • fully assembled Freeduino
  • USB cable
  • computer with Arduino programming environment installed

Activities

Setup

  • FROM LAST WEEK: You should have the basic Blink example running (File->Sketchbook->Examples->Blink). This means you have soldered the board correctly, and you can compile and upload files. We are going to extend from there.
  • Power from arduino to breadboard. Connect GND and +5 to the positive and negative power buses on the breadboard.

Power hookup.png

  • verify that this worked (with multimeter).

Verify power.jpg

Part 1 - Simple Digital Out

  • Set up an LED on the breadboard with a current limiting resistor.

Led output.pngLed out on breadboard.jpg

  • Connect the LED to one of your Digital Out pins.(Pins 0-13 on the "Digital" side of your board, by the power light.)
  • Change the Blink program (from Sketchbook->Examples->Digital) to output to that pin you connected.
    • use pinMode() to set your Digital Output pin to be an OUTPUT.
    • use digitalWrite() to the correct pin to turn on (or turn off) the LED.
  • Compile, upload, and run the program.... Does it work?
  • Change the timing in some more interesting/meaningful way. (HINT: the delay(1000) statement in the Blink example is what sets the time on and time off). Using what you know, create a different pattern or sequence of activation for the LED.

Part 2 - Simple Digital In

Digital in.png Switch.jpg

Active High, Normally Open (N.O.) switch

  1. Set up this circuit on your breadboard, with a switch, +5V, and current limiting resistor to ground. This is a basic digital input.
  2. Open the button example (File->Sketchbook->Examples->Digital->Button)
  3. Connect your switch circuit to on if the digital I/O pins, and change inputPin in the button program to this number. (Mine is Pin 7)

Part 3 - Programming

  • In the simple blink example, this code

 digitalWrite(ledPin, HIGH);   // sets the LED on
 delay(1000);                  // waits for a second
 digitalWrite(ledPin, LOW);    // sets the LED off
 delay(1000);                  // waits for a second

is what creates the behavior: half the time on, half the time off.

  • The digitalWrite(ledPin, HIGH) turns on the LED
  • digitalWrite(ledPin, LOW) turns off the LED.
  • What is this actually doing? The HIGH is setting that output pin to High, 1, True, +5V.
  • similarity, the LOW is setting that output pin to Low, 0, False, 0V or GND.
  • This is where your programmable, internal world of the microcontroller is interfacing with the hardware, LED world of intro to electronics.
  • We needed to do some setup first pinMode(ledPin, OUTPUT)
  • and then it is a matter of digitalWrite calls.
  • Similarly, in the digital_in example above, we do some setup
 pinMode(ledPin, OUTPUT);      // declare LED as output
 pinMode(inputPin, INPUT);     // declare pushbutton as input

  • And then we read inputs and make outputs with digitalRead and digitalWrite calls.
  • If you ever seen anything in a program, and you want to learn more about what it does, for example digital read, hilight the term, and select Help->Find in reference.
    • This will pull up the arduino reference files. There is a lot to be found here. Very useful.
  • You could insert your own code, for instance:

 digitalWrite(ledPin, HIGH);   // sets the LED on
 delay(1000);                  // waits for one second
 digitalWrite(ledPin, LOW);    // sets the LED off
 delay(1000);                  // waits for one second
 digitalWrite(ledPin, HIGH);   // sets the LED on
 delay(500);                  // waits for half a second second
 digitalWrite(ledPin, LOW);    // sets the LED off
 delay(1000);                  // waits for one second

  • to get a "long-short-long-short" blinking.
    • Try this out.
  • As you add more complicated behavior, things are going to get ridiculous very soon, you will have tons of special cases, lines and lines of code. There are more efficient ways to do this...
  • What are more efficient ways to do this, use For loops or arrays.

Loops

  • Specifically, looping across multiple outputs.
  • File->Sketchbook->Examples->Digital->Loop
  • Same as single input above, connect multiple LED outputs.
  • Compile, upload, and run the loop example.
  • Change the behavior of the loop: how about instead of equal on/off timing, change it in some other way.
  • Can you make the loop run through a series of meaningful states, rather repeating a simple on/off behavior.
  • Differently, with only one output, how could you make a program that changes over time using a loop.

Thoughts

  • The idea of encoding information.
  • Idea of input and response. Triggering behavior.
  • Framing: how does the meaning of a thing change through context. LEDs (or other lights) surround us, everywhere, to indicate all kinds of things.
    • "Record" light on a camera. Warning light.
    • think about contextualization... if the light is in an empty fuel gauge... warning light... how does its meaning change
    • how could you change the meaning through contextualization
    • what novel package or "frame" could change the meaning of a thing.

Assignment

  • A quick thought/lab experiment for next week: Extend the example in some way, particularly focusing on the idea of framing.
    • This could be through:
      • the addition of multiple different inputs.
      • ...multiple different outputs.
      • ...create a time-varying signal. (code?)
      • change through packaging, framing, context.
      • getting off of the breadboard (or tucking the breadboard inside of something) how could you change what the LED indicates.
    • Some of these are technical challenges, some or more concept based.
    • For this assignment, I am interested in the more concept based... having an idea you want to make.