ARRAY
Tornando all’esempio delle emozioni, potremmo utilizzare un array di 5 elementi per gestire le
“emozioni” del robot.
Ogni variabile ora avrà al suo interno 256 valori (da 0 a 255) e quindi le emozioni saranno più
definite, un valore zero nella variabile Calmo porta il robot ad uno stato di calma, un valore di 120
nella variabile Calmo porta il robot ad una via di mezzo tra Calmo ed Arrabbiato.
Un altro vantaggio dell’array è la possibilità di inserire l’indice in un ciclo e quindi poter esaminare
le variabili con poche semplici istruzioni.
Supponiamo di dover analizzare due valori, temperatura e luce, e di utilizzare due variabili come
nell’esempio:
#CHIP 16F84, 4 'Tipo di PIC utilizzato
DIR PORTA OUT 'Definisco le porte d'uscita
DIR PORTB IN 'e d'ingresso
DIM Temperatura 'Variabile per contenere il valore della temperatura
DIM Luce 'Variabile per contenere il valore della luce
Ciclo:
'Controllo la temperatura, se è superiore a 30 indietreggio
IF Temperatura > 30 THEN GOTO Indietreggiare
'Controllo la luce, se è superiore a 30 indietreggio
IF Luce > 30 THEN GOTO Indietreggiare
GOTO Ciclo 'Salto all'etichetta Ciclo
Indietreggiare:
'Funzione esempio per indietreggiare
PortA = b'00000110' 'Il microrobot va indietro
WAIT 1 sec 'Attende pochi secondi
GOTO Ciclo 'Salto all'etichetta Ciclo
END 'Fine programma
Usando un array e l’indice il codice sarebbe stato il seguente:
#CHIP 16F84, 4 'Tipo di PIC utilizzato
DIR PORTA OUT 'Definisco le porte d'uscita
DIR PORTB IN 'e d'ingresso
DIM Sensori(2) 'Array di sensori
Contatore = 1 'Inizializzo il contatore
DO WHILE Contatore < 3 'Ciclo per leggere l'array
'Controllo i valori all'interno delle variabili.
IF Sensori(Contatore)> 30 THEN GOTO Indietreggiare
LOOP
Indietreggiare: 'Funzione esempio per indietreggiare
PortA = b'00000110' 'Il microrobot va indietro
WAIT 1 sec 'Attende pochi secondi
GOTO Ciclo 'Salto all'etichetta Ciclo
END 'Fine programma
Analizziamo il sorgente:
L’array Sensori(2) in questo caso contiene 2 valori (temperatura e luce), ipotizzando di
visualizzarla graficamente avremmo:
All’inizio del ciclo la variabile Contatore vale 1 quindi l’istruzione;
IF sensori(Contatore) > 30 THEN GOTO Indietreggiare
Equivale a;
IF Sensori(1)> 30 THEN GOTO Indietreggiare
Quindi si andrà a controllare se la temperatura è superiore a 30, al secondo ciclo la variabile
contatore sarà uguale a 2 modificando l’istruzione come segue:
IF Sensori(2)> 30 THEN GOTO Indietreggiare
Ed andando a controllare se la luce è superiore a 30.
Supponendo di avere 10 variabili da controllare, perchè associate a 10 sensori, l’array ci permette di
risparmiare molte righe di codice con un risparmio di tempo e di spazio sul PIC.
Attenzione: Questi esempi sono puramente indicativi, non possono essere associati il microrobot
Poor perchè non è presente nessun sensore di temperatura.
Aggiunta il link al corso Linux Uno su Udemy.
Aggiunto il tutorial per la realizzazionedi un Arcade con materiale di riciclo.