Differenze tra le versioni di "Ricevere da Arduino un tipo di dato di dimensione superiore al Byte"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 4: Riga 4:
  
  
Mostriamo un esempio, nel quale il codice in ''Arduino'' UNO invia ad un programma Gambas un dato di tipo ''unsigned int'':
+
Mostriamo un esempio, nel quale il codice in ''Arduino'' UNO invia ad un programma Gambas un dato di tipo ''unsigned int'. E' necessario attivare il Componente ''gb.net''.
 
  void setup() {
 
  void setup() {
 
      
 
      
Riga 31: Riga 31:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   With SerialPort1 = New SerialPort As "portaseriale"
 
   With SerialPort1 = New SerialPort As "portaseriale"
Riga 43: Riga 43:
 
   End With
 
   End With
 
    
 
    
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub portaseriale_Read()
+
  Public Sub portaseriale_Read()
 
    
 
    
  Dim y As Byte
+
  Dim y As Byte
 
    
 
    
 
   Read #SerialPort1, y
 
   Read #SerialPort1, y
Riga 63: Riga 63:
 
   Endif
 
   Endif
 
    
 
    
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Close()
+
  Public Sub Form_Close()
 
    
 
    
 
   If SerialPort1.Status = Net.Active Then SerialPort1.Close
 
   If SerialPort1.Status = Net.Active Then SerialPort1.Close
 
    
 
    
  '''End'''
+
  End
 
 
 
 
 
Analogamente si può procedere per gli altri tipi di dato di dimensione superiore a 1 byte.
 
Analogamente si può procedere per gli altri tipi di dato di dimensione superiore a 1 byte.

Versione attuale delle 16:04, 25 giu 2024

La trasmissione via seriale mediante la funzione "Serial.write()" consente l'invio di un byte alla volta. Ciò rende problematico, quindi, l'invio ad un programma Gambas di valori rappresentati da tipi di dati superiore ad un byte.

Per inviare tipi di dati superiore al Byte, si leggerà nell'area di memoria della variabile contenente il valore e si passerà da Arduino al programma Gambas ciascun byte costituente il valore. Il programma Gambas dovrà poi ricostruire il valore iniziale, come detto passato byte per byte, tenendo conto del tipo di Arduino utilizzato.


Mostriamo un esempio, nel quale il codice in Arduino UNO invia ad un programma Gambas un dato di tipo unsigned int'. E' necessario attivare il Componente gb.net.

void setup() {
   
  Serial.begin(9600);
 
}


void loop() {
 
  byte * pi;
  unsigned int i = 12345;
  pi = (byte *) &i;
 
  Serial.write(pi, sizeof(unsigned int));
  
  delay(300);
    
}


Il codice del programma Gambas, che riceve il dato, comunica con la porta seriale "/dev/ttyUSB0" o potrà essere anche “/dev/ttyACM0” (ovviamente il numero finale può essere anche diverso se sono stati connessi altri dispositivi analoghi).

Private SerialPort1 As SerialPort
Private ss As New String[]
Private b As Byte


Public Sub Main()

 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 y As Byte
 
  Read #SerialPort1, y
  
  ss.Push(Hex(y, 2))

  Inc b

' Ricostruisce il valore iniziale presente in "Arduino":
  If b = 2 Then
    ss.Reverse()
    Print Val("&" & ss.Join(Null, Null))
    Quit
  Endif
  
End


Public Sub Form_Close()
 
  If SerialPort1.Status = Net.Active Then SerialPort1.Close
 
End

Analogamente si può procedere per gli altri tipi di dato di dimensione superiore a 1 byte.