Und das AutoIt-Beispiel-Script:
#include "SerialComm.au3"
Global $hPort = _SerialCommOpenPort('COM4', 1000, 115200) ; den seriellen Port oeffnen
If @error Then Exit ConsoleWrite('Fehler Nr.: ' & @error & @CR)
MsgBox(0, 'Test', 'Beispiel 1:' & @CRLF & 'Eine Datenstruktur wird vom Arduino empfangen.')
Global $iTimer, $iBytes, $tSend, $tReceive
; Beispiel 1: Es wird "GetAdd" an den Arduino gesendet und dieser sendet dann eine Struktur an Daten zurueck
Global Const $tagADDRESS = 'struct;' & _ ; in dieser Form werden die Daten empfangen (die gleiche Struktur wie beim Arduino)
'byte Nummer;' & _
'char Name[20];' & _
'char Strasse[20];' & _
'char PLZ[5];' & _
'char Wohnort[20];' & _
'byte Alter;' & _
'endstruct'
$tReceive = DllStructCreate($tagADDRESS) ; den Empfangspuffer (67 Byte) erstellen
$tSend = DllStructCreate('byte[6]') ; Sendepuffer erstellen (der Arduino erwartet ein 6 Byte langes Kommando)
DllStructSetData($tSend, 1, 'GetAdd') ; das Kommando "GetAdd" in den Sendepuffer schreiben
$iTimer = TimerInit()
$iBytes = _SerialCommSendData($hPort, $tSend) ; und an den Arduino senden
ConsoleWrite('Zeit (gesendet) : ' & Round(TimerDiff($iTimer), 3) & ' Bytes: ' & $iBytes & @CR)
ConsoleWrite('Daten (gesendet) : "' & BinaryToString(DllStructGetData($tSend, 1)) & '"' & @CR)
$iTimer = TimerInit()
$iBytes = _SerialCommReceiveData($hPort, $tReceive) ; die Daten werden empfangen
ConsoleWrite('Zeit (empfangen): ' & Round(TimerDiff($iTimer), 3) & ' Bytes: ' & $iBytes & @CR)
ConsoleWrite('Daten (empfangen): "' & DllStructGetData($tReceive, 'Nummer') & '"' & @CR)
ConsoleWrite('Daten (empfangen): "' & DllStructGetData($tReceive, 'Name') & '"' & @CR)
ConsoleWrite('Daten (empfangen): "' & DllStructGetData($tReceive, 'Strasse') & '"' & @CR)
ConsoleWrite('Daten (empfangen): "' & DllStructGetData($tReceive, 'PLZ') & '"' & @CR)
ConsoleWrite('Daten (empfangen): "' & DllStructGetData($tReceive, 'Wohnort') & '"' & @CR)
ConsoleWrite('Daten (empfangen): "' & DllStructGetData($tReceive, 'Alter') & '"' & @CR)
; die Strukturen loeschen
$tSend = 0
$tReceive = 0
MsgBox(0, 'Test', 'Weiter mit Beispiel 2:' & @CRLF & 'Die Onboard-LED des Arduino blinkt 10 mal.')
; Beispiel 2: es werden abwechselnd immer LEDon und LEDoff als Kommando an den Arduino gesendet
$tSend = DllStructCreate('byte[6]') ; Sendepuffer erstellen (der Arduino erwartet ein 6 Byte langes Kommando)
$tReceive = DllStructCreate('byte[6]') ; Empfangspuffer erstellen (der Arduino sendet eine 6 Byte lange Bestaetigung zurueck)
For $i = 0 To 9
DllStructSetData($tSend, 1, 'LEDon ') ; das Kommando zum einschalten der LED in den Sendepuffer schreiben
$iTimer = TimerInit()
$iBytes = _SerialCommSendData($hPort, $tSend) ; das Kommando senden
ConsoleWrite('Zeit (gesendet) : ' & Round(TimerDiff($iTimer), 3) & ' Bytes: ' & $iBytes & @CR)
ConsoleWrite('Daten (gesendet) : "' & BinaryToString(DllStructGetData($tSend, 1)) & '"' & @CR)
$iTimer = TimerInit()
$iBytes = _SerialCommReceiveData($hPort, $tReceive) ; die Bestaetigung vom Arduino empfangen
ConsoleWrite('Zeit (empfangen): ' & Round(TimerDiff($iTimer), 3) & ' Bytes: ' & $iBytes & @CR)
ConsoleWrite('Daten (empfangen): "' & BinaryToString(DllStructGetData($tReceive, 1)) & '"' & @CR & @CR)
Sleep(250)
DllStructSetData($tSend, 1, 'LEDoff'); das Kommando zum ausschalten der LED in den Sendepuffer schreiben
$iTimer = TimerInit()
$iBytes = _SerialCommSendData($hPort, $tSend) ; das Kommando senden
ConsoleWrite('Zeit (gesendet) : ' & Round(TimerDiff($iTimer), 3) & ' Bytes: ' & $iBytes & @CR)
ConsoleWrite('Daten (gesendet) : "' & BinaryToString(DllStructGetData($tSend, 1)) & '"' & @CR)
$iTimer = TimerInit()
$iBytes = _SerialCommReceiveData($hPort, $tReceive) ; die Bestaetigung vom Arduino empfangen
ConsoleWrite('Zeit (empfangen): ' & Round(TimerDiff($iTimer), 3) & ' Bytes: ' & $iBytes & @CR)
ConsoleWrite('Daten (empfangen): "' & BinaryToString(DllStructGetData($tReceive, 1)) & '"' & @CR & @CR)
Sleep(250)
Next
; die Strukturen loeschen
$tSend = 0
$tReceive = 0
_SerialCommClosePort($hPort)