Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Lezione Terza Primi passi di programmazione
Arduino Lezione Terza Primi passi di programmazione Prof. Ponte Vincenzo
2
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
3
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
4
accendere e spegnere un led con un pulsante
void setup() { // inizializza il pin del LED come uscita digitale: pinMode(LED, OUTPUT); pinMode(Button, INPUT); // ìnizializza i l pin del pulsante come ingresso digitalWrite(LED, HIGH); // accendo il LED per testarlo delay(1000); // per 1 secondo digitalWrite(LED, LOW); // spengo il LED }
5
accendere e spegnere un led con un pulsante
void loop() { // Legge Io stato del pulsante : Button_State = digitalRead(Button); delay(200); // attendo 200 msec per problemi di antirimbalzo. if (Button_State ==HIGH) { if (I==1) { digitalWrite(LED, HIGH); // Accendo il LED I=0; } else { digitalWrite(LED, LOW); // Spengo il LED I=1; } }
6
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
7
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.
8
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.
9
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
10
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 statoButton = 0; // stato del pulsante (inizialmente // non premuto) int lastStatoButton = 0; // ultimo stato del pulsante (per //ora non premuto) int countButton = 0; // Conteggio del bottone
11
switch … case: esempio // Avvio dell'applicazione void setup() {
pinMode(LED, OUTPUT); // imposta il pin digitale //come output pinMode(BUTTON, INPUT); // imposta il pin digitale //come input }
12
switch … case: esempio // Avvio del loop void loop()
{ // Verifico se l'utente ha premuto il bottone statoButton=digitalRead(BUTTON); // Aspetto 200 ms per far alzare il dito all'utente delay(200); if(statoButton==HIGH) { // Cambio l'ultimo stato del bottone if (lastStatoButton==0) lastStatoButton=1; else lastStatoButton=0; // Aumento il count del bottone if (countButton<=3) countButton=countButton+1; else countButton=0; }
13
switch … case: esempio // In base allo stato del bottone scelgo l'azione del led switch (countButton) { // Led lampeggia ogni mezzo secondo case 1: digitalWrite(LED, HIGH); // accende il LED delay(500); // aspetta ½ secondo digitalWrite(LED, LOW); // spegne il LED break;
14
switch … case: esempio // Led lampeggia ogni secondo case 2:
digitalWrite(LED, HIGH); // accende il LED delay(1000); // aspetta un secondo digitalWrite(LED, LOW); // spegne il LED delay(1000); // aspettaun secondo break;
15
switch … case: esempio // led lampeggia ogni secondo e mezzo case 3:
digitalWrite(LED, HIGH); // accende il LED delay(1500); // aspetta un secondo ½ digitalWrite(LED, LOW); // spegne il LED break;
16
switch … case: esempio // Led si spegne case 0:
digitalWrite(LED, LOW); delay(500); // aspetta 1/2 secondo break; }
17
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
18
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() { pinMode (rosso, OUTPUT); pinMode (verde, OUTPUT); } void loop() { for (x = 0 ; x < 10; x++) { digitalWrite (rosso, HIGH); //accende il LED rosso e lammpeggia per 10 volte delay (t) ; digitalWrite (rosso, LOW); delay (t); } for (x = 0 ; x < 10; x++){ digitalWrite (verde, HIGH); //accende il LED verde e lampeggia per 10 volte delay (t); digitalWrite (verde, LOW); delay (t); } }
19
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.
20
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 pin2 /*Dichiarazione della variabile che legge lo stato del pulsante*/ int Button_State = 0; int I=1; //variabile che memorizza la sequenza del pulsante
21
while (finché) esempio: giochi di luce con pulsante
void setup() { // inizializza i pin dei LED come uscita digitale pinMode(LEDR, OUTPUT); pinMode(LEDV, OUTPUT); pinMode(LEDG, OUTPUT); pinMode(Button, INPUT); // ìnizializza i l pin del pulsante come ingresso digitalWrite(LEDV, HIGH); // accendo il LED Verde per testarlo delay(1000); digitalWrite(LEDV, LOW); // spengo il LED digitalWrite(LEDR, HIGH); // accendo il LED Rosso per testarlo digitalWrite(LEDR, LOW); // spengo il LED digitalWrite(LEDG, HIGH); // accendo il LED Giallo per testarlo }
22
while (finché) esempio: giochi di luce con pulsante
void loop() { // Legge Io stato del pulsante : Button_State = digitalRead(Button);// a differenza dell’If l’antirimbalzo non influisce while (Button_State ==HIGH) { digitalWrite(LEDG, LOW); // spengo il LEDG if (I==1) { digitalWrite(LEDV, HIGH); // Accendo il LED delay(500); digitalWrite(LEDV, LOW); // spengo il LED I=0; }
23
while (finché) esempio: giochi di luce con pulsante
else { digitalWrite(LEDR, HIGH); // Accendo il LED Rosso delay(1000); digitalWrite(LEDR, LOW); // spengo il LED delay(500); digitalWrite(LEDR, HIGH); // Accendo il LED I=1; } Button_State = digitalRead(Button);} //leggo lo stato del pulsante digitalWrite(LEDG, HIGH); // accendo il LED Giallo (nessun gioco) }
24
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.
25
do ... while (finchè) Struttura: do
{ ..codice da ripetere fino a quando la condizione di while risulta vera.. } while ( ..condizione.. );
26
Esercitazioni 1) Provare a realizzare il gioco di luce con il ciclo do…while 2) Realizzare gioco di luci con lo switch…case e con il ciclo for…
27
Fine terza parte Buon lavoro e buon divertimento Prof. Ponte Vincenzo
Prof. Ovazza Sergio
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.