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