ESERCIZI CON PULSANTI Vengono qui riportati due esercizi con il display a 7 segmenti led. Si voleva eseguire un conteggio da 0 a 9 e ritorno con un incremento di una unità alla volta. L esercizio è stato realizzato sia con dei pulsanti meccanici che con dei pulsanti capacitivi. /* Matteo Zuccalà Incremento e decremento tramite due pulsanti Up e Down di una sequenza di numeri da 0 a 9 su Dispaly 7 Segmenti (catodo comune) con accensione del punto di 1/2 secondo ad ogni pressione del tasto.*/
// Definizione dei pin int led0 = 1; int led1 = 2; int led2 = 3; int led3 = 4; int led4 = 5; int led5 = 6; int led6 = 7; int ledp = 8; // Segmento e // Segmento d // Segmento c // Segmento b // Segmento a // Segmento f // Segmento g // Segmento dp int buttonup = 12; int buttondown = 13; // Definizione delle variabili int led = 0; // Led da accendere void setup () { // Impostazione dei pin come uscite pinmode (led0, OUTPUT); pinmode (led1, OUTPUT); pinmode (led2, OUTPUT); pinmode (led3, OUTPUT); pinmode (led4, OUTPUT); pinmode (led5, OUTPUT); pinmode (led6, OUTPUT); pinmode (ledp, OUTPUT); // Impostazione dei pin come ingressi pinmode (buttonup, INPUT);
pinmode (buttondown, INPUT); digitalwrite (buttonup, HIGH); digitalwrite (buttondown, HIGH); //Imposto resistenza di Pull-Up interna //Imposto resistenza di Pull-Up interna void loop () { if (digitalread (buttonup) == 0){ led++; // Se il pulsante UP è premuto // Incrementa la variabile led if (led>9) { // Se la variabile supera il valore 9 led=9; // Lascia la variabile a 9 delay (500); digitalwrite (ledp, HIGH); delay(500); digitalwrite (ledp, LOW); // Pausa per antirimbalzo // Accendi il punto // per 1/2 secondo // Spegni il punto if (digitalread (buttondown) == 0){ // Se il pulsante DOWN è premuto led--; // Decrementa la variabile led if (led<0) { // Se la variabile è inferiore al valore 0 led=0; // Lascia la variabile a 0 delay (500); digitalwrite (ledp, HIGH); delay(500); digitalwrite (ledp, LOW); // Pausa per antirimbalzo // Accendi il punto // per 1/2 secondo // Spegni il punto if (led==0) { digitalwrite (led6, LOW); // Segmento e // Segmento d // Segmento c // Segmento b // Segmento a // Segmento f // Segmento g
if (led==1) { digitalwrite (led1, LOW); digitalwrite (led4, LOW); digitalwrite (led6, LOW); if (led==2) { digitalwrite (led2, LOW); if (led==3) { if (led==4) { digitalwrite (led1, LOW);
digitalwrite (led4, LOW); if (led==5) { digitalwrite (led3, LOW); if (led==6) { digitalwrite (led3, LOW); if (led==7) digitalwrite (led1, LOW); digitalwrite (led6, LOW); if (led==8) {
if (led==9) { Display 7 segmenti comandato da due pulsanti. Partendo dallo sketch che trovate alla pagina del link, modificatelo con i vostri dati (nome e cognome) aggiungendo i seguenti requisiti: 1. commenti che ne spieghino tutti i passaggi importanti. Per esempio: la riga void LedAcceso(int n) dovrebbe essere seguita da un commento che ne spieghi la funzione (a cosa serve) 2. i pin da usare per pilotare il display non devono essere quelli dello sketch di partenza ma quelli da 1 a 7. Modificate lo sketch in modo che non siano usati i pin da 8 a 13 per il display. Vanno usate le resistenze per proteggere i LED del display. 3. Lo sketch originale serve per eseguire un conteggio automatico da o a 9 con intervallo di 1 secondo. Va modificato in modo che il display mostri, all accensione, il numero 0 e tale cifra aumenti o diminuisca premendo due pulsanti. In pratica vi devono essere due pulsanti (che potremmo chiamare up e down ) che avranno il compito di variare la cifra mostrata dal display. Considerate che:
a. premendo up la cifra si incrementa di un numero fino a 9 ma, arrivato al 9, ogni successiva pressione non deve cambiare più nulla (rimane a 9) b. premendo down la cifra diminuisce di un numero fino a 0 ma, se il display mostra 0, ogni successiva pressione non deve cambiare più nulla (rimane a 0) c. ad ogni pressione di up (o down ) si deve avere un incremento (o decremento) di una unità e non di più di una. Per esempio, deve essere chiaro che premendo il tasto up la cifra deve passare da 6 a 7 e non a 8 o 9) 4. Non vi dovranno essere righe inutili (es. variabili o funzioni non necessarie al funzionamento del circuito), neppure quello per un eventuale debug (test del funzionamento degli script) 5. per la valutazione si considereranno i seguenti parametri: a. il circuito funzionante varrà 60 punti. Per la sufficienza, il requisito del corretto funzionamento (come da indicazioni al punto 3) e la corretta piedinatura (come da indicazioni al punto 2), sono condizione necessaria. b. a patto che il circuito sia funzionante, verranno aggiunti da 0 a 15 punti se saranno aggiunti commenti precisi e chiari nei passaggi fondamentali (vedi esempio al punto 1) e se verranno seguite le indicazioni al punto 4. c. a patto che il circuito sia funzionante, verranno aggiunti altri 10 punti se, ad ogni pressione di uno dei due pulsanti si accenderà, per ½ secondo, il puntino del display. In questo caso siete autorizzati ad usare il pin 8 per comandarlo. d. a patto che il circuito sia funzionante,i rimanenti 15 punti saranno aggiunti se, al posto di usare due pulsanti fisici, userete due pulsanti touch come quello sperimentato nel precedente compito. Riportate qui di seguito il vostro sketch completo di eventuali commenti: in classe mostrerete il circuito funzionante durante la lezione del 7 Gennaio. Non allegate altri file ma usate SOLO questo documento. Buon lavoro e buone feste. VOSTRO SKETCH: /* Matteo Zuccalà Incremento e decremento tramite due sensori capacitivi Up e Down di una sequenza di numeri da 0 a 9 su Dispaly 7 Segmenti (catodo comune) con accensione del punto di 1/2 secondo ad ogni pressione del tasto.*/ #include <CapacitiveSensor.h> // Definizione dei pin int led0 = 1; // Segmento e
int led1 = 2; int led2 = 3; int led3 = 4; int led4 = 5; int led5 = 6; int led6 = 7; int ledp = 8; // Segmento d // Segmento c // Segmento b // Segmento a // Segmento f // Segmento g // Segmento dp // Definizione delle variabili int led = 0; // Led da accendere CapacitiveSensor cs_11_12 = CapacitiveSensor(11,12); CapacitiveSensor cs_11_13 = CapacitiveSensor(11,13); void setup () { // Impostazione dei pin come uscite pinmode (led0, OUTPUT); pinmode (led1, OUTPUT); pinmode (led2, OUTPUT); pinmode (led3, OUTPUT); pinmode (led4, OUTPUT); pinmode (led5, OUTPUT); pinmode (led6, OUTPUT); pinmode (ledp, OUTPUT); // Impostazione dei pin come ingressi cs_11_12.set_cs_autocal_millis(0xffffffff); void loop () {
long total1 = cs_11_12.capacitivesensor(30); long total2 = cs_11_13.capacitivesensor(30); if (total1>100) { led++; // Se il pulsante UP è premuto // Incrementa la variabile led if (led>9) { // Se la variabile supera il valore 9 led=9; // Lascia la variabile a 9 delay (500); digitalwrite (ledp, HIGH); delay(500); digitalwrite (ledp, LOW); // Pausa per antirimbalzo // Accendi il punto // per 1/2 secondo // Spegni il punto if (total2>100) { led--; // Se il pulsante DOWN è premuto // Decrementa la variabile led if (led<0) { // Se la variabile è inferiore al valore 0 led=0; // Lascia la variabile a 0 delay (500); digitalwrite (ledp, HIGH); delay(500); digitalwrite (ledp, LOW); // Pausa per antirimbalzo // Accendi il punto // per 1/2 secondo // Spegni il punto if (led==0) { digitalwrite (led6, LOW); // Segmento e // Segmento d // Segmento c // Segmento b // Segmento a // Segmento f // Segmento g
if (led==1) { digitalwrite (led1, LOW); digitalwrite (led4, LOW); digitalwrite (led6, LOW); if (led==2) { digitalwrite (led2, LOW); if (led==3) { if (led==4) { digitalwrite (led1, LOW); digitalwrite (led4, LOW);
if (led==5) { digitalwrite (led3, LOW); if (led==6) { digitalwrite (led3, LOW); if (led==7) { digitalwrite (led1, LOW); digitalwrite (led6, LOW); if (led==8) {
if (led==9) {