Tutorial: Introduction to the Arduino
From DftWiki
--D. Thiebaut 15:18, 20 April 2011 (EDT)
Contents |
Before You Start Playing... |
Video Introduction
- Excellent introduction to the Arduino, its team, and some of the projects.
Good Reference Pages
- The Arduino Language Reference
- The Getting Started guide
- The CSC231 Arduino project page (Fall 2008)
Good Tutorials on the Web
- Arduino Tutorial at UCLA (currently unavailable)
Notes for Mac Users
- You may have to install special drivers for your Mac to see the Arduino through the USB Port. Look here for more info: http://www.ftdichip.com/Drivers/VCP.htm
Important Concepts to Understand before Starting... |
| Action | Laptop | Arduino |
|---|---|---|
|
X | |
|
X | |
|
src | dest |
|
X | |
|
display | |
|
char sent in Monitor | get 1 char from USB |
Circuits and Systems |
- This is just a very rough introduction to the Arduino circuits, and useful only as a support for an in-class presentation of the Arduino. Please refer to http://arduino.cc/en/Tutorial/Foundations for in-depth coverage of all these concepts.

Digital I/Os |
- Main reference: http://arduino.cc/en/Tutorial/DigitalPins
- 14 pins
- Each can be input or output
- 5-Volt range
- 40 mA max
- Internal pull-up resistor (disconnected by default)
- Special pins
- Pins 0 & 1: Used to exchange data with USB
- Pins 2 & 3: can be used as interrupt pins (i.e. can trigger events)
- Pins 3, 5, 6, 9, 10, and 11: 8-bit Pulse-Width Modulation.
- Pin 13: on-board LED.
Analog Input |
- 6 Analog inputs
- each 10-bit resolution
- range = 0 - 5 Volts.
- 0V --> 0
- 5V --> 1023
- Important Note: Analog input pins can also be used as digital output pins. See http://www.arduino.cc/en/Tutorial/AnalogInputPins for more information.
Simulated Analog Output (PWM) |
- Digital Pins 3, 5, 6, 9, 10, and 11 can be used in 8-bit Pulse-Width Modulation.
- Frequency = 500Hz, ==> Period = 2 ms
- 8-bit value: range = 0 --> 255
- 0 --> 0% duty cycle: constant low level output
- 127 --> 50% duty cycle: 50% of the time, the signal is low, 50% high.
- 255 --> 100% duty cycle: constant high level output
- taken from http://www.arduino.cc/en/Tutorial/PWM

An Introduction to C in the Arduino Context |
Comments |
// this is a comment
/* and so is this */
/* and
this
as
well */
Setup() and Loop() |
Text Input/Output |
Output strings from the Arduino to Laptop
- Done with the Serial library
- Use Serial.begin() to set the baud rate (# of bits per second)
- Then output strings with Serial.println( ... ) or Serial.print( ... )
void setup() {
Serial.begin( 38400 );
Serial.println( "Hello there!" );
}
void loop() {
delay(1000); // wait for a second
Serial.println( "hello again!" );
}
Output numbers
- Taken from http://arduino.cc/en/Serial/Print
- Serial.print(78) gives "78"
- Serial.print(1.23456) gives "1.23"
- Serial.print(byte(78)) gives "N" (whose ASCII value is 78)
- Serial.print('N') gives "N"
- Serial.print("Hello world.") gives "Hello world."
- An optional second parameter specifies the base (format) to use; permitted values are BYTE, BIN (binary, or base 2), OCT (octal, or base 8), DEC (decimal, or base 10), HEX (hexadecimal, or base 16). For floating point numbers, this parameter specifies the number of decimal places to use. For example:
- Serial.print(78, BYTE) gives "N"
- Serial.print(78, BIN) gives "1001110"
- Serial.print(78, OCT) gives "116"
- Serial.print(78, DEC) gives "78"
- Serial.print(78, HEX) gives "4E"
- Serial.println(1.23456, 0) gives "1"
- Serial.println(1.23456, 2) gives "1.23"
- Serial.println(1.23456, 4) gives "1.2346"
Inputting characters
- Use Serial.read() and Serial.available(), as illustrated below
void setup() {
Serial.begin( 38400 );
Serial.println( "Enter one characterA in the console and send it: " );
}
void loop() {
int charByte;
if ( Serial.available() > 0 ) {
charByte = Serial.read();
Serial.print( charByte, DEC );
Serial.print( " is " );
Serial.print( charByte, HEX );
Serial.print( " in hex.\n\n\n" );
Serial.println( "Enter another character in the console and send it: " );
}
}
Statements |
statement;
statement;
statement;
// comment
statement;
compound-statement {
statement;
statement;
}
Control Statements |
IF
if ( condition equal to 0 or different from 0 ) {
// Action A
}
else {
// Action B
}
FOR
- same syntax and structure as in Java.
- you can declare the variable in the loop.
- the variable is undefined outside the loop.
for ( int i = 0; i < 100; i++ ) {
statement;
statement;
}
SWITCH
- works with countable variables (not floats).
switch (var) {
case 1:
//do something when var equals 1
break;
case 2:
//do something when var equals 2
break;
default:
// if nothing else matches, do the default
// default is optional
}
WHILE
while (expression evaluating to 0 or something different from 0 ) {
statement;
statement;
statement;
}
BREAK/CONTINUE
- break: break out of the most inner loop it is located in.
- continue: skips the remainder of the current loop and returns to the closest for or while statement.
Variables and Data Types |
- void
- boolean
- char
- unsigned char
- byte
- int
- unsigned int
- word
- long
- unsigned long
- float
- double
- string (array of chars)
- String (object) (see http://arduino.cc/en/Reference/StringObject)
- array (see http://arduino.cc/en/Reference/Array)
- Examples
int LEDpin = 5; // LED on pin 5
int switchPin = 13; // momentary switch on 13, other side connected to ground
boolean running = false;
char myChar = 'A';
char myChar = 65; // both are equivalent
byte b = B10010; // "B" is the binary formatter (B10010 = 18 decimal)
float myfloat;
float sensorCalbrate = 1.117;
char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
String stringOne = "Hello String"; // using a constant String
String stringOne = String('a'); // converting a constant char into a String
String stringTwo = String("This is a string"); // converting a constant string into a String object
String stringOne = String(stringTwo + " with more"); // concatenating two strings
String stringOne = String(13); // using a constant integer
String stringOne = String(analogRead(0), DEC); // using an int and a base
String stringOne = String(45, HEX); // using an int and a base (hexadecimal)
String stringOne = String(255, BIN); // using an int and a base (binary)
String stringOne = String(millis(), DEC); // using a long and a base
int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";
![]() | | |
| ||
![]() | ![]() |
![]() | | |
| ||
![]() | ![]() |
![]() | | |
| ||
![]() | ![]() |
Functions |

- Static variables
int process( int offset ) {
static int current=0;
current += offset;
...
}
Digital Output |
The Basics |
- The Arduino sports 14 output pins: Digital 0 to 13
- Steps:
- in setup(), use pinMode() to identify what pin you will use, and set the direction of data transfer as OUTPUT
- in loop(), use digitalWrite( ) to output HIGH or LOW to that pin.
- Example
int ledPin = 13; // LED connected to digital pin 13
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}
void loop()
{
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
}
Exercises |
![]() | | |
| ||
![]() | ![]() |
![]() | | |
| ||
![]() | ![]() |
Digital Input |
- The approach is similar to the one take for output bits.
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
}
void loop() {
int sensorValue = digitalRead(2);
Serial.println(sensorValue, DEC);
}
Exercises |
![]() | | |
| ||
![]() | ![]() |
![]() | | |
| ||
![]() | ![]() |
Analog Input |
- Use the analogRead() function to read an analog value from a given pin:
void loop() {
int sensorValue = analogRead(A0); // Note: A0 is predefined
Serial.println(sensorValue, DEC); // display value on Monitor
}
Exercise |
![]() | | |
| ||
![]() | ![]() |

Projects |
![]() | | |
| ||
![]() | ![]() |
![]() | | |
| ||
![]() | ![]() |
- See Yang Li's CSC231 Final Project page for additional information on how to wire up the LED Matrix, and/or how to program it.
Some Ideas







