0% found this document useful (0 votes)
13 views26 pages

Lablecture 3 C

me

Uploaded by

witty white
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views26 pages

Lablecture 3 C

me

Uploaded by

witty white
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 26

Lab 3c

Fun with your LED cube


ENGR 40M
Chuan-Zheng Lee
Stanford University
19 May 2017
Announcements

• Homework 6 is not released today.


It will be released on Monday (May 22).
It will be due at 11am Tuesday week (May 30).

• Homework 6 prepares you for lab 4.

• There is still a prelab 4.

• Homework 7 will be released Monday, May 29,


and will be due Monday, June 5.

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 2
Overview of lab 3c

• Your task is to get your cube to respond to some


sort of input.

• For most of you, this will involve adding hardware.

• You choose what you want to do, subject to


minimum requirements.

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 3
Our suggestions for input

• Serial data
• Potentiometer
• Pushbutton switches (or other switches)
• Audio
• Capacitive touch sensing

You’re free (and encouraged) to propose something


else, but be sure to tell your TA well in advance!

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 4
Serial data

• You’ve already used the Serial Monitor

• You can also write computer software to interact


with the serial port directly

• If you only respond to serial data, we’ll expect to


see some impressive software

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 5
Analog-to-digital converter

• analogRead() reads the voltage on the pin,


scaled to be a number between 0 and 1023
void loop() {
int reading = analogRead(A3);
Serial.println(reading);
}

Serial Monitor:
819
819

• This takes longer than digitalRead(), but this


probably won’t bother you

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 6
Potentiometer

• Essentially a variable voltage divider

standard symbol internal mechanics photo

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 7
Potentiometer

• Essentially a variable voltage divider

R1 and R2 vary with


the wiper, but
R1 + R2 = constant

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 8
Potentiometer

• Connect the wiper to the analog input


• Read using analogRead()

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 9
Audio

• You can connect an audio output to your


Arduino… almost.

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 10
Audio

• analogRead() the instantaneous value


• The input will be “centered” at 2.5 V, so you’ll
need to process it in software
• An additional handout guides you through this

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 11
Audio—frequency response

• The ArduinoFFT3 library can process your signal


to return a frequency-domain representation

• Implements the fast Fourier transform, an


algorithm which computes a close cousin of the
Fourier series

• An additional handout guides you through this

• Video: https://youtu.be/FRXDTiOHFlI
May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 12
Audio—frequency response

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 13
Pushbutton switch

• SPST, momentary and normally open


(sometimes known as push-to-make)

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 14
Pushbutton switch: debouncing

What we think a switch does:

What it actually does:

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 15
Pushbutton switch: debouncing

• As the switch bounces, the Arduino can register


many transitions
• Dealing with this is called debouncing
• One strategy: Ignore transitions too soon after the
last one
• An additional handout guides you through this
May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 16
Programming a pattern

• Since you’ve abstracted away the time-


multiplexing part, displaying a pattern consists
mainly of filling in the pattern array.

• Recall triply-nested loops:


for (int z = 0; z < 4; z++) {
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
pattern[z][y][x] = (some value);
}
}
}

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 17
Raindrop pattern

• The raindrop pattern looks like rain is falling from


the top of the cube to the bottom

• Videos
• https://youtu.be/-tZJ-3NSlhY?t=52
• https://youtu.be/DahwcDeqyA0

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 18
Raindrop pattern
Every time period (say, 150 ms):
1. Move the pattern down by one plane
2. Choose an LED at random in the top plane

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 19
Decomposition

Every time period (say, 150 ms):


1. Move the pattern down by one plane
2. Choose an LED at random in the top plane

• Decompose this into smaller steps:


1. movePatternDown(pattern)
2. chooseRandomLEDInTopPlane(pattern)
• As a principle, each function should do exactly
one thing

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 20
Timing and inputs

• Update the pattern once every (say) second


• With no inputs, this will work:
void loop() {
static byte ledOn[4][4][4];
updatePattern(ledOn); // updates pattern
delay(1000);
}

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 21
Timing and inputs

• Stop/start whenever the button is pressed


• Why won’t this work?
void loop() {
static byte ledOn[4][4][4];
static bool running = false;
if (running)
updatePattern(ledOn); // updates pattern
if (digitalRead(BUTTON) == HIGH)
running = !running;
delay(1000);
}

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 22
Timing and inputs
• Better: Check button without delay
void loop() {
static byte ledOn[4][4][4];
static bool running = false;
static long nextUpdateTime = millis();
if (millis() > nextUpdateTime) {
if (running)
updatePattern(ledOn); // updates pattern
nextUpdateTime += 1000;
}
if (digitalRead(BUTTON) == HIGH)
running = !running;
}

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 23
Complexity requirements

• Minimum requirement:
cubes: 25; 6×6 planes: 35; larger planes: 30
• Must do one “additional handout”, or propose your own
• Details are in the “overview” handout
Points Hardware Software
5 No additional hardware Simple response
(includes serial data)
10 Minor additional hardware Minor complexity
• Raindrop pattern
15 Moderate additional hardware Moderate complexity
• Pushbuttons
• Audio non-frequency
20 Complex additional hardware Impressive complexity

May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 24
Breadboard style
Please don’t:

http://www.electro-music.com/forum/phpbb-files/thumbs/t_klee_bb_131.jpg
May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 25
Coding style

https://www.xkcd.com/1833/
May 12, 2017 ENGR 40M Spring 2017 — C.Z. Lee, J. Plummer, R. Howe 26

You might also like