Esercizio P4.1

Nel circuito di figura il led blu lampeggia con un semiperiodo di 2 secondi (2 secondi acceso e 2 secondi spento), il led verde invece si accende solo quando il pulsante è premuto.

Realizzare il firmware di controllo per l'Arduino.

SUGGERIMENTO: prendere il firmware "lampeggio di un led" nella versione non blocking-mode e aggiungere alla fine del "loop" il controllo del tasto tramite un if. Se il tasto è premuto il led verde viene è acceso, se non è premuto è spento.

 

Esercizio P4.2

Prendere l'esempio "Lampeggio di due led con periodo diverso" e riscrivere il firmware usando 2 funzioni di temporizzazione come quella indicata nell'esempio "Lampeggio di un led in non-blocking mode con funzioni di temporizzazione"

SUGGERIMENTO: la porzione di firmware qui sotto riportata contiene già i 2 timer e il "setup". Scrivere il codice relativo al "loop"

#define LED1 13
#define LED2 12

// funzioni timer per il led 1
unsigned long previousMillis_led1;
unsigned long interval_led1;

void timerInit_led1(unsigned long milliseconds){
interval_led1 = milliseconds;
previousMillis_led1 = millis();
}

void timerReset_led1(void){
previousMillis_led1 = millis();
}

int timerIsEOT_led1(void){
if (millis()>=previousMillis_led1+interval_led1) return 1;
else return 0;
}

// funzioni timer per il led 2
unsigned long previousMillis_led2;
unsigned long interval_led2;

void timerInit_led2(unsigned long milliseconds){
interval_led2 = milliseconds;
previousMillis_led2 = millis();
}

void timerReset_led2(void){
previousMillis_led2 = millis();
}

int timerIsEOT_led2(void){
if (millis()>=previousMillis_led2+interval_led2) return 1;
else return 0;
}

// ledState contiene lo stato dei led
int ledState_led1;
int ledState_led2;


void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
ledState_led1 = LOW;
ledState_led2 = LOW;
digitalWrite(LED1, ledState_led1);
digitalWrite(LED2, ledState_led2);
timerInit_led1(1000);
timerInit_led2(750);
}

void loop() {

}
Esercizio P4.3

Copiare il circuito Tinkercad https://www.tinkercad.com/things/9SoQgYBR23s che realizza un dado elettronico. Modificare il firmware in modo che la temporizzazione nel loop avvenga in non-bloking mode (ovvero senza l'uso del delay() ). La temporizzazione nel setup può essere invece lasciata tramite delay().

 

Esercizio P4.4

Usando come base il circuito dell'esempio precedente, modificare il firmware in modo che compaiano in successione tutti i valori da 1 a 6 e poi ricominci da capo. Ogni valore deve restare acceso 1 secondo. Si realizzi l'algoritmo in non-blocking mode.

SUGGERIMENTO: L'algoritmo qui sotto riportato scrive in successione nel monitor seriale la successione delle 6 facce in blocking mode. 

int contatore;

void setup() {
Serial.begin(9600);
contatore = 1;
}

void loop() {
switch (contatore){
case 1: Serial.println("Faccia 1");
break;
case 2: Serial.println("Faccia 2");
break;
case 3: Serial.println("Faccia 3");
break;
case 4: Serial.println("Faccia 4");
break;
case 5: Serial.println("Faccia 5");
break;
case 6: Serial.println("Faccia 6");
break;
default:
break;
}
contatore++;
if (contatore > 6){
contatore = 1;
}
delay(1000);
}

 

Esercizio P4.5

Modificare il codice dell'esercizio precedente aggiungendo un tasto. Alla pressione del tasto il conteggio deve ricominciare. 

SUGGERIMENTO: Se si è svolto l'esercizio precedente il codice è scritto in non-blocking mode; è sufficiente quindi inserire il controllo della pressione all'inizio del loop (oppure alla fine). Se il tasto viene premuto, il contatore viene riportato a 1.

Ultime modifiche: mercoledì, 10 gennaio 2024, 18:29