Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Corso Arduino - Lezione 3 Programmazione

Marco Loche
November 21, 2013

Corso Arduino - Lezione 3 Programmazione

An introduction to software programming and Arduino's Sketch development.
This was lesson 3 of an 8 lessons course organized by the Arduino User Group Roma on november-december 2013 at Fusolab 2.0 in Rome.
I co-lectured with Gilles Ruppert ‏@gillesruppert
Code available at https://github.com/marco-loche/aug-programmare-arduino/tree/lezione-2013.11.21

Marco Loche

November 21, 2013
Tweet

More Decks by Marco Loche

Other Decks in Programming

Transcript

  1. Acquisire le conoscenze di base per essere autonomi nella comprensione

    e scrittura degli Sketch Obiettivo della lezione
  2. Contenuti della lezione 1. IDE : Introduzione all’ambiente di sviluppo

    2. Sketch : Anatomia di un programma per l’Arduino 3. Variabili e costanti 4. Strutture di controllo 5. Funzioni 6. Il monitor seriale 7. Creare una libreria
  3. IDE Arduino è una piattaforma open-source, costituita da due parti

    (la scheda e l’ ambiente di sviluppo), per sviluppare programmi che interagiscono con l’ ambiente. http://arduino.cc/en/uploads/Main/ArduinoUnoSMDFront.jpg
  4. Versioni dell’IDE Compatibile con : • Windows • Mac OS

    • Linux 32 bit e 64 bit → ottenere il codice sorgente ◦ https://github.com/arduino/Arduino
  5. Installazione • Installazione Windows ◦ driver da installare manualmente http:

    //arduino.cc/en/Guide/Windows • DMG package per Mac • Per le distro Linux ◦ http://playground.arduino. cc/Learning/Linux
  6. Elementi dell’interfaccia Zone principali dell’interfaccia 1. editor di testo 2.

    area messaggi 3. console 4. barra degli strumenti 5. barra dei menu 6. barra di stato 1 2 3 4 5 6
  7. Creare uno Sketch Creare un nuovo Sketch Aprire uno Sketch

    http://arduino.cc/en/Guide/Environment
  8. Salvare uno Sketch Al primo salvataggio Arduino crea un cartella

    con il nome dello sketch. Tutti i file collegati allo sketch saranno in questa cartella http://arduino.cc/en/Guide/Environment
  9. Basta con le parole Aprire lo Sketch Blink Preparate la

    breadboard • Led Rosso • Resistenza da 220 Ω • Cavo nero su GND e polo - del LED • Cavo rosso su pin 13 e a monte della resistenza •
  10. Struttura di uno Sketch CODICE: https://github.com/marco-loche/aug-programmare-arduino/tree/master/01_simple // Definisci le costanti

    e le variabili globali int led = 13; // La routine setup viene eseguita un unica volta quando carichi lo sketch o quando premi il pulsante reset sulla scheda void setup() { pinMode(led, OUTPUT); } // La routine loop viene eseguita infinitamente per sempre void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); }
  11. Definizione // Definisci le costanti e le variabili globali int

    led = 13; // La routine setup viene eseguita una unica volta quando carichi lo sketch o quando premi il pulsante reset sulla scheda void setup() { pinMode(led, OUTPUT); } // La routine loop viene eseguita infinitamente per sempre void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); }
  12. Inizializzazione // Definisci le costanti e le variabili globali int

    led = 13; // La routine setup viene eseguita un unica volta quando carichi lo sketch o quando premi il pulsante reset sulla scheda void setup() { pinMode(led, OUTPUT); } // La routine loop viene eseguita infinitamente per sempre void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); }
  13. Esecuzione // Definisci le costanti e le variabili globali int

    led = 13; // La routine setup viene eseguita un unica volta quando carichi lo sketch o quando premi il pulsante reset sulla scheda void setup() { pinMode(led, OUTPUT); } // La routine loop viene eseguita infinitamente per sempre void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); }
  14. Ciclo di vita di un programma Definizione setup() loop() Sketch

    upload o Reset della scheda La scheda è pronta
  15. Una variabile, in informatica, è un insieme di dati modificabili

    situati una porzione di memoria (una o più locazioni di memoria) destinata a contenere dei dati, suscettibili di modifica nel corso dell'esecuzione di un programma. http://it.wikipedia.org/wiki/Variabile_(informatica) Variabili e costanti int i = 10; i = i + 10; // i vale? Una variabile si compone di : • un nome i • un valore 10 • un tipo int Il valore di una variabile può essere modificato
  16. Variabili e costanti int n = i + 5; //

    n vale? const int redLedPin = 13 #define redLedPin 13; int pin = 13; void function(){ int pin = 9; } Ad una variabile si può associare il valore di un’altra variabile (senza avere effetto su di essa Le costanti sono variabili di sola lettura Le variabili hanno un ambito di visibilià ( scope )
  17. Variabili e costanti • riferimento a un valore per riutilizzarlo

    o modificarlo nel corso del programma • aggiungono semantica al programma : nomi descrittivi • modificabili tramite assegazione
  18. Variabili e costanti : codice CODICE: https://github.com/marco-loche/aug-programmare-arduino/tree/master/02_var_const // Pin 13

    has an LED connected on most Arduino boards. // give it a name: const int led = 13; int pause = 1000; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(pause); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(pause); // wait for a second pause = pause + 100; }
  19. Variabili e costanti : codice // Pin 13 has an

    LED connected on most Arduino boards. // give it a name: const int led = 13; int pause = 1000; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); [...]
  20. Breadboard Nulla di modificato Basta con le parole Modificate lo

    Sketch const int led = 13; int pause = 1000; [....] void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(pause); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(pause); // wait for a second pause = pause + 100; }
  21. Condizione per confrontare valori • maggiore di • minore di

    • uguale a > 2 > 1; // true 1 > 2; // false < 1 < 2; // true 2 < 1; // false == 2 == 2; // true 2 == 1; false
  22. Condizione (2) • maggiore uguale • minore uguale >= 2

    >= 1; // true 2 >= 2; // true 1 >= 2; // false <= 1 <= 2; // true 2 <= 2; // true 2 <= 1; // true
  23. if / else if (condizione) { // azione } else

    { // se la condizione // non è vero } 1. una condizione booleana (come > < ==) 2. se la condizione è vera viene eseguita questa azione 3. altrimenti viene eseguita quest’altra azione
  24. Basta con le parole Esercizio: Realizzare il fade in/fade out

    con if / else Breadboard Spostare il cavo rosso sul pin 9
  25. If then else : codice // [.....] else{ //Fade Out

    analogWrite(led, intensity); intensity--; delay(20); } if( intensity == 255 ){ fadeIn = false; } if( intensity == 0){ fadeIn = true; delay(500); } } CODICE: https://github.com/marco-loche/aug-programmare-arduino/tree/master/03_if_else // Pin 9 is a PWM PIN const int led = 9; // Define the value of brightness of the led int intensity = 0; boolean fadeIn = true; void setup() { pinMode(led, OUTPUT); } void loop() { if(fadeIn){ //Fade in analogWrite(led, intensity); intensity++; delay(20); } // [.....]
  26. Ciclo while int i = 0; while (i < 10)

    { // azione i++; } - variabile di controllo - condizione - azione - cambio della variabile di controllo N.B: se la condizione non è mai falsa, abbiamo un ciclo infinito!
  27. Ciclo do while int i = 0; do { //

    azione } while (i < 10); simile al ciclo while semplice, ma l’azione è sempre eseguita almeno 1 volta!
  28. Ciclo for for (int i=0; i < 10; i++) {

    // azione } 1. inizializzazione della variabile di controllo 2. condizione 3. azione 4. modifica della variabile di controllo
  29. Basta con le parole Modificate lo Sketch // Pin 9

    is a PWM PIN const int led = 9; int intensity = 0; [...] void loop() { //Fade in for (intensity = 0 ; intensity <= 255; intensity++) { analogWrite(led, intensity); delay(10); } // Fade out for(intensity = 255 ; intensity >= 0; intensity--) { analogWrite(led, intensity); delay(10); } } Breadboard Spostare il cavo rosso sul pin 9
  30. Ciclo for : codice // Pin 9 is a PWM

    PIN const int led = 9; // Define the value of brightness of the led int intensity = 0; void setup() { pinMode(led, OUTPUT); } void loop() { //Fade in for (intensity = 0 ; intensity <= 255; intensity++) { analogWrite(led, intensity); delay(10); } // Fade out for(intensity = 255 ; intensity >= 0; intensity--) { analogWrite(led, intensity); delay(10); } } CODICE: https://github.com/marco-loche/aug-programmare-arduino/tree/master/04_for
  31. Le funzioni void blink(int pause){ //corpo della funzione } Una

    funzione si compone di : • un tipo restituito void • un nome blink • zero o più parametri : ◦ un tipo del parametro int ◦ un nome del parametro pause In informatica, nell'ambito della programmazione, una funzione è un particolare costrutto sintattico [...] che permette di raggruppare una sequenza di istruzioni in un unico blocco di istruzioni espletando così una determinata e in generale più complessa operazione, azione o elaborazione [...] http://it.wikipedia.org/wiki/Funzione_(informatica)
  32. Le funzioni • Permettono di avere un codice pulito, organizzato,

    modulare e leggibile. • Permettono di isolare le funzionalità • Riducono le possibilità di introduzione di errore durante le modifiche • Sono riutilizzabili in vari punti riducendo la dimensione del programma
  33. Funzioni: codice // Pin 9 is a PWM PIN const

    int led = 9; // Define the value of brightness of the led int intensity = 0; void setup() { pinMode(led, OUTPUT); } void fadeIn() { for (intensity = 0 ; intensity <= 255; intensity++) { analogWrite(led, intensity); delay(20); } } void fadeOut() { for(intensity = 255 ; intensity >= 0; intensity--) { analogWrite(led, intensity); delay(20); } } void loop() { fadeIn(); fadeOut(); } CODICE: https://github.com/marco-loche/aug-programmare-arduino/tree/master/05_funzioni
  34. Scope di una variabile for (int i = 0; i

    < 10; i++){ // i è accessibile // nelle varie iterazioni prenderà un valore da 0 a 9 } i = 10; // ERRORE! i non esiste qui • ‘block scope’ • la variabile non ‘esiste’ al di fuori del blocco
  35. Le librerie di funzioni pinMode() analogWrite(); analogRead(); digitalWrite(); digitalRead(); delay();

    La libreria di base è costituita dalle funzioni native che implementano funzionalità legate alla lettura scrittura sui pin, al tempo, a funzioni matematiche, etc http://arduino.cc/en/Reference/HomePage Ci sono poi decine di librerie create dalla comunità di utenti Arduino http://arduino.cc/en/Reference/Libraries
  36. La libreria Serial // Stampa un stringa ASCII Serial.print(val) Serial.println(val,

    format) // Stampa sun stringa ASCII // seguita dal ritorno a capo Serial.println(val) Serial.print(val, format) // Legge i dati in ignresso sulla seriale Serial.read() // Stampa un singolo Byte Serial.write() http://arduino.cc/en/Reference/Serial
  37. Il monitor seriale La comunicazione seriale tra arduino e il

    pc per: • debugging, • verifica dei sensori, • stato del programma
  38. Un esempio void setup() { pinMode(led, OUTPUT); // initialize serial

    communication at 9600 // bits per second: // Check the value in the Monitor Serial.begin( 9600); Serial.println( "\nReady\n\n" ); } void loop() { if(intensity%5 == 0) { Serial.print(intensity); Serial.print( " "); } // [.....] // [.....] if( intensity == 255 ){ fadeIn = false; Serial.println( "FadeIn"); } if( intensity == 0){ fadeIn = true; Serial.println( "FadeOut"); delay(500); } CODICE: https://github.com/marco-loche/aug-programmare-arduino/tree/master/06_monitor
  39. Le libreria • Introducono un approccio a “oggetti” (OOP) •

    Come le funzioni rendono il codice (ancora) più pulito • A differenza delle funzioni permettono di riutilizzare il codice in sketch diversi. !! Le librerie devono essere installate tutte nella directory libraries
  40. File intestazione (header : file .h) #ifndef Fader_h #define Fader_h

    #include "Arduino.h" class Fader { public: Fader(int pin); void fadeIn(); void fadeOut(); private: int _pin; }; #endif
  41. File del codice (code : file .cpp) #include "Arduino.h" #include

    "Fader.h" //Costruttore Fader::Fader(int pin){ pinMode(pin, OUTPUT); _pin = pin; } //Implementazione dei metodi void Fader::fadeIn(){ for (int intensity = 0 ; intensity <= 255; intensity++) { analogWrite(_pin, intensity); delay(20); }} void Fader::fadeOut(){ for (int intensity= 255 ; intensity >= 0; intensity--) { analogWrite(_pin, intensity); delay(20); } }
  42. Libreria: codice #include <Fader.h> Fader fader(9); void setup() { }

    void loop() { fader.fadeIn(); fader.fadeOut(); delay(500); } La libreria deve essere installata nella directory delle librerie dell’IDE. Arduino/libraries/Fader/Fader.cpp Arduino/libraries/Fader/Fader.h CODICE: https://github.com/marco-loche/aug-programmare-arduino/tree/master/07_libreria
  43. Link utili per proseguire http://www.google.it Software e codici • http://arduino.cc/en/Main/Software

    • https://github.com/arduino/Arduino Guide e Tutorial • http://arduino.cc/en/Guide/HomePage • http://arduino.cc/en/Reference/HomePage • http://arduino.cc/en/Tutorial/Foundations Codice della Lezione • https://github.com/marco-loche/aug-programmare-arduino
  44. Link (continua…) 11 Esperimenti con Codice & schema fritzing: http://www.oomlout.com/a/products/ardx/

    In inglese, ma ottimi esempi per sperimentare componenti di base con codice relativo…
  45. G R A Z I E Arduino User Group Roma

    Marco Loche - Gilles Ruppert