Ricevere una Struttura da Arduino
Una Struttura è sostanzialmente un'area di memoria riservata avente una dimensione pari alla somma dei tipi di valore, appartenenti a ciascun suo membro, più gli eventuali necessari allineamenti.
Poiché nel caso in esame la memoria di Arduino e del computer, ove gira il nostro programma Gambas, non è ovviamentre la stessa, essendo due hardware diversi, per passare i dati, contenuti dai membri di una Struttura, da Arduino a Gambas, non sarà possibile passare via codice la variabile di tipo Struttura né il suo indirizzo di memoria. Pertanto si potrà procedere soltanto mediante due modalità.
Passare i valori dei membri attraverso le variabili
Questa è la modalità più semplice ed anche più ovvia.
Ne mostriamo un semplice esempio, nel quale utilizzeremo Arduino UNO, il cui codice sarà il seguente:
struct STRUTTURA { byte b; short s; unsigned int i; long l; }; struct STRUTTURA st; void setup() { Serial.begin(9600); st.b = 99; st.s = 999; st.i = 9999; st.l = 99999; } void loop() { Serial.write(st.b); Serial.write(st.s); Serial.write(st.i); Serial.write(st.l); delay(5000); }
Per ragioni di comodità e semplificazione del codice nel programma Gambas potremo raccogliere i dati provenienti da Arduino mediante una variabile vettoriale di tipo Variant, facendo attenzione nell'attribuzione dei tipo di valore a ciascun elemento del vettore alla dimensione effettiva - sulla base del tipo di Arduino utilizzato - dei corrispondenti membri della Struttura presente in Arduino.
Mostriamo il seguente esempio (bisognerà attivare il Componente gb.net):
Private SerialPort1 As SerialPort Private vett As New Variant[4] Private b as Byte Public Sub Button1_Click() With SerialPort1 = New SerialPort As "portaseriale" .PortName = "/dev/ttyUSB0" ' Questa porta seriale o quella disponibile .Speed = 9600 .Parity = 0 .DataBits = 8 .StopBits = 1 .FlowControl = 0 .Open End With End Public Sub portaseriale_Read() Dim b As Byte Read #SerialPort1, vett[b] Inc b End Public Sub Form_Close() If SerialPort1.Status = Net.Active Then SerialPort1.Close End
Pagina in costruzione !