ITIS “F.GIORDANI” Caserta
A.S. 2016/17
classe 3D informatica
indirizzo di studio: Informatica e Telecomunicazione – articolazione Informatica
Materia: Informatica
Programmatore: Alessandro Bonomo , Valentino Vincenzo
Sistema Operativo: Windows 10
Compilatore: Arduino
Linguaggio: Arduino
Obiettivo didattico: Uso di costrutti iterativi , selettivi , passaggio di parametri , vettori e procedure.
Obiettivo dell’ esercitazione: far comparire sul display a 7 segmenti una conta da 0 a 9 che incrementa se premuto un pulsante da telecomando a infrarossi oppure un normale bottone.
Elenco attrezzature e materiali:
1.Scheda Arduino Uno
2.resistenze 220 ohm (X7) + resistenza 1k
3. Cavi di collegamento
4.display a 7 segmenti
5.Breadboard
6.Cavo usb per collegare arduino con il pc
7.bottone
8. ricevitore a infrarossi , telecomando a infrarossi
Codice pseudolinguaggio/flowchart:
1-4 Includo librerie per usare il telecomando e il ricevitore a infrarossi.
Problemi ad includere la libreria?: http://www.maffucci.it/2015/05/10/arduino-problemi-con-la-libreria-irremote-h-come-risolverli/
7 dichiaro il prototipo della procedura ScriviNumOnDisplay , la procedura riceve un vettore bool come parametro
8 -14 dichiarazioni commentate
15-25 array che contengono sequenze binarie che rappresentano il numero su display
35 fai una sola volta
{
inizializza ricevitore
imposta i pin collegati attraverso una resistenza ad i segmenti in OUTPUT
imposta il pin collegato al bottone come INPUT
inizializza il display a 0
49 }
50 fai sempre
{
leggi stato del pulsante e assegna in statoPulsante
se pulsante del telecomando premuto o pulsante (pin 8) premuto
{
aspetta 200 millisecondi
se lo stato del display e’ 9 allora ponilo a 0
altrimenti incrementa lo stato del display
instrada la variabile statoDisplay
{
se 0 scrivi 0 su display
…
se 9 scrivi 9 su display
}
ricevi prossimo valore (ricevitore)
}
86 }
87 procedura scrivi su display (ricevo vettore bool)
{
dichiaro variabile locale segmentoLed = a(primo segmento)
fai 7 volte
{
scrivi su pin (segmentoLed,num[i])
incrementa segmentoLed
}
95 }
Codice Arduino:
{
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
/*Alessandro Bonomo 4-20-17*/
//prototipi
void scriviNumOnDisplay(int vett[]);
//variabili
int pulsante=8; //pin collegato al pulsante
bool statoPulsante; //variabile che statoDisplayiene lo stato del pulsante
int statoDisplay=0;
int receiver = 11; //pin collegato al ricevitore a infrarossi del telecomando
IRrecv irrecv(receiver);
decode_results results;
//ciascun numero è rappresentato in un vettore mediante una sequenza binaria
bool zero[7]={1,1,1,1,1,1,0};
bool uno[7]={0,1,1,0,0,0,0};
bool due[7]={1,1,0,1,1,0,1};
bool tre[7]={1,1,1,1,0,0,1};
bool quattro[7]={0,1,1,0,0,1,1};
bool cinque[7]={1,0,1,1,0,1,1};
bool sei[7]={1,0,1,1,1,1,1};
bool sette[7]={1,1,1,0,0,0,0};
bool otto[7]={1,1,1,1,1,1,1};
bool nove[7]={1,1,1,1,0,1,1};
//costanti che assorbono il nome del segmento al relativo pin
const int a=1;
const int b=2;
const int c=3;
const int d=4;
const int e=5;
const int f=6;
const int g=7;
void setup()
{
irrecv.enableIRIn(); //inizializza il ricevitore del telecomando
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(pulsante,INPUT);
scriviNumOnDisplay(zero); //inizializza il display a 0
}
void loop()
{
statoPulsante=digitalRead(pulsante);
if (irrecv.decode(&results)||statoPulsante)
{
delay(200);
if (statoDisplay==9) statoDisplay=0;
else statoDisplay++;
switch (statoDisplay)
{
case 0: scriviNumOnDisplay(zero);
break;
case 1: scriviNumOnDisplay(uno);
break;
case 2: scriviNumOnDisplay(due);
break;
case 3: scriviNumOnDisplay(tre);
break;
case 4: scriviNumOnDisplay(quattro);
break;
case 5: scriviNumOnDisplay(cinque);
break;
case 6: scriviNumOnDisplay(sei);
break;
case 7: scriviNumOnDisplay(sette);
break;
case 8: scriviNumOnDisplay(otto);
break;
case 9: scriviNumOnDisplay(nove);
break;
}
irrecv.resume();//ricevi prossimo valore
}
}
void scriviNumOnDisplay(bool num[])
{
int segmentoLed =a;
for (int i=0;i<7;i++)
{
digitalWrite(segmentoLed,num[i]);
segmentoLed++;
}
}
Schema collegamenti elettronici:
Descrizione top-down dei passi realizzativi:
- Realizzare il circuito
- Scrivere il codice arduino
- Collegare la scheda arduino al pc tramite il cavo usb
- Caricare il programma cliccando sul pulsante “carica” dell‘ambiente software arduino
Test finale:
Osservare l’ incremento della conta sul display quando si preme il normale bottone oppure
un bottone del telecomando.
Commenti recenti