Il primo programma ci permetterĂ di gestire i 2 LED presenti nel robot attraverso il pulsante.
DEFINE OSC 4 âdefinisce la velocitĂ dellâoscillatore
â********************* VARIABILI ********************************
LEDV VAR PortA.0 âLED Verde posto a Destra
LEDR VAR PortA.1 âLED Rosso posto a Sinistra
MOTORR VAR PortA.2 âControllo Motore Destra
MOTORL VAR PortA.3 âControllo Motore Sinistra
PULSANTE VAR PortB.0 âPulsante Di controllo
LINEAR VAR PortB.1 âSensore di Linea Infrarosso QRB1134 Destra
LINEAL VAR PortB.2 âSensore di Linea Infrarosso QRB1134 Sinistra
SHARPR VAR PortB.3 âSensore rilevamento avversario GP2D15 Destra
SHARPL VAR PortB.4 âSensore rilevamento avversario GP2D15 Sinistra
RELE CON 5 âRelè Abilitazione PonteH
â*****************************************************************
â********************* DEFINIZIONE PORTE ************************
OUTPUT LEDV âLED Verde posto a Destra
OUTPUT LEDR âLED Rosso posto a Sinistra
INPUT PULSANTE âPulsante Di controllo
â****************************************************************
â********************* PROGRAMMA *****************************
Loop:
IF PULSANTE = 0 THEN
HIGH LEDV
LOW LEDR
ELSE
LOW LEDV
HIGH LEDR
ENDIF
GOTO Loop
DEFINE Come detto nel precedente articolo è una istruzione che definisce delle impostazioni presenti nellâhardware.
Queste istruzioni sono istruzioni dedicate e come è logico pensare non sono strettamente relative al programma, ma al compilatore ed allâassemblatore che prepareranno il programma nel giusto formato che richiede lâelettronica.
Nel nostro caso lâistruzione DEFINE OSC definisce il quarzo presente nel circuito e nel nostro caso è da 4 Mhz quindi scriveremo lâistruzione DEFINE OSC 4
DEFINE OSC 4 âVelocitĂ in MHz: 3(3.58) 4 8 10 12 16 20 24 25 32 33 40
Queste sono tutte le velocitĂ impostabili dal programmatore
La seconda istruzione che incontriamo è:
Label VAR Size
Questa definisce la variabile che useremo allâinterno del programma o nel nostro caso le porte che utilizzeremo nel circuito.
Le variabili sono delle istruzioni che una volta definite occupano un certo spazio nella memoria.
I formati disponibili per chi usa il PicBasic Pro sono 3
- BIT occupa 1 Bit quindi tra valori compresti da 0 a 1
- BYTE occupa 8 Bit quindi valori compresi da 0 e 255
- WORD occupa 16 Bit quindi valori compresi da 0 a 65535
INPUT ed OUTPUT invece sono delle istruzioni che definiscono gli ingressi e le uscite del microcontrollore
Come vediamo nel programma lâistruzione
- OUTPUT LEDV definisce come uscita LEDV vale a dire PortA.0
- INPUT PULSANTE al contrario, definisce come ingresso PortB.0
Dopo le prime istruzioni abbiamo notato che finalmente siamo giunti al programma
Loop:
IF PULSANTE = 0 THEN
HIGH LEDV
LOW LEDR
ELSE
LOW LEDV
HIGH LEDR
ENDIF
GOTO Loop
Questo è il vero e proprio programma che attraverso il ciclo racchiuso tra LoopâŚGOTO Loop
Lâistruzione GOTO permette di saltare da una istruzione ad unâaltra, ed in questo caso tornando alla Label âLoopâ.
Per poter scegliere tra percorsi di azioni alternative si usano le strutture di selezione, questa struttura è il comando: IF⌠THEN
IF Comp {AND/OR CompâŚ} THEN
Programma
ELSE
Programma
ENDIF
A seconda del comando che riceve compie una azione o unâaltra, nel caso del nostro programma Se il pulsante viene premuto questo da tensione al LEDR (LED Rosso) e se questo viene rilasciato abilita il LEDV (LED Verde)
Secondo Programma
DEFINE OSC 4 âdefinisce la velocitĂ dellâoscillatore
â********************* VARIABILI ********************************
LEDV VAR PortA.0 âLED Verde posto a Destra
LEDR VAR PortA.1 âLED Rosso posto a Sinistra
MOTORR VAR PortA.2 âControllo Motore Destra
MOTORL VAR PortA.3 âControllo Motore Sinistra
PULSANTE VAR PortB.0 âPulsante Di controllo
LINEAR VAR PortB.1 âSensore di Linea Infrarosso QRB1134 Destra
LINEAL VAR PortB.2 âSensore di Linea Infrarosso QRB1134 Sinistra
SHARPR VAR PortB.3 âSensore rilevamento avversario GP2D15 Destra
SHARPL VAR PortB.4 âSensore rilevamento avversario GP2D15 Sinistra
RELE CON 5 âRelè Abilitazione PonteH
â****************************************************************
â********************* DEFINIZIONE PORTE ************************
OUTPUT LEDV âLED Verde posto a Destra
OUTPUT LEDR âLED Rosso posto a Sinistra
OUTPUT MOTORR âControllo Motore Destra
OUTPUT MOTORL âControllo Motore Sinistra
INPUT Pulsante âPulsante Di controllo
INPUT LINEAR âSensore di Linea Infrarosso QRB1134 Destra
INPUT LINEAL âSensore di Linea Infrarosso QRB1134 Sinistra
INPUT SHARPR âSensore rilevamento avversario GP2D15 Destra
INPUT SHARPL âSensore rilevamento avversario GP2D15 Sinistra
OUTPUT RELE âRelè Abilitazione PonteH
â****************************************************************
Variabile VAR BYTE
i VAR BYTE
LOW LEDV
LOW LEDR
LOW RELE
Loop:
FOR i = 0 TO 50
IF PULSANTE = 0 THEN
Variabile = Variabile + 1
ENDIF
PAUSE 100
NEXT i
SELECT CASE Variabile
CASE 0
GOTO Loop
CASE 1
FOR i = 0 TO 2
HIGH LEDV
PAUSE 200
LOW LEDV
PAUSE 200
NEXT i
CASE 2
FOR i = 0 TO 2
HIGH LEDR
PAUSE 200
LOW LEDR
PAUSE 200
NEXT i
CASE IS > 3
FOR i = 0 TO 2
HIGH LEDV
HIGH LEDR
PAUSE 200
LOW LEDV
LOW LEDR
PAUSE 200
NEXT i
END SELECT
Come abbiamo notato il secondo programma ha delle nuove caratteristiche rispetto il precedente che abbiamo appena analizzato.
Questa volta utilizziamo una variabile per poter riconoscere la quantitĂ di volte che premiamo il pulsante:
Variabile VAR BYTE
IF PULSANTE = 0 THEN
Variabile = Variabile + 1
ENDIF
Ogni volta che premeremo il pulsante la variabile aumenterĂ di uno il suo valore originale, questo permetterĂ alla fine del ciclo FORâŚNEXT di riconoscere la quantitĂ di Click e attraverso lâistruzione SELECT CASE compiere una istruzione o unâaltra.
Come anticipato lâistruzione
FOR i = 0 TO 50 | FOR Variabile = Inizio TO Fine {STEP {â} Inc} |
⌠| {Body} |
PAUSE 100 | NEXT {Variabile} |
NEXT i | Â |
Il ciclo FORâŚNEXT ripete unâistruzione sulla base di una variabile che parte da un valore predefinito, e si perpetua fino ad un valore maggiore, ripetendo quindi il ciclo fino al raggiungimento del valore.
Lâistruzione STEP permette di saltare ad un passo specifico fino al raggiungimento del valore definito.
come ultima istruzione troviamo SELECT CASE
SELECT CASE var
CASE expr1 {, exprâŚ}
statements
CASE expr2 {, exprâŚ}
statements
{CASE ELSE statements}
END SELECT
che svolge una funzione molto simile alla istruzione IFâŚTHEN infatti ad ogni condizione che avremo sulla variabile questa comporterĂ un risultato differente del programma.
Infatti a seconda delle volte che schiacceremo sul pulsante si accenderĂ un LED o lâaltro o tutti e due.