Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una...

73
Arduino - II parte Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Transcript of Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una...

Page 1: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Arduino - II parte

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 2: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esercizio: simulazione di un semplice sistema di controllo

Un certo impianto viene acceso e spento manualmente tramite un interruttore.

Inoltre,passando da spento ad acceso si deve immaginare una fase di

riscaldamento iniziale.

Durante il funzionamento si puo’ poi verificare una qualche situazione anomala

(per esempio surriscaldamento) che deve provocare uno spegnimento

automatico.

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 3: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esercizio: una simulazione (2)

Simuliamo lo stato spento o acceso con due LED:

• Led Verde acceso: impianto spento (in attesa);

• Led Rosso acceso: impianto acceso;

• Led Verde lampeggiante: fase di preriscaldamento;

• Led Rosso lampeggiante: fase di spegnimento per allarme.

(Simuliamo la situazione di allarme come un pulsante che viene premuto in

modo asincrono)

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 4: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esercizio: una simulazione (3)

Diagramma degli stati:

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 5: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Prima soluzione - Codice (1)

/∗ 4 p o s s i b i l i s t a t i 0=spento , 1= r iscaldamento , 2=acceso , 3=al la rme ∗ /i n t ledVerde = 8;i n t ledRosso = 9;i n t swi tchPin = 2;i n t swi tchVal = 0 ;v o l a t i l e i n t s t a t e = 0;vo id setup ( ) {

/ / put your setup code here , to run once :S e r i a l . begin (9600) ;pinMode ( ledVerde , OUTPUT) ;pinMode ( ledRosso , OUTPUT) ;pinMode (2 , INPUT_PULLUP ) ; / / p in d i accensione e spegnimentopinMode (3 , INPUT_PULLUP ) ; / / p in d i a l la rme ( i n t e r r u p t )a t t a c h I n t e r r u p t (1 , al larme , FALLING ) ;S e r i a l . p r i n t ( " Stato a t t u a l e " ) ;S e r i a l . p r i n t l n ( s t a t e ) ;}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 6: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Prima soluzione - Codice (2)

vo id loop ( ) {swi tchVal = d ig i t a lRead ( swi tchPin ) ;

swi tch ( s t a te ) {case 0: {

d i g i t a l W r i t e ( ledVerde , HIGH ) ;d i g i t a l W r i t e ( ledRosso , LOW) ;i f ( swi tchVal == 1) s ta te =1;

break ; }case 1: {

f l a s h ( ledVerde , 5 , 1000) ;s t a t e = 2;break ; }case 2: {

d i g i t a l W r i t e ( ledVerde , LOW) ;d i g i t a l W r i t e ( ledRosso , HIGH ) ;

i f ( swi tchVal == 0) s ta te =0;break ; }

case 3: {f l a s h ( ledRosso , 10 , 500) ;s t a t e = 0;break ;

}}

}Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 7: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Prima soluzione - Codice (3)

vo id a l la rme ( ){

S e r i a l . p r i n t ( " I n t e r r u p t : Stato a t t u a l e " ) ;S e r i a l . p r i n t l n ( s t a t e ) ;

s t a t e = 3;}vo id f l a s h ( i n t pin , i n t number , i n t leng ){

i n t i = 0 ;f o r ( i = 0 ; i < 5 ; i ++){

d i g i t a l W r i t e ( pin , HIGH ) ;delay ( leng ) ;d i g i t a l W r i t e ( pin , LOW) ;delay ( leng ) ;

}

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 8: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Commenti

Questa soluzione e’ sbagliata! Dove sta l’errore?

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 9: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Commenti

Questa soluzione e’ sbagliata! Dove sta l’errore?

In caso di allarme il sistema si spegne, ma poi legge il pin 2, lo trova HIGH e si

riaccende.

Possibili soluzioni:

• Introdurre un ulteriore stato (4) in cui si va dopo l’allarme e da cui si esce

solo con reset manuale;

• Accensione e spegnimento tramite pulsante (toggle) (tramite interrupt o in

altro modo).

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 10: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Diagramma modificato

Diagramma degli stati:

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 11: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Soluzione con interrupt - Codice (1)

/∗ 4 p o s s i b i l i s t a t i 0=spento , 1= r iscaldamento , 2=acceso , 3=al la rme ∗ /i n t ledVerde = 8;i n t ledRosso = 9;v o l a t i l e i n t s t a t e = 0;vo id setup ( ) {S e r i a l . begin (9600) ;pinMode ( ledVerde , OUTPUT) ;pinMode ( ledRosso , OUTPUT) ;pinMode (2 , INPUT_PULLUP ) ; / / p in d i accensione e spegnimentopinMode (3 , INPUT_PULLUP ) ; / / p in d i a l la rmea t t a c h I n t e r r u p t (0 , comando , FALLING ) ;a t t a c h I n t e r r u p t (1 , al larme , FALLING ) ;S e r i a l . p r i n t ( " Stato a t t u a l e " ) ;S e r i a l . p r i n t l n ( s t a t e ) ;}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 12: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Soluzione con interrupt - Codice (2)

vo id loop ( ) {/ / put your main code here , to run repeated ly :

swi tch ( s t a te ) {case 0: {

d i g i t a l W r i t e ( ledVerde , HIGH ) ;d i g i t a l W r i t e ( ledRosso , LOW) ;

break ; }case 1: {

f l a s h ( ledVerde , 5 , 1000) ;s t a t e = 2;break ; }case 2: {

d i g i t a l W r i t e ( ledVerde , LOW) ;d i g i t a l W r i t e ( ledRosso , HIGH ) ;

break ; }case 3: {

f l a s h ( ledRosso , 10 , 500) ;s t a t e = 0;break ;

}}

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 13: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Soluzione con interrupt - Codice (3)

vo id comando ( ){

i f ( s t a t e == 0) { s t a t e = 1 ; }e lse i f ( s t a t e == 2 ) { s t a t e = 0 ; }

}vo id a l la rme ( ){

s t a t e = 3;}vo id f l a s h ( i n t pin , i n t number , i n t leng ){

i n t i = 0 ;f o r ( i = 0 ; i < 5 ; i ++){

d i g i t a l W r i t e ( pin , HIGH ) ;delay ( leng ) ;d i g i t a l W r i t e ( pin , LOW) ;delay ( leng ) ;

}

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 14: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Timing

Ci sono varie funzioni legate al timing

• delay();

• delayMicroseconds();

• millis()

• micros()

Le funzioni millis() e micros() consentono di misurare intervalli di tempo

(per esempio per misurare la velocita’ di esecuzione di una istruzione)

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 15: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esempio

i n t imax = 1000;f l o a t t e s t = 752.32;f l o a t t es t2 ;unsigned long i s t a r t ;unsigned long i s t o p ;unsigned long d i f f ;vo id setup ( ) {S e r i a l . begin (9600) ;S e r i a l . p r i n t l n ( " INIZIO " ) ;}vo id loop ( ) {S e r i a l . p r i n t ( " Time s t a r t stop d i f f " ) ;i s t a r t = micros ( ) ;f o r ( i n t i =0; i < imax ; i ++) { t es t2 = s q r t ( t e s t ) ; }i s t o p = micros ( ) ;d i f f = i s t o p − i s t a r t ;S e r i a l . p r i n t ( i s t a r t ) ;S e r i a l . p r i n t ( " " ) ;S e r i a l . p r i n t ( i s t o p ) ;S e r i a l . p r i n t ( " " ) ;S e r i a l . p r i n t l n ( d i f f ) ;delay (2000) ;}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 16: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Alcune cose da NON fare con Arduino

La scheda (e il µC) non sono completamente protetti contro errori che possono

danneggiare irreparabilmente l’hardware. Esempi:

• Mettere a massa un pin di I/O (quando usato come output);

• Mettere in corto tra loro due pin di I/O;

• Applicare sovratensioni ai pin di I/O;

• Applicare tensioni negative ai pin di I/O;

• Applicare tensioni ai pin 5 V o 3.3 V ;

• Mettere a massa il pin Vin;

• Superare la corrente massima dei pin di I/O (40 mA);

• Superare la corrente massima totale (200 mA);

• ...

• ...

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 17: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Operazioni logiche e operazioni sui bit

Operazioni logiche:

i f ( a == b && c == d ) / / AND LOGICO{

/ / . . . .}

i f ( x > 0 | | y > 0) / / OR LOGICO{

/ / . . .}

i f ( ! x ) / /NOT LOGICO{

/ / . . .}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 18: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Operazioni logiche e operazioni sui bit

Operazioni sui bit:

i n t a = 92;i n t b = 101;i n t c = a & b ; / / AND b i t per b i t de i due operandi

i n t a = 92;i n t b = 101;i n t c = a | b ; / / OR b i t per b i t de i due operandi

i n t a = 92;i n t b = 101;i n t c = a ^ b ; / / XOR b i t per b i t de i due operandi

i n t a = 103;i n t b = ~a ; / / NOT b i t per b i t

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 19: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Spostamenti di bit

i n t a = 5; / /i n t b = a << 3; / / spostamento a s i n i s t r a d i 3 p o s t i

i n t a = 5; / /i n t c = a >> 4; / / spostamento a dest ra d i 4 p o s t i

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 20: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

I canali di Input/Output

I canali di I/O del µC sono organizzati in gruppi di 8 (tecnicamente ports):

PORTB, PORTC, PORTD

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 21: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Ports

Ordinamento:

Bit PORTB PORTC PORT D

0 D I/O 8 A 0 D I/O 0

1 D I/O 9 A 1 D I/O 1

2 D I/O 10 A 2 D I/O 2

3 D I/O 11 A 3 D I/O 3

4 D I/O 12 A 4 D I/O 4

5 D I/O 13 A 5 D I/O 5

6 (crystal) (reset) D I/O 6

7 (crystal) / D I/O 7

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 22: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Ports

Ad ogni port sono associati 3 registri da 8 bit

PORT REGISTER

B

DDRB Data Direction Register Read/Write

PORTB Data Register Read/Write

PINB Input Pin Register Read only

C

DDRC Data Direction Register Read/Write

PORTC Data Register Read/Write

PINC Input Pin Register Read only

D

DDRB Data Direction Register Read/Write

PORTD Data Register Read/Write

PIND Input Pin Register Read only

Il programma puo’ accedere e manipolare direttamente questi registri.

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 23: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esempi:

DDRD = B11110000 ; / / De f in i sce i p in 0 ,1 ,2 ,3 come i npu t/ / e i p in 4 ,5 ,6 ,7 come output

DDRD = DDRD | B11111100 ; / / De f in i sce i p in 2 ,3 ,4 ,5 ,6 ,7 come output/ / senza a l t e r a r e i p in 0 ,1

DDRD = DDRD & B00000011 ; / / De f in i sce i p in 2 ,3 ,4 ,5 ,6 ,7 come i npu t/ / senza a l t e r a r e i p in 0 ,1

PORTD = B10101000 ; / / sets d i g i t a l p ins 7 ,5 ,3 HIGH

byte A;A = PIND ; / / Legge i n A g l i 8 p in d i Inpu t 0 − 7;

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 24: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Vantaggi

L’uso diretto dei registri consente di fare in modo molto piu’ veloce le

manipolazioni dei canali di I/O.Esempio:

vo id setup ( ){

i n t p in ;f o r ( p in =0; p in <= 7; ++p in ) {

pinMode ( pin , OUTPUT) ;}

}

Richiede un grandissimo numero di cicli di clock (e molta memoria). Lo stessorisultato puo’ essere ottenuto con una sola istruzione:

PORTD = B11111111 ; / /

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 25: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Altro esempio

Generare onde rettangolari alla massima frequenza possibile:Esempio:

vo id setup ( ){

DDRD = B11111111 ; / / se t PORTD ( d i g i t a l 7~0) to outputs}

vo id loop ( ){

PORTD = B11111111 ;PORTD = B00000000 ;

}

Notare che non si ottiene un’onda quadra, perche’ il µC impiega del tempo extra

per tornare all’inizio del loop.

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 26: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Cautele

Bisogna fare attenzione a non toccare bit che possono svolgere altre funzioni!

Per esempio, i pin digitali 0 e 1 sono usati dalla comunicazione seriale.

Il pin PC6 e’ utilizzato per il Reset (active LOW).

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 27: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Interfacciamento del DAC MCP4922

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 28: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

L’integrato MCP4922

• 2 DAC indipendenti a 12 bit (DAC A

e DAC B).

• Interfaccia SPI

• Singola alimentazione (2.7 ÷ 5.5 V )

• Fondo scala di VOUT selezionabile

(VREF oppure 2 × VREF )

• Uscite sincronizzabili (tramite

LDAC)

• Le uscite possono essere messe in

alta impedenza (tramite SHDN) e il

consumo ridotto al minimo

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 29: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Schema funzionale

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 30: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

String DAC

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 31: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Caratteristiche generali

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 32: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Significato dei pin

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 33: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Interfaccia SPI

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 34: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Interfaccia SPI: timing

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 35: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Interfacciamento con Arduino

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 36: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Un semplice programma

/ / Legge 2 i n t e r i da conso l le e s c r i v e su i DAC

# inc lude <SPI . h>

const i n t s laveSe lec tP in = 10;

i n t datoA = 0;

i n t datoB = 0;

boolean datoAReady = f a l s e ;

boolean datoBReady = f a l s e ;

vo id setup ( ) {

S e r i a l . begin (9600) ;

pinMode ( s laveSelec tP in , OUTPUT) ;

d i g i t a l W r i t e ( s laveSelec tP in , HIGH ) ;

SPI . begin ( ) ;

SPI . setDataMode (SPI_MODE0 ) ;

SPI . se tB i tOrder (MSBFIRST ) ;

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 37: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Un semplice programma

vo id loop ( ) {

S e r i a l . p r i n t l n ( " I n s e r i s c i i l primo dato (0 − 4 0 9 5 ) : " ) ;

wh i le ( ! datoAReady ) {

i f ( S e r i a l . a v a i l a b l e ( ) > 0 ) {

datoA = S e r i a l . pa rse In t ( ) ;

datoAReady = t rue ; } }

S e r i a l . p r i n t l n ( " I n s e r i s c i i l secondo dato (0 − 4 0 9 5 ) : " ) ;

wh i le ( ! datoBReady ) {

i f ( S e r i a l . a v a i l a b l e ( ) > 0)

datoB = S e r i a l . pa rse In t ( ) ;

datoBReady = t rue ; } }

writeDAC ( datoA , 0 ) ; / / s c r i v e su i DAC A

writeDAC ( datoB , 1 ) ; / / s c r i v e su i DAC B

datoAReady= f a l s e ;

datoBReady = f a l s e ;

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 38: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Un semplice programma

vo id writeDAC ( i n t dato , i n t dac ) {

/ / Scr ive su l DAC dac (0 o 1) i l dato

/ / Prende solo i 12 b i t meno s i g n i f i c a t i v i d i dato

/ / con f i g per i l DAC A (SHDN=1 ,GAIN = 1 , UNBUFFERED)

byte conf = B00110000 ;

byte mask = B00001111 ;

byte low = lowByte ( dato ) ;

byte high = highByte ( dato ) ;

h igh = high & mask ; / / maschera i 4 b i t piu ’ s i g n i f i c a t i v i

h igh = high | conf ; / / c i mette i b i t d i con f igu raz ione

i f ( dac == 1) b i t S e t ( high , 7 ) ; / / mette a 1 i l b i t 7 se vogliamo

/ / S e r i a l . p r i n t ( high , BIN ) ;

/ / S e r i a l . p r i n t ( " " ) ;

/ / S e r i a l . p r i n t l n ( low , BIN ) ;

d i g i t a l W r i t e ( s laveSelec tP in ,LOW) ;

SPI . t r a n s f e r ( high ) ;

SPI . t r a n s f e r ( low ) ;

d i g i t a l W r i t e ( s laveSelec tP in , HIGH ) ;

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 39: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Timing

/ / Programma per osservare a l l ’ o s c i l l o g r a f o i l d ia logo SPI

# inc lude <SPI . h>

i n t dato = 0;

i n t dac = 0;

boolean datoReady = f a l s e ;

const i n t s laveSe lec tP in = 10;

vo id setup ( ) {

S e r i a l . begin (9600) ;

pinMode ( s laveSelec tP in , OUTPUT) ;

d i g i t a l W r i t e ( s laveSelec tP in , HIGH ) ;

SPI . begin ( ) ;

SPI . setDataMode (SPI_MODE0 ) ;

SPI . se tB i tOrder (MSBFIRST ) ;

SPI . se tC lockD iv ide r (SPI_CLOCK_DIV2 ) ;

S e r i a l . p r i n t l n ( " I n s e r i s c i i l dato (0 − 4 0 9 5 ) : " ) ;

wh i le ( ! datoReady ) {

i f ( S e r i a l . a v a i l a b l e ( ) > 0 ) {

dato = S e r i a l . pa rse In t ( ) ;

datoReady = t rue ; } }

}Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 40: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Timing

vo id loop ( ) {

writeDAC ( dato , dac ) ;

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 41: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Timing

vo id writeDAC ( i n t dato , i n t dac ) {

/ / Scr ive su l DAC dac (0 o 1) i l dato

/ / Prende solo i 12 b i t meno s i g n i f i c a t i v i d i dato

/ / con f i g per i l DAC A (SHDN=1 ,GAIN = 1 , UNBUFFERED)

byte conf = B00110000 ;

byte mask = B00001111 ;

byte low = lowByte ( dato ) ;

byte high = highByte ( dato ) ;

h igh = high & mask ; / / maschera i 4 b i t piu ’ s i g n i f i c a t i v i

h igh = high | conf ; / / c i mette i b i t d i con f igu raz ione

i f ( dac == 1) b i t S e t ( high , 7 ) ; / / mette a 1 i l b i t 7 se vogliamo

/ / S e r i a l . p r i n t ( high , BIN ) ;

/ / S e r i a l . p r i n t ( " " ) ;

/ / S e r i a l . p r i n t l n ( low , BIN ) ;

d i g i t a l W r i t e ( s laveSelec tP in ,LOW) ;

SPI . t r a n s f e r ( high ) ;

SPI . t r a n s f e r ( low ) ;

d i g i t a l W r i t e ( s laveSelec tP in , HIGH ) ;

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 42: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Interfacciamento dello schermo LCD

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 43: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

TFT LCD

Utilizzeremo un piccolo schermo LCD a colori (160x128 pixels), che verra’

connesso ad Arduino Uno. La scheda contiene anche una slot per Memory Card

SD (tipo micro).

La comunicazione con queste 2 periferiche avviene tramite il protocollo SPI

(Serial Peripheral Interface).

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 44: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

TFT: Schema logico delle connessioni

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 45: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

TFT LCD: Connessioni

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 46: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Coordinate grafiche

Tutte le applicazioni grafiche utilizzano questa sistema di riferimento:

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 47: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

TFT LCD: programmazione

Per utilizzare lo schermo occorre includere nello sketch le librerie SPI e TFT e

definire alcuni pin (gli altri sono di default).Lo schermo va poi inizializzato.

# inc lude <SPI . h># inc lude <TFT . h> / / Arduino LCD l i b r a r y

# de f ine cs 10# de f ine dc 9# de f ine r s t 8TFT screen = TFT( cs , dc , r s t ) ; / / Crea una is tanza d i TFTvoid setup ( ) {

/ / i n i t i a l i z e the screenscreen . begin ( ) ;

}

vo id loop ( ) {

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 48: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Colore

Il colore e’ sempre definito utilizzando il modello RGB.

Il colore di fondo dello schermo viene definito con la funzione

screen.background(red,green,blue)

red : int 0-255

green : int 0-255

blue : int 0-255

# inc lude <SPI . h># inc lude <TFT . h> / / Arduino LCD l i b r a r y# de f ine cs 10# de f ine dc 9# de f ine r s t 8TFT screen = TFT( cs , dc , r s t ) ; / / Crea una is tanza d i TFTvoid setup ( ) {

screen . begin ( ) ; / / i n i t i a l i z e the screenscreen . background (255 ,255 ,255) ; / / background whi te

}vo id loop ( ) {}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 49: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Il modello RGB dei colori

il modello RGB è di tipo additivo e si basa su

tre colori primari: rosso (Red), verde (Green) e

blu (Blue) (da non confondere con i colori primari

sottrattivi giallo, ciano e magenta).

Unendo i tre colori con la loro intensità massima

si ottiene il bianco. La combinazione delle coppie

di colori dà il ciano, il magenta e il giallo.

La scelta dei colori primari è correlata alla fisiologia dell’occhio umano;sono

stimoli che massimizzano la differenza tra le risposte delle cellule cono della

retina (ce ne sono di 3 tipi) alle differenze di lunghezza d’onda della luce.

Notare che non tutti i colori visibili possono essere riprodotti con la miscelazione

RGB.

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 50: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Colore (2)

Per ogni oggetto grafico si distingue il colore del contorno e il colore del

riempimento.

Il colore del contorno e’ definito con la funzione

screen.stroke(red,green,blue)

red : int 0-255

green : int 0-255

blue : int 0-255

Il colore del riempimento con la funzione

screen.fill(red,green,blue)

red : int 0-255

green : int 0-255

blue : int 0-255

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 51: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Colore (3)

Se non si vuole il contorno, lo si puo’ escludere con la funzione

screen.nostroke( )

invece se non si vuole il riempimento con la funzione

screen.nofill()

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 52: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Forme

screen . po i n t ( x , y ) ; / / disegna un punto (1 p i x e l )/ / i n pos iz ione x , y

screen . l i n e ( xS , yS , xE , yE ) ; / / disegna una l i n e a/ / da ( xS , yS ) a ( xE , yE )

screen . r e c t ( xS , yS , w, h ) / / disegna un r e t t a n g o l o d i/ / larghezza w e a l tezza h/ / xS , yS sono l e coord ina te/ / d e l l o sp igo lo super io re s i n i s t r o

screen . c i r c l e (xC , yC , r ) ; / / disegna un cerch io d i ragg io r/ / con cent ro i n xC , yC

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 53: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Altre funzioni

i n t screen . width ( ) ; / / r e s t i t u i s c e l a larghezza/ / d e l l o schermo

i n t screen . he igh t ( ) ; / / r e s t i t u i s c e l ’ a l t ezza/ / d e l l o schermo

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 54: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esempi (1): rettangolo

# inc lude <SPI . h># inc lude <TFT . h> / / Arduino TFT l i b r a r y# de f ine cs 10# de f ine dc 9# de f ine r s t 8TFT screen = TFT( cs , dc , r s t ) ;

vo id setup ( ) {

screen . begin ( ) ; / / i n i z i a l i z z a l o schermo

screen . background ( 0 , 0 , 0 ) ; / / background nero

screen . s t roke (255 ,255 ,255) ; / / bordo bianco

screen . f i l l ( 255 ,0 ,0 ) ; / / r iempimento rosso

/ / draw un r e t t a n g o l o a l cent roscreen . l i n e ( screen . width () /2 −5 , screen . he igh t () /2 −5 , 10 , 10 ) ;

}vo id loop ( ) { }

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 55: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esempi (2): testo

# inc lude <SPI . h># inc lude <TFT . h> / / Arduino TFT l i b r a r y# de f ine cs 10# de f ine dc 9# de f ine r s t 8TFT screen = TFT( cs , dc , r s t ) ;

vo id setup ( ) {

screen . begin ( ) ;

screen . background ( 0 , 0 , 0 ) ; / / background nero

screen . s t roke (255 ,255 ,255) ; / / t e s to bianco

screen . setTextS ize ( 2 ) ; / / t e s to da 20 p i x e l s

screen . t e x t ( " Buongiorno " , 5 , 5 ) ;}

vo id loop ( ) {

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 56: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esempi (3): linee

# inc lude <SPI . h># inc lude <TFT . h> / / Arduino TFT l i b r a r y# de f ine cs 10# de f ine dc 9# de f ine r s t 8TFT screen = TFT( cs , dc , r s t ) ;

vo id setup ( ) {screen . begin ( ) ;

screen . background ( 0 , 0 , 0 ) ;

screen . s t roke (255 ,255 ,255) ;

screen . l i n e (0 , 0 , 160 , 128) ; / / d iagonale biancascreen . s t roke (0 ,255 ,0 ) ;screen . l i n e (0 , 128 , 160 , 0 ) ; / / d iagonale verde

}

vo id loop ( ) {/ / put your main code here , to run repeated ly :

}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 57: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Persistenza

Si noti che l’immagine persiste indefinitamente sullo schermo.

Esempio:

# inc lude <SPI . h># inc lude <TFT . h> / / Arduino TFT l i b r a r y# de f ine cs 10# de f ine dc 9# de f ine r s t 8TFT screen = TFT( cs , dc , r s t ) ;vo id setup ( ) {

screen . begin ( ) ;screen . background ( 0 , 0 , 0 ) ;screen . s t roke (255 ,255 ,255) ;screen . setTextS ize ( 2 ) ; / / t e s to da 20 p i x e l sscreen . t e x t ( " Buongiorno " , 5 , 5 ) ; / / S c r i t t a n . 1delay (10000) ;screen . t e x t ( "15 maggio 2014" , 5 , 5 ) ; / / S c r i t t a n . 2

}vo id loop ( ) { }

Le due scritte si sovrappongono malamente!

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 58: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Persistenza

Perciò, se si vuole aggiornare un’immagine occorre cancellare la precedente:

# inc lude <SPI . h># inc lude <TFT . h> / / Arduino TFT l i b r a r y# de f ine cs 10# de f ine dc 9# de f ine r s t 8TFT screen = TFT( cs , dc , r s t ) ;vo id setup ( ) {screen . begin ( ) ;screen . background ( 0 , 0 , 0 ) ;screen . s t roke (255 ,255 ,255) ;screen . setTextS ize ( 2 ) ;screen . t e x t ( " Buongiorno " , 5 , 5 ) ; / / S c r i t t a n . 1delay (10000) ;screen . s t roke ( 0 , 0 , 0 ) ; / / Colore de l backgroundscreen . t e x t ( " Buongiorno " , 5 , 5 ) ; / / Cancel la s c r i t t a n . 1screen . s t roke (255 ,255 ,255) ; / / R i p r i s t i n a i l co lo re d e l l o s t rokescreen . t e x t ( "15 maggio 2014" , 5 , 5 ) ; / / S c r i t t a n . 2}vo id loop ( ) { }

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 59: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Persistenza

Un bravo programmatore puo’ fare di meglio usando le funzioni:

. . .

. . .TFT screen = TFT( cs , dc , r s t ) ;i n t background [ ] = {0 , 0 , 0 } ;i n t foreground [ ] = {255 , 255 , 255 } ;vo id setup ( ) {screen . begin ( ) ;screen . background ( background [ 0 ] , background [ 1 ] , background [ 2 ] ) ;screen . s t roke (255 ,255 ,255) ;screen . setTextS ize ( 2 ) ;w r i t eTex t ( foreground [ 0 ] , foreground [ 1 ] , foreground [ 2 ] , 5 , 5 , " Buongiorno " , 2 ) ;delay (10000) ;w r i t eTex t ( background [ 0 ] , background [ 1 ] , background [ 2 ] , 5 , 5 , " Buongiorno " , 2 ) ;w r i t eTex t ( foreground [ 0 ] , foreground [ 1 ] , foreground [2 ] , 5 , 5 , " 14 maggio 2014" ,2 ) ;}vo id loop ( ) { }vo id wr i t eTex t ( i n t r , i n t g i n t b , i n t x , i n t y , char t e x t [ ] , i n t s i ze ){screen . s t roke ( r , g , b ) ;screen . setTextS ize ( s ize ) ;screen . t e x t ( t ex t , x , y ) ;}

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 60: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esempi (4): sinusoide calcolata

# inc lude <SPI . h># inc lude <TFT . h> / / Arduino TFT l i b r a r y

# de f ine cs 10# de f ine dc 9# de f ine r s t 8

TFT screen = TFT( cs , dc , r s t ) ;double xmin = 0 . ;double xmax = 8∗3.14159;double pax = 0 . ;double x ;double y ;i n t i x , i y ;i n t imin = 0;i n t imax = 160;

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 61: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esempi (4): sinusoide calcolata

vo id setup ( ) {screen . begin ( ) ;screen . background ( 0 , 0 , 0 ) ;screen . s t roke (255 ,255 ,255) ;S e r i a l . begin (9600) ;pax = (xmax−xmin ) / imax ;

f o r ( i n t i =0; i < imax ; i ++){

x = xmin + pax∗ ( i −1);y = s in ( x ) ;i x = i n t ( x ∗6 .37 ) ;i y = i n t ( y ∗30. )+64;S e r i a l . p r i n t ( i x ) ;S e r i a l . p r i n t ( " " ) ;S e r i a l . p r i n t l n ( i y ) ;screen . f i l l (255 ,255 ,255) ;screen . po i n t ( i x , i y ) ;screen . po i n t ( i x , i y +1 ) ; / / l i n e a a l t a 2 p i x e l s

}

}vo id loop ( ) { }

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 62: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esempi(4): Sinusoide calcolata

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 63: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Esempio: Grafico in tempo reale

Si vuole costruire sullo schermo LCD (160 x 128 pixels) un grafico dove si riporta

l’andamento di una grandezza ( per esempio la temperatura ◦C) misurata ad

intervalli regolari di tempo, δt .

Supponendo quindi di dedicare un punto di un pixel ad ogni misura avremo sul

grafico il valore delle ultime 160 misure. Il grafico si deve aggiornare ad ogni δt

eliminando la misura piu’ vecchia e aggiungendo (a destra) l’ultima misura.

Si noti che un’immagine disegnata sul LCD e’ persistente, quindi ad ogni

aggiornamento l’immagine vecchia va cancellata e sostituita da quella nuova.

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 64: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Grafico in tempo reale

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 65: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Grafico in tempo reale

Come si affronta questo problema?

E’ chiaro che dovremo avere una array con 160 posizioni dove memorizzare man

mano le misure e riportare sul grafico i 160 punti corrispondenti.

Che succede quando avremo memorizzato le prime 160 misure?

Questa struttura si chiama tecnicamente una coda ovvero una struttura FIFO

(First In First Out).

L’idea piu’ ovvia e’ quella di traslare via via a sinistra i dati per liberare l’ultimo

posto a destra.

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 66: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Grafico in tempo reale

Come si affronta questo problema?

E’ chiaro che dovremo avere una array con 160 posizioni dove memorizzare man

mano le misure e riportare sul grafico i 160 punti corrispondenti.

Che succede quando avremo memorizzato le prime 160 misure?

Questa struttura si chiama tecnicamente una coda ovvero una struttura FIFO

(First In First Out).

L’idea piu’ ovvia e’ quella di traslare via via a sinistra i dati per liberare l’ultimo

posto a destra.

Ma questo richiede un enorme spreco di tempo!

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 67: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Grafico in tempo reale

Bisogna invece pensare all’array come ad una struttura circolare:

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 68: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Grafico in tempo reale

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 69: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Applicazioni

• Didattica;

• Giochi;

• Sistemi di controllo e gestione;

• Robotica e domotica.

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 70: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Controllo remoto di Arduino

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 71: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Controllo remoto di Arduino

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 72: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Arduino come programmatore ISP

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro

Page 73: Arduino - II parte - roma1.infn.itnigro/materiale2/mat/6-arduino-2.pdf · Esercizio: una simulazione (3) Diagramma degli stati: Laboratorio di Segnali e Sistemi II - Arduino-II parte

Conclusioni

• Arduino e’ un ottimo strumento didattico perche’ ci aiuta a comprendere e

risolvere sistemi elettronici complessi;

• In rete si trovano miriadi di applicazioni piu’ o meno futili;

• Puo’ essere un strumento di sviluppo di applicazioni serie.

Laboratorio di Segnali e Sistemi II - Arduino-II parte A.Nigro