Ricevere una Struttura da Arduino

Da Gambas-it.org - Wikipedia.
Versione del 22 nov 2015 alle 07:17 di Vuott (Discussione | contributi) (Creata pagina con "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 eventua...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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 !