LEZIONE 54

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.

LEZIONE 55
LEZIONE 53