Lecture 7: Programming for the Arduino



Similar documents
Programming the Arduino

The programming language C. sws1 1

Embedded Systems. Review of ANSI C Topics. A Review of ANSI C and Considerations for Embedded C Programming. Basic features of C

Arduino Motor Shield (L298) Manual

Servo Info and Centering

DS1307 Real Time Clock Breakout Board Kit

Arduino Lesson 5. The Serial Monitor

Sources: On the Web: Slides will be available on:

Lab 6 Introduction to Serial and Wireless Communication

Microcontroller Programming Beginning with Arduino. Charlie Mooney

C Programming. for Embedded Microcontrollers. Warwick A. Smith. Postbus 11. Elektor International Media BV. 6114ZG Susteren The Netherlands

Basic Pulse Width Modulation

Arduino Lesson 16. Stepper Motors

GM862 Arduino Shield

How To Control A Car With A Thermostat

Theory and Practice of Tangible User Interfaces. Thursday Week 2: Digital Input and Output. week. Digital Input and Output. RGB LEDs fade with PWM

cs281: Introduction to Computer Systems Lab08 Interrupt Handling and Stepper Motor Controller

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

Outline. hardware components programming environments. installing Python executing Python code. decimal and binary notations running Sage

Arduino Microcontroller Guide W. Durfee, University of Minnesota ver. oct-2011 Available on-line at

2011, The McGraw-Hill Companies, Inc. Chapter 3

Data Storage: Each time you create a variable in memory, a certain amount of memory is allocated for that variable based on its data type (or class).

MeshBee Open Source ZigBee RF Module CookBook

C++ Programming Language

Using Arduino Microcontrollers to Sense DC Motor Speed and Position

MODULE BOUSSOLE ÉLECTRONIQUE CMPS03 Référence :

CPU Organization and Assembly Language

Eric Mitchell April 2, 2012 Application Note: Control of a 180 Servo Motor with Arduino UNO Development Board

Arduino-Based Dataloggers: Hardware and Software David R. Brooks Institute for Earth Science Research and Education V 1.2, June, , 2015

How To Write Portable Programs In C

Freescale Semiconductor, I

Installing Java (Windows) and Writing your First Program

Arduino Internet Connectivity: Maintenance Manual Julian Ryan Draft No. 7 April 24, 2015

ASSEMBLY PROGRAMMING ON A VIRTUAL COMPUTER

Informatica e Sistemi in Tempo Reale

Electronic Brick of Current Sensor

Pololu DRV8835 Dual Motor Driver Shield for Arduino

FTC Android Based Control System

Chapter 7D The Java Virtual Machine

Topics. Introduction. Java History CS 146. Introduction to Programming and Algorithms Module 1. Module Objectives

Bluetooth + USB 16 Servo Controller [RKI-1005 & RKI-1205]

The C Programming Language course syllabus associate level

How to program a Zumo Robot with Simulink

Arduino Lesson 13. DC Motors. Created by Simon Monk

The Answer to the 14 Most Frequently Asked Modbus Questions

Arduino Lesson 1. Blink

S and STEP 7 Basic V10.5

DELLORTO. Instructions Manual. Deuss Service Tool For ECS System ECU. Dell Orto Deuss Service Tool instruction manual Page 1 of 11.

#include <Gamer.h> Gamer gamer; void setup() { gamer.begin(); } void loop() {

Software Manual RS232 Laser Merge Module. Document # SU Rev A

Programmable Logic Controllers Definition. Programmable Logic Controllers History

Table 1 Comparison of DC, Uni-Polar and Bi-polar Stepper Motors

3 SOFTWARE AND PROGRAMMING LANGUAGES

Pemrograman Dasar. Basic Elements Of Java

SKP16C62P Tutorial 1 Software Development Process using HEW. Renesas Technology America Inc.

ZX-NUNCHUK (# )

PowerBox PBX 180. Installation and Users Guide

Modern Robotics, Inc Core Device Discovery Utility. Modern Robotics Inc, 2015

IR Communication a learn.sparkfun.com tutorial

Object Oriented Software Design

INTRODUCTION TO SERIAL ARM

Candle Plant process automation based on ABB 800xA Distributed Control Systems

RB-See-211. Seeedstudio Grove 6-15V, 2A Dual I2C Motor Driver. Grove - I2C Motor Driver. Introduction

Faculty of Engineering Student Number:

TECHNOLOGY Computer Programming II Grade: 9-12 Standard 2: Technology and Society Interaction

Develop a Dallas 1-Wire Master Using the Z8F1680 Series of MCUs

Application Note: AN00141 xcore-xa - Application Development

An Introduction to MPLAB Integrated Development Environment

Arduino Lesson 14. Servo Motors

Crazy Alarm Clock L A K S H M I M E Y Y A P P A N J A M E S K A Y E W I L L I A M D I E H L C O N G C H E N

Board also Supports MicroBridge

Data Acquisition Module with I2C interface «I2C-FLEXEL» User s Guide

Object Oriented Software Design

Welcome to the tutorial for the MPLAB Starter Kit for dspic DSCs

Number Representation

Tutorial for MPLAB Starter Kit for PIC18F

Ultrasonic Distance Measurement Module

Modbus Communications for PanelView Terminals

SECTION C [short essay] [Not to exceed 120 words, Answer any SIX questions. Each question carries FOUR marks] 6 x 4=24 marks

DNA Data and Program Representation. Alexandre David

The BSN Hardware and Software Platform: Enabling Easy Development of Body Sensor Network Applications

Transmitter Interface Program

CanSat Program. Stensat Group LLC

Serial Communications

Lecture 7: Machine-Level Programming I: Basics Mohamed Zahran (aka Z)

Habanero Extreme Scale Software Research Project

Selecting and Implementing H-Bridges in DC Motor Control. Daniel Phan A

El Dorado Union High School District Educational Services

Lecture N -1- PHYS Microcontrollers

Lumousoft Visual Programming Language and its IDE

Basic DC Motor Circuits. Living with the Lab Gerald Recktenwald Portland State University

2014 HSC Software Design and Development Marking Guidelines

Compilers. Introduction to Compilers. Lecture 1. Spring term. Mick O Donnell: michael.odonnell@uam.es Alfonso Ortega: alfonso.ortega@uam.

TUTORIAL FOR INITIALIZING BLUETOOTH COMMUNICATION BETWEEN ANDROID AND ARDUINO

Basic DC Motor Circuits

Example Connection between USB Host and Android

DEPARTMENT OF ELECTRONICS ENGINEERING

Embedded Systems Design Course Applying the mbed microcontroller

EE 472 Lab 2 (Group) Scheduling, Digital I/O, Analog Input, and Pulse Generation University of Washington - Department of Electrical Engineering

Transcription:

Lecture 7: Programming for the Arduino - The hardware - The programming environment - Binary world, from Assembler to C - - Programming C for the Arduino: more - Programming style Lect7-Page1 The hardware http://www.arduino.cc/ Lect7-Page2 1

Lecture 7: Programming for the Arduino - The hardware - The programming environment - Binary world, from Assembler to C - - Programming C for the Arduino: more - Programming style Lect7-Page3 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 2

Lecture 7: Programming for the Arduino - The hardware - The programming environment - Binary world, from Assembler to C - - Programming C for the Arduino: more - Programming style Lect7-Page5 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) 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 See: 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 +5V- 1 0 0 1 1 Lect7-Page6 3

Binary world, programming from Assembler to C The machine instructions Assembler mnemonic: add ax, 1000 (short Assembler ) Assembler conversion Machine code (80x86): 000001011110100000000011 00000101 Operation code for add to accumulator high byte low byte 00000011 11101000 Binary representation of number 1000 See: http://ivs.cs.uni-magdeburg.de/bs/lehre/sose99/bs1/seminare/assembler.shtml, Download 30.08.2007 Lect7-Page7 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 4

Binary world, programming from Assembler to C From source code to machine instructions Source code in a specific computer language Assembler mnemonic (short Assembler ) Compiler translation and optimisation conversion Assembler/Disassembler Machine code (e.g. 80x86, ) 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. See: http://ivs.cs.uni-magdeburg.de/bs/lehre/sose99/bs1/seminare/assembler.shtml, Download 30.08.2007 Lect7-Page9 Binary world, programming from Assembler to C Phase Programming Creation Compiler Source codes Source codes Preprocessor/ Compilation Object codes Library codes Linking Executables Runtime Load Executables Executable libraries Upload via USB Lect7-Page10 5

Lecture 7: Programming for the Arduino - The hardware - The programming environment - Binary world, from Assembler to C - - Programming C for the Arduino: more - Programming style Lect7-Page11 Our first program: Blink (LED) http://www.led-shop.com/images/led_anschluss.jpg Lect7-Page12 6

Memory Elements int, long, float, double, char, structures, Variables Arrays (e.g. int Ar[5];) Indexes start with 0!!! Pointers Lect7-Page13 = 1 Byte 1 0 1 1 0 0 1 0 bin 0 * 2 0 = 0 * 1 = 0 dec 1 * 2 1 = 1 * 2 = 2 dec 0 * 2 2 = 0 * 4 = 0 dec 0 * 2 3 = 0 * 8 = 0 dec 1 * 2 4 = 0 * 16 = 16 dec 1 * 2 5 = 0 * 32 = 32 dec 0 * 2 6 = 0 * 64 = 0 dec 1 * 2 7 = 0 * 128 = 128 dec = 178 dec Lect7-Page14 7

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 Pointer: Pointer: int *a = &a; <&a> Memory element: int a = 5; 5 Memory: Address of a Location of element in Memory (address) Lect7-Page16 8

Functions Functiondefinition int Add (int a, int b) { return a+b; } Functioncall X = Add (5, 6); => X=11 Lect7-Page17 Operators Standard operator: Assign =, Plus +, Minus -, Multiplication *, Division /, Modulo-Div. %, AND && (Bit-AND &) OR (Bit-OR ) NOT! Additional operators: Add one, subtract one: ++,--, (e.g. i++; is i=i+1) and a lot of others: +=, -=,, [, ], ->, *, Lect7-Page18 9

Comments // This is a comment /* This is also a comment */ Lect7-Page19 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 10

Application workflow Conditions if (iindex < 10) { Serial.print( A ); } else { Serial.print( B ); } Conditions switch (iindex) { case 1: Serial.print( A ); break; case 2: Serial.print( B ); break;... } Lect7-Page21 Realizing a state machine using switch condition int istate; void setup () { istate = 0; } calibration move... 0 1 2 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:... } } Lect7-Page22 11

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 Digital Pins Output Input Lect7-Page24 12

External modules (Libraries) Copy library modules to here Use module with #include < > Download from: http://www.ladyada.net/make/mshield/ Lect7-Page25 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 13

Lecture 7: Programming for the Arduino - The hardware - The programming environment - Binary world, from Assembler to C - - Programming C for the Arduino: more - Programming style Lect7-Page27 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 14

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 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 15

Motordriver for DC-motors: basic functionality (with driver IC L293 D) Rotation direction and On/Off +/- rotate forward -/+ rotate backward +/+ or -/- stop Enable = speed (PWM) GND http://www.rn-wissen.de/index.php/getriebemotoren_ansteuerung Lect7-Page31 Motordriver for DC-motors: Adafruit Motor/Stepper/Servo Shield for Arduino kit - v1.0 #3 #1 #4 #2 http://www.adafruit.com/index.php?main_page=product_info&cpath=17_21&products_id=81 Lect7-Page32 16

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 Motordriver for step-motors (steppers): basic functionality Inductor 1 Inductor 2 2x resistance 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 17

Motordriver for step-motors (steppers): RN-Stepp297 Power Clock pulse for steps http://www.shop.robotikhardware.de/ 5V GND Rotation direction Lect7-Page35 Motordriver for step-motors (steppers): RN-Stepp297 +5V or 0V Rotation direction Clock pulse for steps (PWM) 5V GND http://www.shop.robotikhardware.de/ Lect7-Page36 18

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); // Move one step backward StepperLeft.step(-1); loop() http://arduino.cc/en/reference/stepper?from=tutorial.stepper Lect7-Page37 Motordriver for step-motors (steppers): Adafruit Motor/Stepper/Servo Shield for Arduino kit - v1.0 #2 #1 Lect7-Page38 19

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); // Move backward StepperLeft.step(1, BACKWARD, SINGLE); loop() http://www.ladyada.net/make/mshield/ Lect7-Page39 Low Cost Ultra Sonic Range Finder 5V GND Trigger pulse and signal Lect7-Page40 20

Low Cost Ultra Sonic Range Finder Range = usec/58=cm or usec/148=inches. Lect7-Page41 Low Cost Ultra Sonic Range Finder e.g. int ipingpin = 13; Range = usec/58=cm or usec/148=inches. Lect7-Page42 21

Robot Compass Modul GND Signal (PWM) 5V PWM-signal 0.1 msec == 1 degree e.g. int icompasspin = 11; Lect7-Page43 Lecture 7: Programming for the Arduino - The hardware - The programming environment - Binary world, from Assembler to C - - Programming C for the Arduino: more - Programming style Lect7-Page44 22

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 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 23

And for help look at: Programming style Lect7-Page47 The goal! 30cm X 30cm Stop the robot: while (1==1) {} Thank you Lect7-Page48 24