ESERCIZI CON PULSANTI - WordPress.com · ESERCIZI CON PULSANTI Vengono qui riportati due esercizi...
Transcript of ESERCIZI CON PULSANTI - WordPress.com · ESERCIZI CON PULSANTI Vengono qui riportati due esercizi...
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; // Segmento e
int led1 = 2; // Segmento d
int led2 = 3; // Segmento c
int led3 = 4; // Segmento b
int led4 = 5; // Segmento a
int led5 = 6; // Segmento f
int led6 = 7; // Segmento g
int ledp = 8; // 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); //Imposto resistenza di Pull-Up interna
digitalWrite (buttonDown, HIGH); //Imposto resistenza di Pull-Up interna
}
void loop () {
if (digitalRead (buttonUp) == 0){ // Se il pulsante UP è premuto
led++; // Incrementa la variabile led
if (led>9) { // Se la variabile supera il valore 9
led=9; // Lascia la variabile a 9
}
delay (500); // Pausa per antirimbalzo
digitalWrite (ledp, HIGH); // Accendi il punto
delay(500); // per 1/2 secondo
digitalWrite (ledp, LOW); // 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); // Pausa per antirimbalzo
digitalWrite (ledp, HIGH); // Accendi il punto
delay(500); // per 1/2 secondo
digitalWrite (ledp, LOW); // Spegni il punto
}
if (led==0) {
digitalWrite (led0, HIGH); // Segmento e
digitalWrite (led1, HIGH); // Segmento d
digitalWrite (led2, HIGH); // Segmento c
digitalWrite (led3, HIGH); // Segmento b
digitalWrite (led4, HIGH); // Segmento a
digitalWrite (led5, HIGH); // Segmento f
digitalWrite (led6, LOW); // Segmento g
}
if (led==1) {
digitalWrite (led0, LOW);
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, LOW);
digitalWrite (led5, LOW);
digitalWrite (led6, LOW);
}
if (led==2) {
digitalWrite (led0, HIGH);
digitalWrite (led1, HIGH);
digitalWrite (led2, LOW);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, LOW);
digitalWrite (led6, HIGH);
}
if (led==3) {
digitalWrite (led0, LOW);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, LOW);
digitalWrite (led6, HIGH);
}
if (led==4) {
digitalWrite (led0, LOW);
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, LOW);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
}
if (led==5) {
digitalWrite (led0, LOW);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, LOW);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
}
if (led==6) {
digitalWrite (led0, HIGH);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, LOW);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
}
if (led==7)
digitalWrite (led0, LOW);
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, LOW);
digitalWrite (led6, LOW);
}
if (led==8) {
digitalWrite (led0, HIGH);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
} if (led==9) {
digitalWrite (led0, LOW);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
}
}
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; // Segmento d
int led2 = 3; // Segmento c
int led3 = 4; // Segmento b
int led4 = 5; // Segmento a
int led5 = 6; // Segmento f
int led6 = 7; // Segmento g
int ledp = 8; // 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) { // Se il pulsante UP è premuto
led++; // Incrementa la variabile led
if (led>9) { // Se la variabile supera il valore 9
led=9; // Lascia la variabile a 9
}
delay (500); // Pausa per antirimbalzo
digitalWrite (ledp, HIGH); // Accendi il punto
delay(500); // per 1/2 secondo
digitalWrite (ledp, LOW); // Spegni il punto
}
if (total2>100) { // 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); // Pausa per antirimbalzo
digitalWrite (ledp, HIGH); // Accendi il punto
delay(500); // per 1/2 secondo
digitalWrite (ledp, LOW); // Spegni il punto
}
if (led==0) {
digitalWrite (led0, HIGH); // Segmento e
digitalWrite (led1, HIGH); // Segmento d
digitalWrite (led2, HIGH); // Segmento c
digitalWrite (led3, HIGH); // Segmento b
digitalWrite (led4, HIGH); // Segmento a
digitalWrite (led5, HIGH); // Segmento f
digitalWrite (led6, LOW); // Segmento g
}
if (led==1) {
digitalWrite (led0, LOW);
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, LOW);
digitalWrite (led5, LOW);
digitalWrite (led6, LOW);
}
if (led==2) {
digitalWrite (led0, HIGH);
digitalWrite (led1, HIGH);
digitalWrite (led2, LOW);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, LOW);
digitalWrite (led6, HIGH);
}
if (led==3) {
digitalWrite (led0, LOW);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, LOW);
digitalWrite (led6, HIGH);
}
if (led==4) {
digitalWrite (led0, LOW);
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, LOW);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
}
if (led==5) {
digitalWrite (led0, LOW);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, LOW);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
}
if (led==6) {
digitalWrite (led0, HIGH);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, LOW);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
}
if (led==7) {
digitalWrite (led0, LOW);
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, LOW);
digitalWrite (led6, LOW);
}
if (led==8) {
digitalWrite (led0, HIGH);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
} if (led==9) {
digitalWrite (led0, LOW);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
}
}