Programming C for the Arduino: more

Transcription

Programming C for the Arduino: more
Technische Universität München
Lecture 7: Programming for the Arduino
- The hardware
- The programming environment
- Binary world, from Assembler to C
- Programming C for the Arduino: Basics
- Programming C for the Arduino: more …
- Programming style
Lect7-Page1
Technische Universität München
The hardware
http://www.arduino.cc/
Lect7-Page2
Technische Universität München
Lecture 7: Programming for the Arduino
- The hardware
- The programming environment
- Binary world, from Assembler to C
- Programming C for the Arduino: Basics
- Programming C for the Arduino: more …
- Programming style
Lect7-Page3
Technische Universität München
Programming environment
Download software and driver from:
http://arduino.cc/en/Main/Software
(MAC OSX FTDI-Driver:
http://arduino.cc/en/Guide/MacOSX
http://www.ftdichip.com/Drivers/VCP.htm)
Lect7-Page4
Technische Universität München
Lecture 7: Programming for the Arduino
- The hardware
- The programming environment
- Binary world, from Assembler to C
- Programming C for the Arduino: Basics
- Programming C for the Arduino: more …
- Programming style
Lect7-Page5
Technische Universität München
Binary world, programming from Assembler to C
Programmable, mechanical calculation machines (19th/early 20th cent. AD)
Falcon
(1728)
Joseph-Marie
Jacquard
(1805)
-> punchcard looms
for work steps
(program)
1
Origins at China and also developed by the
mathematician Leibniz (17th century AD)
Positional numeral system which represents
each number just with 2 symbols, 0 and 1
These values can be represented by voltage
levels in electronic circuits
For human use very inefficient but with
electronic circuits it is possible to create
very efficient arithmetic and logic units (ALUs)
for the basic operations addition,
subtraction, multiplication and division
0
0
1
1
+5VSee: Rembold, Ulrich et. al.: Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Hanser München Wien 1991
See: http://privat.swol.de/SvenBandel/index.html, Download 01.09.2007
See: http://en.wikipedia.org/wiki/Image:Boulier1.JPG, 01.09.2007
See: Rembold, Ulrich et. al.: Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Hanser München Wien 1991
Lect7-Page6
Technische Universität München
Binary world, programming from Assembler to C
The machine instructions
Assembler mnemonic:
add ax, 1000
(short „Assembler“)
Assembler
conversion
Machine code (80x86): 000001011110100000000011
high byte
00000101
Operation code for
„add to accumulator“
See: http://ivs.cs.uni-magdeburg.de/bs/lehre/sose99/bs1/seminare/assembler.shtml, Download 30.08.2007
00000011
low byte
11101000
Binary representation of number
1000
Lect7-Page7
Technische Universität München
Binary world, programming from Assembler to C
Programming paradigm of the
problem oriented computer
language C++/C
• Procedural programming with
structured programming as
subset
•
•
•
•
•
Code is splitted into several, reusable sections
called procedures or functions with own scopes,
which can be called at given code positions
Logical procedure units are combined to
modules
Jumps (like goto) are not allowed
E.g. C
Case sensitive
See: http://en.wikipedia.org/wiki/Programming_paradigm, Download 08.10.2007
Lect7-Page8
Technische Universität München
Binary world, programming from Assembler to C
From source code to machine instructions
Source code
in a specific computer language
Compiler
Assembler mnemonic
(short „Assembler“)
conversion
translation and
optimisation
Assembler/Disassembler
Machine code (e.g. 80x86, …)
See: http://ivs.cs.uni-magdeburg.de/bs/lehre/sose99/bs1/seminare/assembler.shtml, Download 30.08.2007
The process of compilation is
unidirectional. There are several
representations of a solution for a
specific task in problemoriented
languages which results in the same
representation in machine code. On the
other hand the optimisation is not ideal,
so that the knowledge about the results
after comiplation can improve the
runtime of a program.
Lect7-Page9
Technische Universität München
Binary world, programming from Assembler to C
Phase
Compiler
Programming
Source
codes
Creation
Source
codes
Preprocessor/
Compilation
Object
codes
Library
codes
Linking
Executables
Runtime
Load
Executables
Executable
libraries
Upload
via USB
Lect7-Page10
Technische Universität München
Lecture 7: Programming for the Arduino
- The hardware
- The programming environment
- Binary world, from Assembler to C
- Programming C for the Arduino: Basics
- Programming C for the Arduino: more …
- Programming style
Lect7-Page11
Technische Universität München
Programming C for the Arduino: Basics
Our first program: Blink (LED)
http://www.led-shop.com/images/LED_Anschluss.jpg
Lect7-Page12
Technische Universität München
Programming C for the Arduino: Basics
Memory
Elements
int, long,
float, double,
char,
structures,
…
Variables
Arrays (e.g. int Ar[5];)
Indexes start with 0!!!
Pointers
Lect7-Page13
Technische Universität München
Programming C for the Arduino: Basics
= 1 Byte
1 0 1 1 0 0 1 0 bin
0 * 20 = 0 * 1 = 0dec
1 * 21 = 1 * 2 = 2dec
0 * 22 = 0 * 4
= 0dec
0 * 23 = 0 * 8
= 0dec
1 * 24 = 0 * 16
= 16dec
1 * 25 = 0 * 32
= 32dec
0 * 26 = 0 * 64
= 0dec
1 * 27 = 0 * 128
= 128dec
= 178dec
Lect7-Page14
Technische Universität München
Programming C for the Arduino: Basics
Function has no return value
“true” or “false”
1 byte character
Same as “byte” (see “byte”)
1 byte integer with a value from 0 to 255
2 byte integer with a value from -32768 to 32767
2 byte unsigned integer with a value from 0 to 65535
Same as “unsigned int” (see “unsigned int”)
4 byte integer with a value from -2147483648 to 2147483647
4 byte integer with a value from 0 to 4294967295
2 byte floating point (6 decimal digits precision)
4 byte floating point (15 decimal digits precision)
e.g. “char cArray[128];” similar to “array” of any type
C++ string object
Array of any type
See: http://arduino.cc/en/Reference/HomePage, Download 2012-01-11
Lect7-Page15
Technische Universität München
Programming C for the Arduino: Basics
Pointer:
Pointer:
int *a = &a;
<&a>
Address of „a“
Memory element:
int a = 5;
5
Memory:
Location of element in
Memory (address)
Lect7-Page16
Technische Universität München
Programming C for the Arduino: Basics
Functions
Functiondefinition
int Add (int a, int b)
{
return a+b;
}
Functioncall
X = Add (5, 6);
=> X=11
Lect7-Page17
Technische Universität München
Programming C for the Arduino: Basics
Operators
Assign
Plus
Minus
Multiplication
Division
Modulo-Div.
AND
OR
NOT
Standard operator:
=,
+,
-,
*,
/,
%,
&& (Bit-AND &)
|| (Bit-OR |)
!
…
Additional operators:
Add one, subtract one:
++,--, (e.g. i++; is i=i+1)
and a lot of others:
+=, -=, …, [, ], ->, *, …
Lect7-Page18
Technische Universität München
Programming C for the Arduino: Basics
Comments
// This is a comment
/* This is also a comment */
Lect7-Page19
Technische Universität München
Programming C for the Arduino: Basics
Interaction
with users
Serial write
void setup() {
// initialize serial communication:
Serial.begin(9600);
}
void loop()
{
Serial.print(“On”); // Write without new line
Serial.println(“Off”); // Wite with new line
}
AB
AB
AB
Lect7-Page20
Technische Universität München
Programming C for the Arduino: Basics
Application
workflow
Conditions
Conditions
if (iIndex < 10)
{
Serial.print(“A“);
}
else
{
Serial.print(“B“);
}
switch (iIndex)
{
case 1:
Serial.print(“A“);
break;
case 2:
Serial.print(“B“);
break;
...
}
Lect7-Page21
Technische Universität München
Programming C for the Arduino: Basics
Realizing a state machine using switch condition
int iState;
void setup ()
{
iState = 0;
}
calibration
0
void loop ()
{
switch (iState)
{
case 0:
//calibration
iState = 1;
break;
case 1:
// move just forward as long
// as wall closer than 10 cm
iState = 2;
break;
case 2:
...
}
}
move ...
1
2
Lect7-Page22
Technische Universität München
Programming C for the Arduino: Basics
Application
workflow
Loops
int i = 0;
while (i < 10)
{
Serial.print(i);
i = i +1;
}
Loops
int i;
for (i = 1; i < 10; i++)
{
Serial.print(i);
}
Lect7-Page23
Technische Universität München
Programming C for the Arduino: Basics
Digital Pins
Output
Input
Lect7-Page24
Technische Universität München
Programming C for the Arduino: Basics
External modules
(Libraries)
Copy library
modules
to here
Use module with
#include <…>
Download from:
http://www.ladyada.net/make/mshield/
Lect7-Page25
Technische Universität München
MAC OS X:
If you are using Mac OS X, the libraries folder is
hidden in the Arduino application:
Right-click on Arduino.app, "Show package
content", then put the library folder in
"Contents/Resources/Java/hardware/libraries".
Include the library using the menu in the IDE, or
type “#include <AFMotor.h>”
You are now ready to use the library.
Lect7-Page26
Technische Universität München
Lecture 7: Programming for the Arduino
- The hardware
- The programming environment
- Binary world, from Assembler to C
- Programming C for the Arduino: Basics
- Programming C for the Arduino: more …
- Programming style
Lect7-Page27
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for DC-motors: basic functionality
Motor armature
Commutator
Carbon brush
http://de.wikipedia.org/w/index.php?title=Datei:Gleichstrommaschine.svg&filetimestamp=20070820012802
http://www.hpw-modellbahn.de/eisenbahntechnik/motoren.htm
Lect7-Page28
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for DC-motors: basic functionality
Motor armature
Commutator
Carbon brush
Rotation direction
GND
http://www.rn-wissen.de/index.php/Getriebemotoren_Ansteuerung
Lect7-Page29
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for DC-motors: basic functionality (with driver IC L293 D)
Motor armature
Commutator
Carbon brush
http://www.rn-wissen.de/index.php/Getriebemotoren_Ansteuerung
Lect7-Page30
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for DC-motors: basic functionality (with driver IC L293 D)
Enable = speed (PWM)
Rotation direction
and On/Off
+/- rotate forward
-/+ rotate backward
+/+ or -/- stop
GND
http://www.rn-wissen.de/index.php/Getriebemotoren_Ansteuerung
Lect7-Page31
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for DC-motors:
Adafruit Motor/Stepper/Servo Shield for Arduino kit - v1.0
#3
#4
http://www.adafruit.com/index.php?main_page=product_info&cPath=17_21&products_id=81
#1
#2
Lect7-Page32
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for DC-motors:
Adafruit Motor/Stepper/Servo Shield for Arduino kit - v1.0
// Use Adafruit module
#include <AFMotor.h>
// create motor #2, 64KHz pwm
AF_DCMotor MotorRight(2, MOTOR12_64KHZ);
// set the speed
MotorRight.setSpeed(50);
// Move forward
for (int i=0;i<500;i++)
{
MotorRight.run(FORWARD);
}
MotorRight.run(RELEASE); // switch off
// similar BACKWARD
// MotorRight.run(BACKWARD);
setup()
loop()
http://www.ladyada.net/make/mshield/
Lect7-Page33
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for step-motors (steppers): basic functionality
Inductor 2
2x resistance
Inductor 1
http://www.shop.robotikhardware.de/
http://www.rn-wissen.de/index.php/Schrittmotoren
http://www.schulebw.de/unterricht/faecher/physik/mess/soundkarte/hardware/interfsound/schrittschlitt.htm
Lect7-Page34
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for step-motors (steppers): RN-Stepp297
Power
Clock
pulse
for
steps
5V GND Rotation direction
http://www.shop.robotikhardware.de/
Lect7-Page35
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for step-motors (steppers): RN-Stepp297
+5V or 0V
Rotation
direction
Clock
pulse
for
steps
(PWM)
5V
http://www.shop.robotikhardware.de/
GND
Lect7-Page36
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for step-motors (steppers): RN-Stepp297 - programming
// Use stepper module
#include <Stepper.h>
// Create stepper class variable
Stepper StepperLeft (steps, pin_direction, pin_clockpulse);
e.g.
StepperLeft (200, 8, 9)
StepperRight (200, 7, 10)
// set the speed of the motor to 200 RPMs
StepperLeft.setSpeed(200);
setup()
// Move one step forward
StepperLeft.step(1);
loop()
// Move one step backward
StepperLeft.step(-1);
http://arduino.cc/en/Reference/Stepper?from=Tutorial.Stepper
Lect7-Page37
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for step-motors (steppers):
Adafruit Motor/Stepper/Servo Shield for Arduino kit - v1.0
#2
#1
Lect7-Page38
Technische Universität München
Programming C for the Arduino: more ...
Motordriver for step-motors (steppers):
Adafruit Motor/Stepper/Servo Shield for Arduino kit - v1.0
// Use Adafruit module
#include <AFMotor.h>
// create motor stepper #2 with 48 steps
AF_Stepper StepperLeft(48, 2);
// set the speed
StepperLeft.setSpeed(60);
StepperLeft.release();
setup()
// Move forward
StepperLeft.step(1, FORWARD, SINGLE);
loop()
// Move backward
StepperLeft.step(1, BACKWARD, SINGLE);
http://www.ladyada.net/make/mshield/
Lect7-Page39
Technische Universität München
Programming C for the Arduino: more ...
Low Cost Ultra Sonic Range Finder
5V
GND
Trigger pulse and signal
Lect7-Page40
Technische Universität München
Programming C for the Arduino: more ...
Low Cost Ultra Sonic Range Finder
Range = uSec/58=cm or uSec/148=inches.
Lect7-Page41
Technische Universität München
Programming C for the Arduino: more ...
Low Cost Ultra Sonic Range Finder
e.g.
int iPingPin = 13;
Range = uSec/58=cm or uSec/148=inches.
Lect7-Page42
Technische Universität München
Programming C for the Arduino: more ...
Robot Compass Modul
GND
Signal (PWM)
5V
PWM-signal
0.1 msec == 1 degree
e.g.
int iCompassPin = 11;
Lect7-Page43
Technische Universität München
Lecture 7: Programming for the Arduino
- The hardware
- The programming environment
- Binary world, from Assembler to C
- Programming C for the Arduino: Basics
- Programming C for the Arduino: more …
- Programming style
Lect7-Page44
Technische Universität München
Programming style
See: http://casablanca.informatik.hu-berlin.de/database/MDA-UML/VL/V1-MODSOFT-I.1.Ueberblick.pdf, Download 07.11.2006
Lect7-Page45
Technische Universität München
Programming style
Try to write readable and efficient code:
- Add comments to explain the code
- Use understandable (variable, function) names
- Structure the code into logical units
- Initialize variables
- Search for existing code first
-…
Lect7-Page46
Technische Universität München
Programming style
And for help look at:
Lect7-Page47
Technische Universität München
The goal!
30cm
30cm
X
Stop the robot:
while (1==1) {}
Thank you
Lect7-Page48

Similar documents