Data naar Arduino sturen via USB kabel

De usb kabel die je gebruikt om het programma in de arduino te laden kan je ook gebruiken om data door te sturen, bv vanuit Gambas.

Je moet het seriële poort object gebruiken, waarvoor je de gb.net bibliotheek importeert (Project eigenschappen, libraries).

Variabele declareren:

Public hSerial As SerialPort

Initialiseren van het object:

hSerial = New SerialPort As "hSerial"

(ps: AS "hSerial" wordt later gebruikt om te lezen van de poort)

Eigenschappen instellen:

  With hSerial
    .Clear
    .PortName = "/dev/ttyUSB0"
    .Speed = 9600 ' 4800
    .DataBits = SerialPort.Bits8
    .StopBits = SerialPort.Bits1
    .Parity = SerialPort.None
    .FlowControl = SerialPort.None
    .Clear
  End With

Poort openen:

Try hSerial.Open(3)
  If Error Then
    Print Error.Text
  Else 
    TSendTimer.Start()
  Endif 

Ik heb een timer gemaakt om gemakkelijk automatisch een aktie als een waarde uitsturen te laten uitvoeren:

Public TSendTimer As Timer
  '
  Try iNumber = getSomeValueFromDb()
  If Error Then
    Print Error.Text
  Else 
    If iNumber <> iPrevious
      doSend(iNumber)
      iPrevious = iNumber
    Else 
      ' 
    Endif 
  Endif

(in hetzelfde programma heb ik een andere timer voor het lezen van de seriële poort)

De timer aktiveert het ophalen van de gegevens van elders, bv uit een database:

getSomeValueFromDb() kan je vervanen door eender welke bewerking voor het ophalen van een waarde uit een databank, een bewerking, uitlezen van menselijke invoer, enz..

En het uisturen van de klaarstaande gegevens:


Public Sub doSend(iNumber As Integer)
'  
  Debug Now() & " Gb3 doSend > " & iNumber
  Try Write #hSerial, Str(iNumber) & gb.NewLine
  If Error Then
    Print "Gb3 Err: " & Error.Text
  Else 
    hSerial.Send()
    Inc iCounter
  Endif 

Ik hou wat tellers bij en toon in het konsole scherm de waarden die heen en weer gaan tussen de arduino en de Raspberry Pi/pc, daarom dat ik ze laat voorafgaan door “Gb3” om aan te geven wat de bron is. De inkomende data van de arduino toon ik daar immers ook.

Ontvangen via dezelfde weg

Instellen:

Public Sub setReceive()
'  
  Debug "Gb3: setReceive"
  With hSerial
    If .Status = Net.Active Then
      TTimer.Start()
      Print .DTR
      Print .DSR
      Print .Blocking
      Print .CTS
      Print .RTS
    Endif
  End With
  '
End

Lezen van seriële poort:

Public Sub hSerial_Read()
  '
  Try Read #hSerial, sIn, Lof(hSerial)
  '
End

De timer voor ontvangen van data:

Public Sub TTimer_Timer()
'
  If hSerial.Status <> Net.Active Or If sIn = "" Then 
    ' Print "Gb3: No data, or empty string.."
  Else 
    If sIn <> sPrevious
      Print "Gb3: Data received: " & sIn
      sPrevious = sIn
    Endif 
  Endif
  '
End