Arduino Programming (C) 2014 James Lewis james@baldengineer.com 1
Arduino Langauge 2 Machine Language (Binary Code) Assembly (Readable Code) C / C++ (Readable Code) C++ Libs C++ Libs C++ Libs “Arduino”
Arduino Langauge 3 Machine Language (Binary Code) Assembly (Readable Code) C / C++ (Readable Code) C++ Libs C++ Libs C++ Libs “Arduino”
Hello World (Blink) 4
Hello World (Blink) 5 Variable
Hello World (Blink) 6 Comments
Hello World (Blink) 7 Comments Good Comment: // Blue LED for Activity Indicator Bad Comment: // Pin 13
Hello World (Blink) 8 Functions
Hello World (Blink) 9 Functions
Hello World (Blink) 10 Instruction
Hello World (Blink) 11 Instruction
Hello World (Blink) 12 FunctionCall
Hello World (Blink) 13 Arguments
Hello World (Blink) 14
IDE Tools Menu 15
IDE Tools Menu 16
IDE Tools Menu 17
IDE Tools Menu 18
Arduino IDE 19 Type Stuff Here Compiler Output
Arduino IDE 20 Type Stuff Here Compiler Output Serial Monitor
Arduino IDE 21 Type Stuff Here Compiler Output Serial MonitorVerify & Upload
Arduino IDE 22 Type Stuff Here Compiler Output Serial MonitorVerify & Upload Board & Serial Port
Blink Exercise • Load the Blink Example and program it to your board
 • Change the values of delay() to see how it affects the behavior 23 Check the correct board and serial port are selected in the tools menu!
Hello World Serial Example 24
Serial objects 25
Serial objects 26 Enables Serial Baud Rate
Serial objects 27 Variables Strings Control Characters Print and Println
Serial objects 28 Variables Strings Control Characters Print and Println NOTE: Strings and Variables Can’t be used on the same line
Hello World (Serial) • Load up the serial code to the right
 • Exercise: • Change the 2000 in delay into a variable. • Print value of variable on same line as “Hello World” 29
Variables 30
How Much Memory is in your Arduino? 31
Variable Types 32 Bits Unsigned Range Signed Range byte 8 0 to 255 N/A char 8 0 to 255 ‘A’..’b’..’X’ N/A int 16 0 to 65535 -32,767 to 32,766 long 32 0 to 4,294,967,295 -2,147,483,648 to 2,147,483,647 float 32 ±3.4028235E+38 n/a double 32 n/a n/a
Variable Do and Don’t • DO Use Descriptive Names • “BlueLED”, “ActivityIndicator” • DON’T Use Bad Names • “Integer”, “Pin13” • DO Stick to a naming convention • Variables are Case Sensitive! • DON’T use same name for Local and Global Variables 33
Variable Scope 34
Variable Scope 35 Global
Variable Scope 36 Global Local to loop()
Variable Don’t! 37
Variable Don’t! 38
Variable Don’t! 39
analogReadings[] arrays 40 0 1 2 3 4 5
analogReadings[] arrays 41 0 1 2 3 4 5 Size Elements
analogReadings[] arrays 42 0 1 2 3 4 5 Size Elements arrays are 
 0-index based. 
 So last element
 is always 
 “1 less”
 than the size!
Pin Functions 43
pinMode() 44 Analog (A0..A5) Digital (0..13) INPUT Digital Input, Pull-Up Off Digital Input, Pull-Up Off INPUT_PULLUP Digital Input, Pull-Up On Digital Input, Pull-Up On OUTPUT Digital Output Digital Output Analog Pins can be used as Digital Pins pinMode(INPUT, Ax) isn’t necessary for analogRead()
digitalRead() & digitalWrite() 45
Pull-Up Resistor 46 INPUTs almost always need a Pull-Up or Pull-Down pinMode(INPUT_PULLUP) Turns on the Internal Pull-Up Resistor http://www.baldengineer.com/tutorials/arduino-pull-ups/
I/O Exercise • Objective: Understand Inputs and Outputs
 • Exercise: “Fix” the random LED 47
analogRead() 48 Analog Signal Convert Digital Value 10-bits, stored as 8-bits Values 0 to 1023 Voltage 0v to 5v 5 volts 1023 Steps = 4.887mV per Step Calling analogRead() on an Analog Pin, automatically converts to Input
analogWrite() 49 analogWrite() isn’t Analog (Except on the Due) Uno Pins: 3, 5, 6, 9, 10, 11 Actual AnalogPulse Width Modulation (PWM)
Analog Exercise • Connect Pin 6 to Analog 0
 Run this code
 • Then, disconnect from Pin 6 
 While Running the Code 50 Remember to open the Serial Monitor!
Analog Exercise • Connect Pin 6 to Analog 0
 Run this code
 • Then, disconnect from Pin 6 
 While Running the Code 51 Remember to open the Serial Monitor! A0, A1, A2..A5 are integers!
functions() 52
Functions Getting Data Back
Functions Getting Data Back Tip: The Arduino IDE, doesn’t require “prototyping”
Functions Getting Data Back Return Type Arguments “Return” FunctionName
Functions Returning Nothing 56 Return Type If the function doesn’t return anything, declare it as void
Function Exercise • “Re-Write” the built-in Blink Example to use a Function • Exercise: add a “argument” to adjust the delay time 57
Control Structures 58
if-statements 59
if-statements 60
if-statements 61
if-statements 62
control operators 63 == Equal to >
 >= Greater than (or equal) < <= Less Than (or equal) != Not Equal to || OR && AND | Bitwise OR & Bitwise AND
#1 if-statement mistake 64
#1 if-statement mistake 65 = != ==
for() loop example 66
for() loop 67
for() loop 68 Control Variable
for() loop 69 Control Variable Condition
for() loop 70 Control Variable Condition Increment
Array and For Exercise • Use an Array and two for- loops to read analog inputs, then display then
 • Notice the difference in brackets between the two loops 71
while() loop 72
while() loop 73 Condition
while() loop 74 Condition Loop conditions are same as “if conditions”
while() and Serial • This program echoes whatever is on the serial buffer back out 75
76 More information?
 Visit
 baldengineer.com

Introduction to Arduino Programming