Hallo zusammen,
irgendwie stehe ich gerade richtig auf dem Schlauch und weiß nicht wie ich da runterkomme!
Ein Arduino liest einen Beschleunigungssensor aus und liefert im Abstand von 10ms die Werte der drei Achsen + einem Zähler über die Com an den PC.
Die 4 Zahlen werden als Byte vom Arduino gesendet.
Im Terminal sieht das dann so aus:
----------------------
2,331,341,278
3,331,341,278
4,331,341,278
5,331,341,278
6,330,341,277
7,330,341,278
8,330,341,277
9,330,340,278
10,331,341,277
11,331,340,277
12,330,341,277
13,330,340,277
14,330,341,277
15,330,341,277
16,331,341,278
17,330,341,278
-----------------------
Mein PB-Prog soll diese Daten kontinuierlich lesen und zunächst in einer Textdatei abspeichern damit die Daten später ausgewertet werden können.
Im Augenblick schaffe ich es nicht die Daten durchgehend zu lesen und testweise mit AddGadgetItem(Editor_0,-1,text) in einem Fenster anzuzeigen.
Was ich auch nicht hinbekomme ist das Programm mit einem Button sauber zu schließen.
Vielleicht kann mir da mal jemand auf die Sprünge helfen?
LG
Wolfgang
Daten seriell lesen und speichern
-
- Beiträge: 328
- Registriert: 06.06.2013 20:37
- Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10
Daten seriell lesen und speichern
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Re: Daten seriell lesen und speichern
Ich hab dir mal ein kleines Beispiel zu deinen Fragen gebastelt.
Wenn es dir nicht ausführlich genug kommentiert ist, dann melde dich einfach.
Der Generator, er spielt sozusagen deinen Arduino vor
Und der eigentliche Teil, das Programm mit Fenster, Editorgadget und Dateispeicherung,
Mir ist noch aufgefallen, dass du sagst
Danke jetzt hab ich auch was gelernt
Praktisch!
(Hatte im Beispiel oben zuerst ein Listviewgadget, bevor ich deine Frage nochmal gelesen hab)
Wenn es dir nicht ausführlich genug kommentiert ist, dann melde dich einfach.
Der Generator, er spielt sozusagen deinen Arduino vor
Code: Alles auswählen
; Pair of virtual COM Ports created with
; socat -d -d pty,raw,echo=0 pty,raw,echo=0
; (Linux)
If OpenSerialPort(1,"/dev/pts/18",115200,0,8,1,0,1024,1024) = 0
Debug "Fehler beim COM Port öffnen"
End
EndIf
Repeat
Delay(10)
zaehler+1
string$=Str(zaehler)
For a=1 To 3
string$+","+Str(Random(899)+100)
Next
Debug string$
WriteSerialPortString(1,string$+#LF$)
Until GetClipboardText()="q"
CloseSerialPort(1)
Code: Alles auswählen
; Virtual COM Ports created with
; socat -d -d pty,raw,echo=0 pty,raw,echo=0
; (Linux)
Define einzelzeichen$ ; Speichert einzelnzeichen beim einlesen
Define zeile$="" ; speichert aktuelle Zeile
Define Dateipfad$="/home/macros/ram/test.txt"
; der einfachkeit halber für alles Fenster, Gadget, Datei den Index 1 weil wir jeweils nur eines haben.
If OpenSerialPort(1,"/dev/pts/19",9600,0,8,1,0,1024,1024)=0
Debug "Fehler beim COM Port öffnen"
End
EndIf
If CreateFile(1,Dateipfad$)=0
Debug "Fehler beim Datei erstellen!"
End
EndIf
OpenWindow(1,0,0,800,600,"COM Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(1,0,0,800,600)
einzelzeichen$=Space(1)
; Programmschleife / Hauptschleife
Repeat
; Wir warten maximal 5ms auf ein Event, damit wir die Nachrichten die alle 10ms kommen verarbeiten können
event=WaitWindowEvent(5)
bytes_available = AvailableSerialPortInput(1)
If bytes_available
For a=1 To bytes_available
ReadSerialPortData(1,@einzelzeichen$,1)
If einzelzeichen$=#LF$ ; Zeilenumbruch!
; Ausgeben an die zwei Sachen
AddGadgetItem(1,-1,zeile$)
WriteStringN(1,zeile$)
;Wir sorgen dafür, dass das Gadget nicht überläuft
If CountGadgetItems(1)=20
RemoveGadgetItem(1,0) ; Zählung beginnt bei 0
EndIf
; Zeile wieder leer
zeile$=""
Else
; Sonst an die Zeile anhängen
zeile$+einzelzeichen$
EndIf
Next
EndIf
; Wir beenden die Hauptschleife, wenn das X im Fenster gedrückt wird
Until event=#PB_Event_CloseWindow
; Aufräumen
CloseFile(1)
CloseSerialPort(1)
CloseWindow(1)
Zu einem Editorgadget kannst du nichts mit AddGadgetItem hinzufügen, oder .. doch das geht?AddGadgetItem(Editor_0,-1,text)
Danke jetzt hab ich auch was gelernt

(Hatte im Beispiel oben zuerst ein Listviewgadget, bevor ich deine Frage nochmal gelesen hab)

-
- Beiträge: 328
- Registriert: 06.06.2013 20:37
- Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10
Re: Daten seriell lesen und speichern
Hallo Macros,
erst mal vielen Dank, habe das Prog. etwas auf Windows geändert und jetzt läufts.
Im nächsten Schritt muss ich nun aus den digitalen Werten der drei Achsen die Beschleunigungen berechnen und dann eine grafische Anzeige am Bildschirm erzeugen.
LG
Wolfgang
erst mal vielen Dank, habe das Prog. etwas auf Windows geändert und jetzt läufts.
Im nächsten Schritt muss ich nun aus den digitalen Werten der drei Achsen die Beschleunigungen berechnen und dann eine grafische Anzeige am Bildschirm erzeugen.
LG
Wolfgang
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck