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

Corso Arduino - Lezione 3 Programmazione

86db2617dad3a827499c0bc0a253ea63?s=47 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

86db2617dad3a827499c0bc0a253ea63?s=128

Marco Loche

November 21, 2013
Tweet

More Decks by Marco Loche

Other Decks in Programming

Transcript

  1. None
  2. Corso Arduino Fusolab 2.0 Lezione 3 : Programmazione Arduino User

    Group Roma Marco Loche - Gilles Ruppert
  3. Acquisire le conoscenze di base per essere autonomi nella comprensione

    e scrittura degli Sketch Obiettivo della lezione
  4. 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
  5. None
  6. 1. IDE L’ambiente di sviluppo

  7. 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
  8. Versioni dell’IDE Compatibile con : • Windows • Mac OS

    • Linux 32 bit e 64 bit → ottenere il codice sorgente ◦ https://github.com/arduino/Arduino
  9. Download http://arduino.cc/en/Main/Software

  10. 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
  11. Connessione http://arduino.cc/en/uploads/Main/ArduinoUnoFront240.jpg http://arduino.cc/en/uploads/Guide/USBCable.jpg

  12. Configurazione Tipo di Arduino Porta Seriale Windows Mac OS Linux

  13. 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
  14. Funzionalità dell’IDE Menu Arduino http://arduino.cc/en/Guide/Environment

  15. Funzionalità dell’IDE Menu File http://arduino.cc/en/Guide/Environment

  16. Funzionalità dell’IDE Menu Modifica http://arduino.cc/en/Guide/Environment

  17. Funzionalità dell’IDE Menu Sketch http://arduino.cc/en/Guide/Environment

  18. Funzionalità dell’IDE Menu Strumenti http://arduino.cc/en/Guide/Environment

  19. None
  20. 2. Sketch Anatomia di un programma per l’Arduino

  21. Creare uno Sketch Creare un nuovo Sketch Aprire uno Sketch

    http://arduino.cc/en/Guide/Environment
  22. 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
  23. 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 •
  24. 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); }
  25. 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); }
  26. 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); }
  27. 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); }
  28. Ciclo di vita di un programma Definizione setup() loop() Sketch

    upload o Reset della scheda La scheda è pronta
  29. start digitalWrite(led, HIGH) delay(1000) digitalWrite(led, LOW) delay(1000) end Il loop

  30. Verifica, compila e carica 1. Verifica e Compila 2. Carica

  31. None
  32. 3. Variabili e costanti Elementi di programmazione

  33. 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
  34. 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 )
  35. Variabili e costanti • riferimento a un valore per riutilizzarlo

    o modificarlo nel corso del programma • aggiungono semantica al programma : nomi descrittivi • modificabili tramite assegazione
  36. 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; }
  37. 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); [...]
  38. 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; }
  39. None
  40. 4. Le strutture di controllo Elementi di programmazione

  41. 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
  42. Condizione (2) • maggiore uguale • minore uguale >= 2

    >= 1; // true 2 >= 2; // true 1 >= 2; // false <= 1 <= 2; // true 2 <= 2; // true 2 <= 1; // true
  43. Controlli condizionali Le strutture di controllo • if then else

    • switch
  44. 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
  45. Basta con le parole Esercizio: Realizzare il fade in/fade out

    con if / else Breadboard Spostare il cavo rosso sul pin 9
  46. 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); } // [.....]
  47. Controlli iterativi I cicli iterativi • for • while •

    do() while
  48. 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!
  49. Ciclo do while int i = 0; do { //

    azione } while (i < 10); simile al ciclo while semplice, ma l’azione è sempre eseguita almeno 1 volta!
  50. 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
  51. 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
  52. 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
  53. None
  54. 5. Le funzione Elementi di programmazione

  55. 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)
  56. 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
  57. 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
  58. 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
  59. 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
  60. None
  61. 6. Il monitor seriale Il tuo miglior amico

  62. 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
  63. Il monitor seriale La comunicazione seriale tra arduino e il

    pc per: • debugging, • verifica dei sensori, • stato del programma
  64. Il monitor seriale

  65. 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
  66. None
  67. 7. Creare una libreria Elementi di programmazione

  68. 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
  69. 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
  70. 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); } }
  71. 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
  72. None
  73. Linkografia Il miglior strumento è la curiostià

  74. 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
  75. 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…
  76. G R A Z I E Arduino User Group Roma

    Marco Loche - Gilles Ruppert