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 !