Arduino Lezione Terza Primi passi di programmazione Prof

  • Slides: 27
Download presentation
Arduino Lezione Terza Primi passi di programmazione Prof. Ponte Vincenzo

Arduino Lezione Terza Primi passi di programmazione Prof. Ponte Vincenzo

Controllo di flusso (IF … ELSE) Se l’espressione contenuta all’interno delle Parentesi tonde è

Controllo di flusso (IF … ELSE) Se l’espressione contenuta all’interno delle Parentesi tonde è vera, viene eseguito il codice di programma che segue. Se l’espressione è falsa vengono eseguite le righe di codice subito dopo l’istruzione else. Esempio: accendere e spegnere un led con un pulsante

accendere e spegnere un led con un pulsante int LED = 6; // LED

accendere e spegnere un led con un pulsante int LED = 6; // LED connesso al pin digitale 6 int Button =2; // pulsante connesso al pin 2 /*Dichiarazione della variabile che legge lo stato del pulsante*/ int Button_State = 0; int I=0; //variabile che memorizza lo stato del Led 0=Off

accendere e spegnere un led con un pulsante void setup() { // inizializza il

accendere e spegnere un led con un pulsante void setup() { // inizializza il pin del LED come uscita digitale: pin. Mode(LED, OUTPUT); pin. Mode(Button, INPUT); // ìnizializza i l pin del pulsante come ingresso digital. Write(LED, HIGH); // accendo il LED per testarlo delay(1000); // per 1 secondo digital. Write(LED, LOW); // spengo il LED }

accendere e spegnere un led con un pulsante void loop() { // Legge Io

accendere e spegnere un led con un pulsante void loop() { // Legge Io stato del pulsante : Button_State = digital. Read(Button); delay(200); // attendo 200 msec per problemi di antirimbalzo. if (Button_State ==HIGH) { if (I==1) { digital. Write(LED, HIGH); // Accendo il LED I=0; } else { digital. Write(LED, LOW); // Spengo il LED I=1; } } }

switch … case Questo costrutto ha una logica di funzionamento simile a if …

switch … case Questo costrutto ha una logica di funzionamento simile a if … else, ma la sintassi è differente: per prima cosa viene dichiarata tra parentesi una variabile, poi all’interno delle parentesi graffe viene creato un blocco case per ogni valore della variabile da considerare: switch (variabile) { case 1: // istruzioni da eseguire quando la variabile assume valore 1 break; case 2: // istruzioni da eseguire quando // la variabile assume valore 2 break;

switch … case default: // istruzioni da eseguire quando la variabile non assume nessuno

switch … case default: // istruzioni da eseguire quando la variabile non assume nessuno dei valori previsti } L’istruzione break al termine di ogni alternativa interrompe l’esecuzione delle istruzioni, uscendo dal costrutto switch.

switch … case L’ultimo blocco, identificato dalla parola chiave default, viene eseguito quando nessuna

switch … case L’ultimo blocco, identificato dalla parola chiave default, viene eseguito quando nessuna delle condizioni case si verifica. È analogo al blocco else dopo la condizione if. Come else, può essere omesso quando non necessario.

switch … case: esempio Realizzare un programma che conta quante volte il pulsante viene

switch … case: esempio Realizzare un programma che conta quante volte il pulsante viene premuto, per un ciclo di 4 pressioni, alla quinta pressione il led lampeggia una volta e poi si riavvia il ciclo. Prima pressione: led lampeggia ogni mezzo secondo Seconda pressione: led lampeggia ogni secondo Terza pressione: led lampeggia ogni secondo e mezzo Quarta pressione: led si spegne

switch … case: esempio int BUTTON = 2; // pin di input a cui

switch … case: esempio int BUTTON = 2; // pin di input a cui è collegato il // pulsante int LED = 13; // LED collegato al pin digitale 13 // Variabili globali (tutti interi) int stato. Button = 0; // stato del pulsante (inizialmente // non premuto) int last. Stato. Button = 0; // ultimo stato del pulsante (per //ora non premuto) int count. Button = 0; // Conteggio del bottone

switch … case: esempio // Avvio dell'applicazione void setup() { pin. Mode(LED, OUTPUT); //

switch … case: esempio // Avvio dell'applicazione void setup() { pin. Mode(LED, OUTPUT); // imposta il pin digitale //come output pin. Mode(BUTTON, INPUT); // imposta il pin digitale //come input }

switch … case: esempio // Avvio del loop void loop() { // Verifico se

switch … case: esempio // Avvio del loop void loop() { // Verifico se l'utente ha premuto il bottone stato. Button=digital. Read(BUTTON); // Aspetto 200 ms per far alzare il dito all'utente delay(200); if(stato. Button==HIGH) { // Cambio l'ultimo stato del bottone if (last. Stato. Button==0) last. Stato. Button=1; else last. Stato. Button=0; // Aumento il count del bottone if (count. Button<=3) count. Button=count. Button+1; else count. Button=0; }

switch … case: esempio // In base allo stato del bottone scelgo l'azione del

switch … case: esempio // In base allo stato del bottone scelgo l'azione del led switch (count. Button) { // Led lampeggia ogni mezzo secondo case 1: digital. Write(LED, HIGH); // accende il LED delay(500); // aspetta ½ secondo digital. Write(LED, LOW); // spegne il LED delay(500); // aspetta ½ secondo break;

switch … case: esempio // Led lampeggia ogni secondo case 2: digital. Write(LED, HIGH);

switch … case: esempio // Led lampeggia ogni secondo case 2: digital. Write(LED, HIGH); // accende il LED delay(1000); // aspetta un secondo digital. Write(LED, LOW); // spegne il LED delay(1000); // aspettaun secondo break;

switch … case: esempio // led lampeggia ogni secondo e mezzo case 3: digital.

switch … case: esempio // led lampeggia ogni secondo e mezzo case 3: digital. Write(LED, HIGH); // accende il LED delay(1500); // aspetta un secondo ½ digital. Write(LED, LOW); // spegne il LED delay(1500); // aspetta un secondo ½ break;

switch … case: esempio // Led si spegne case 0: digital. Write(LED, LOW); delay(500);

switch … case: esempio // Led si spegne case 0: digital. Write(LED, LOW); delay(500); // aspetta 1/2 secondo break; } }

for (ciclo) Serve per ripetere un blocco di istruzioni racchiuso tra le parentesi graffe

for (ciclo) Serve per ripetere un blocco di istruzioni racchiuso tra le parentesi graffe per un numero specificato di volte. Una variabile utilizzata come contatore viene incrementata normalmente di una unità e confrontata per determinare la fine del ciclo. Nell’espressione “for” ci sono tre parti, separate da punto e virgola “; ”. for(int i=0; i<7; i++) // ciclo di ripetizione per 8 differenti valori dell’array

for (ciclo): esempio Far lampeggiare 10 volte il LED rosso e 10 volte il

for (ciclo): esempio Far lampeggiare 10 volte il LED rosso e 10 volte il LED verde #define rosso 11 //piedino 11 LED rosso #define verde 12 //piedino 12 LED verde int t = 200; //tempo di accensione dei LED int x = 0 ; //conteggio ciclo void setup() { pin. Mode (rosso, OUTPUT); pin. Mode (verde, OUTPUT); } void loop() { for (x = 0 ; x < 10; x++) { digital. Write (rosso, HIGH); //accende il LED rosso e lammpeggia per 10 volte delay (t) ; digital. Write (rosso, LOW); delay (t); } for (x = 0 ; x < 10; x++){ digital. Write (verde, HIGH); //accende il LED verde e lampeggia per 10 volte delay (t); digital. Write (verde, LOW); delay (t); } }

while (finchè) Il ciclo while richiede nella dichiarazione iniziale solo la condizione da verificare:

while (finchè) Il ciclo while richiede nella dichiarazione iniziale solo la condizione da verificare: while (condizione) { // istruzioni da ripetere ciclicamente // se la condizione è verificata } A differenza del ciclo for è necessario modificare manualmente all’interno del ciclo il valore della variabile utilizzata per la condizione iniziale.

while (finché) esempio: giochi di luce con pulsante // Giochi di luci con 1

while (finché) esempio: giochi di luce con pulsante // Giochi di luci con 1 pulsante int LEDR = 6; // LED Rosso connesso al pin digitale 6 int LEDV=7; // LED Verde connesso al pin digitale 7 int LEDG=8; // LED Giallo connesso al pin digitale 8 int Button =2; // pulsante connesso al pin 2 /*Dichiarazione della variabile che legge lo stato del pulsante*/ int Button_State = 0; int I=1; //variabile che memorizza la sequenza del pulsante

while (finché) esempio: giochi di luce con pulsante void setup() { // inizializza i

while (finché) esempio: giochi di luce con pulsante void setup() { // inizializza i pin dei LED come uscita digitale pin. Mode(LEDR, OUTPUT); pin. Mode(LEDV, OUTPUT); pin. Mode(LEDG, OUTPUT); pin. Mode(Button, INPUT); // ìnizializza i l pin del pulsante come ingresso digital. Write(LEDV, HIGH); // accendo il LED Verde per testarlo delay(1000); digital. Write(LEDV, LOW); // spengo il LED digital. Write(LEDR, HIGH); // accendo il LED Rosso per testarlo delay(1000); digital. Write(LEDR, LOW); // spengo il LED digital. Write(LEDG, HIGH); // accendo il LED Giallo per testarlo }

while (finché) esempio: giochi di luce con pulsante void loop() { // Legge Io

while (finché) esempio: giochi di luce con pulsante void loop() { // Legge Io stato del pulsante : Button_State = digital. Read(Button); // a differenza dell’If l’antirimbalzo non influisce while (Button_State ==HIGH) { digital. Write(LEDG, LOW); // spengo il LEDG if (I==1) { digital. Write(LEDV, HIGH); // Accendo il LED delay(500); digital. Write(LEDV, LOW); // spengo il LED delay(500); I=0; }

while (finché) esempio: giochi di luce con pulsante else { digital. Write(LEDR, HIGH); //

while (finché) esempio: giochi di luce con pulsante else { digital. Write(LEDR, HIGH); // Accendo il LED Rosso delay(1000); digital. Write(LEDR, LOW); // spengo il LED delay(500); digital. Write(LEDR, HIGH); // Accendo il LED delay(1000); digital. Write(LEDR, LOW); // spengo il LED delay(500); I=1; } Button_State = digital. Read(Button); } //leggo lo stato del pulsante digital. Write(LEDG, HIGH); // accendo il LED Giallo (nessun gioco) }

do. . . while (finchè) L’istruzione “do. . . while” è un ciclo (loop)

do. . . while (finchè) L’istruzione “do. . . while” è un ciclo (loop) di ripetizione che funziona nello stesso modo come il ciclo “while”, con l'eccezione che la condizione viene verificata alla fine del ciclo, in modo che l’istruzione “do. . . while” verrà sempre eseguita almeno una volta.

do. . . while (finchè) Struttura: do {. . codice da ripetere fino a

do. . . while (finchè) Struttura: do {. . codice da ripetere fino a quando la condizione di while risulta vera. . } while (. . condizione. . );

Esercitazioni 1) 1) Provare a realizzare il gioco di luce con il ciclo do…while

Esercitazioni 1) 1) Provare a realizzare il gioco di luce con il ciclo do…while 2) Realizzare gioco di luci con lo switch…case 2) e con il ciclo for…

Fine terza parte Buon lavoro e buon divertimento Prof. Ponte Vincenzo Prof. Ovazza Sergio

Fine terza parte Buon lavoro e buon divertimento Prof. Ponte Vincenzo Prof. Ovazza Sergio