Arduino über USB steuern
Übersicht BlitzBasic Allgemein
HubsiBetreff: Arduino über USB steuern |
Mi, Jul 24, 2024 19:26 Antworten mit Zitat |
|
---|---|---|
Tach beisammen,
ich möchte gerne einem Arduino Uno R3 (resp. Funduino) via USB Daten übertragen. Als Betriebssystem ist hier Win 7 installiert. Der Controller steckt an COM6. Ich kann den Cobtroller via Seriellem Monitor in der Arduino-IDE wunderbar steuern, über mein kleines Testprogrämmelchen jedoch nicht. Hier mal der Code und der Sketch: Blitz: Code: [AUSKLAPPEN] Const GENERIC_READ = $80000000
Const GENERIC_WRITE = $40000000 Const OPEN_EXISTING = 3 Const FILE_ATTRIBUTE_NORMAL = $80 Const INVALID_HANDLE_VALUE = -1 Global Message$ Local file,win,inp,but,tmp,out,e_source file% = OpenCommPort(6) SetComm(file%, "baud=9600 parity=N data=8 stop=1") SetCommTimeouts(file%, 50, 50) win=CreateWindow("test",200,100,300,300,Desktop()) inp=CreateTextField(50,30,100,20,win) but=CreateButton("Senden",50,60,100,30,win) out=CreateButton("Raus hier",50,100,100,30,win) Repeat tmp=WaitEvent(30) Select tmp Case $401 e_source=EventSource() If e_source=but Then Message=TextFieldText(inp) SendMessage(file%, Message$+Chr$(13)+Chr$(10)) Notify "Gesendet" EndIf If e_source=out Then Exit EndIf End Select Message$ = RecvMessage(file%) If Message$ <> "" Then Notify "Recieved : "+Message$ Else ;Print CurrentTime()+ "| " EndIf Forever CloseCommPort(file%) End Function SendMessage%(File%, Command$) Local Buffer%, Offset%, Success% Buffer% = CreateBank(Len(Command$)) For Offset% = 0 To Len(Command$)-1 PokeByte Buffer%, Offset%, Asc(Mid$(Command$, Offset%+1, 1)) Next Success% = WriteComm(File%, Buffer%, Len(Command$)) FreeBank Buffer% Return Success% End Function Function RecvMessage$(File%) Local Buffer%, Offset%, Count%, Message$ Buffer% = CreateBank(1024) Count% = ReadComm(File%, Buffer%, 1024) If Count% > 0 Then For Offset% = 0 To Count-1 Message$ = Message$+Chr$(PeekByte(Buffer%, Offset%)) Next Return Message$ Else FreeBank Buffer% Return "" EndIf End Function Function OpenCommPort%(Port%) Local File% If (Port < 0) Or (Port > 255) Then Return -1 ; Open CommPort File% = apiCreateFile("COM"+Port%, GENERIC_READ Or GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0) If File% = INVALID_HANDLE_VALUE Then Return -1 Else Return File% EndIf End Function Function CloseCommPort%(File%) Return apiCloseHandle(File%) End Function Function WriteComm%(File%, Buffer%, Size%) Local Count%, Count2% If Size% > BankSize(Buffer%) Then Return 0 Count% = CreateBank(4) If apiWriteFile(File%, Buffer%, Size%, Count%, 0) = 0 Then FreeBank Count% Return 0 Else Count2% = PeekInt(Count%, 0) FreeBank Count% Return Count2% EndIf End Function Function ReadComm%(File%, Buffer%, Size%) Local Count%, Count2% If Size% > BankSize(Buffer%) Then Return 0 Count% = CreateBank(4) If apiReadFile(File%, Buffer%, Size%, Count%, 0) = 0 Then FreeBank Count% Return 0 Else Count2% = PeekInt(Count%, 0) FreeBank Count% Return Count2% EndIf End Function Function SetComm%(File%, Settings$) Local DCB% DCB% = CreateBank(28) ; Get States If apiGetCommState(File%, DCB) = 0 Then FreeBank DCB% Return False ElseIf PeekInt(DCB%, 0) <> 28 FreeBank DCB% Return False EndIf ; Build DCB If apiBuildCommDCB(Settings$, DCB%) = 0 Then FreeBank DCB% Return False EndIf ; Set States If apiSetCommState(File%, DCB%) = 0 Then FreeBank DCB% Return False Else FreeBank DCB% Return True EndIf End Function Function SetCommTimeouts%(File%, ReadTime%, WriteTime%) Local TimeOuts% ; Get timeouts TimeOuts% = CreateBank(40) If apiGetCommTimeouts(File%, TimeOuts%) = 0 Then FreeBank TimeOuts Return False EndIf PokeInt TimeOuts%, 8, ReadTime% ; ReadTotalTimeoutConstant PokeInt TimeOuts%, 16, WriteTime% ; WriteTotalTimeoutConstant ; Set Timeouts If apiSetCommTimeouts(File%, TimeOuts%) = 0 Then FreeBank TimeOuts Return False Else FreeBank TimeOuts Return True EndIf End Function Habe den Blitzcode von hier: https://www.blitzforum.de/foru...ht=arduino zum testen verwendet. Hier noch der Sketch: Code: [AUSKLAPPEN] #define ledPin 13
int incomingByte; void setup() { Serial.begin(9600); Serial.print("* startup "); Serial.println(""); pinMode(ledPin, OUTPUT); } void loop() { if (Serial.available() > 0) { incomingByte = Serial.read(); Serial.println("Da ist was gekommen"); if (incomingByte == '1') { digitalWrite(ledPin, HIGH); Serial.println("LED ist eingeschaltet!"); } if (incomingByte == '0') { digitalWrite(ledPin, LOW); Serial.println("LED ist ausgeschaltet!"); } } } Alles ganz primitiv gehalten um erstmal Fehler zu finden. Jetzt ist die Frage was ist falsch? An und für sich ist der Funduino ja ansprechbar über den Seriellen Monitor der IDE, nur das Blitzprogramm bleibt aussen vor. Hat da jemand einen Tip für mich? |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Jan_Ehemaliger Admin |
Fr, Jul 26, 2024 15:12 Antworten mit Zitat |
|
---|---|---|
Den Serial Monitor der Arduino ide hast du aus? | ||
between angels and insects |
Hubsi |
So, Jul 28, 2024 10:27 Antworten mit Zitat |
|
---|---|---|
Vielen lieben Dank Dessen war ich mir nicht bewusst. Jetzt funktioniert die Sache. Hast mir sehr geholfen, danke | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Übersicht BlitzBasic Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group