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