Arduino

Arduino

Arduino e Visual Basic

Tutte le applicazioni viste finora consistono in una parte hardware costituita da shield, led, sensori, moduli, pulsanti e altri componenti connessi ai pin digitali/analogici di Arduino e in una parte software coè il codice, scritto in linguaggio Wiring (molto simile al C) che, per mezzo della porta seriale COM, viene caricato nella memoria di Arduino e fatto eseguire tramite un click sul pulsante "ESEGUI" dell'interfaccia IDE, lato PC. 

Tutti sanno che questo codice è articolato in tre parti:
a) la prima comprende le dichiarazioni delle variabili, dei pin e di eventuali librerie
b) la seconda (detta void setup()) rappresenta l'inizializzazione dei pin e dei componenti particolari
c) la terza (detta void loop()) è la parte di programma, eseguita sempre senza interruzione, che fa funzionare i componenti.
Detto in modo molto semplice, questo è quello che succede.


Ma ci si è chiesto se è possibile comandare l'Arduino da remoto (PC) con l'aiuto di un'interfaccia grafica vicina alle esigenze dell'utente.
La possibilità viene offerta da Visual Basic, un linguaggio di programmazione visuale che permette di raggiungere lo scopo prefissato.
E' sufficiente sviluppare un codice che sia vicino, nella struttura, a quello residente nella memoria di Arduino ed il gioco è fatto.
E' naturale che bisogna saper programmare in Visual Basic, ma questo non rappresenta un problema perchè in rete esistono degli ottimi video tutorial che permettono di imparare in fretta le poche nozioni che servono.


Dopo questa premessa si passa alla pratica iniziando a sviluppare la prima parte del progetto cioè comandare Arduino per mezzo di una interfaccia grafica costruita in ambiente visuale.
L'esempio che propongo è banale ma racchiude in sè tutta la filosofia del caso: accendere e spegnere un led tramite l'interfaccia grafica di Visual Basic.
Iniziamo con lo scrivere il codice per Arduino che sarà il seguente:





Si nota, nel void setup(), che è stata attivata una comunicazione seriale tramite li comando Serial.begin(9600).
Nel void loop() viene costantemente letto cosa c'è sulla porta seriale COM ed assegnato alla variabile on tramite il comando on = Serial.read().
A seconda dei valori assunti dalla variabile il led sarà acceso o spento.

Fatto ciò, si passa in ambiente Visual Basic per preparare la seguente interfaccia:




Il codice associato a questa interfaccia è il seguente:


Tra le righe 3-7 viene inizializzato il controllo SerialPort1 al quale si assegna la COM22 (quella che corrisponde alla mia scheda Arduino) e la si rende disponibile tramite la proprietà Open().
Le righe 9-11, 13-15 e 17-20 rappresentano gli eventi click dei tre pulsanti, rispettivamente, ACCENDI, SPEGNI ed USCITA.
Il comando SerialPort1.WriteLine(...) si attiverà premendo i pulsanti e sulla porta seriale verrà scritto un carattere che sarà letto da Arduino. Se il cararttere è 1 il led si accende mentre se è 0 si spegne.

Per quanto concerne la seconda parte si tratta di trasferire dati da Arduino a Visual Basic.
L'esempio proposto è quello di accendere/spegnere un led e vedere sull'interfaccia grafica un messaggio relativo all'evento che si è verificato cioè "LED ACCESO" oppure "LED SPENTO".

Questa volta sarà Arduino a scrivere un dato sulla porta seriale COM e Visual Basic lo leggerà.
In poche parole il percorso inverso a quello della prima parte del progetto.
Il codice di Arduino sarà il seguente:



Con il comando Serial.println(....) Arduino trasmette a Visual basic non un carattere bensì una stringa.
L'interfaccia grafica ed il codice relativo di Visual Basic sono questi:






Alla riga 2 si dichiara una variabile valore che accoglierà la stringa inviata da Arduino.
Alle righe dal 3 al 7 c'è la dichiarazione di inizializzazione della comunicazione seriale tramite il controllo SerialPort1.
Alle righe dal 9 al 13 è assegnato alla variabile valore la stringa che c'è sulla seriale tramite l'istruzione SerialPort1.ReadLine che la legge.
Alle righe dal 15 al 19 la variabile valore, letta ad ogni scansione del timer (Tick), è scaricata sull'etichetta lbl_risultato affinchè l'utente la possa leggere.






Nessun commento:

Posta un commento