Arduino über USB steuern

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Hubsi

Betreff: Arduino über USB steuern

BeitragMi, Jul 24, 2024 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jul 26, 2024 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Den Serial Monitor der Arduino ide hast du aus?
between angels and insects

Hubsi

BeitragSo, Jul 28, 2024 10:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen lieben Dank Wink Dessen war ich mir nicht bewusst. Jetzt funktioniert die Sache. Hast mir sehr geholfen, danke Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group