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

Corso Arduino - Lezione 3 Programmazione

Avatar for Marco Loche 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

Avatar for Marco Loche

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