Danke, klappt fast perfekt.
bei jedem 2. Wert nur ein Fragment.
die Länge (= 7) abgefragt.
Da scheint es zu gehen.
Programm im Atmel Prozessor zu liegen.
gemacht. Läuft problemlos. Da ich noch
Code: Alles auswählen
Global Quit.l, send.b, serialflag.l, com.s, *Puffer.l, EventID.l, ComThread.l, ThreadFlag.l
#Window = 1
serialflag = 0
ThreadFlag = 0
*Puffer = AllocateMemory(16)
Procedure Empfangen(*nada)
Protected bytes.l, input.s{16}, sp1.s, sp2.s, file.s, i.l, cmd.s, buffer.b
If IsSerialPort(1)
;CreateFile(1, "R:\Sensor.dat")
While AvailableSerialPortInput(1)
FillMemory(*Puffer, 16, 0, #PB_Byte)
;bytes = ReadSerialPortData(1, @buffer, 1)
bytes = ReadSerialPortData(1, *Puffer, 16)
;input + chr(buffer)
input = PeekS(*Puffer,16,#PB_Ascii)
;If buffer = 10
If Right(input, 1) = Chr(10)
cmd = Left(input, Len(input))
sp1 = StringField(cmd, 1, "|")
sp2 = StringField(cmd, 2, "|")
If Len(sp1) = 7
SetGadgetText(5, sp1)
SetGadgetText(7, sp2)
AddGadgetItem(11, -1, sp1 + Chr(10) + sp2 + Chr(10) + "")
SetActiveGadget(11)
SetGadgetItemState(11, CountGadgetItems(11) -1, 1)
;WriteStringN(1, input)
EndIf
; FillMemory(*Puffer, 17, 0, #PB_Byte)
EndIf
Delay(200)
Wend
;CloseFile(1)
EndIf
EndProcedure
If OpenWindow(#Window, 10, 10, 670, 450, "DS1820 Lesen", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ButtonGadget(1,5, 10,100, 20, "Ende")
ButtonGadget(2,120, 10, 100, 20, "Start")
ButtonGadget(3,230, 10, 100, 20, "Open Port")
TextGadget(4, 5, 50, 80, 20, "Sensor 1")
StringGadget(5, 100, 50, 100, 20, "")
TextGadget(6, 250, 50,80, 20, "Sensor 2")
Stringgadget(7,350, 50, 100, 20, "")
ButtonGadget(8,340, 10, 100, 20, "Stop")
ButtonGadget(9, 450, 10, 100, 20, "Pause")
ButtonGadget(10, 560, 10, 100, 20, "Resume")
ListIconGadget(11, 10, 200, 350, 200, "Sensor 1", 100, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
AddGadgetColumn(11, 1, "Sensor 2", 120)
AddGadgetColumn(11, 2, "Spalte 3", 100)
Quit = 0
Repeat
; Hier kommt die Event - Schleife
EventID = WaitWindowEvent()
; Event abwarten und auswerten
Select EventID
Case #PB_Event_CloseWindow
; X im rechts oben für Schließen gedrückt.
Quit = 1
Case #PB_Event_Gadget ; Event für Gadgets
Select EventGadget()
Case 1
; Ende - Button gedrückt
Quit = 1
Case 2
If serialflag = 1
ComThread = CreateThread(@Empfangen(), 0)
If ComThread : ThreadFlag = 1 : EndIf
ClearGadgetItems(11)
EndIf
Case 3
; Port öffnen
com = InputRequester("COM Öffnen", "COMPORT:", "COM1")
If com > ""
If OpenSerialPort(1, com, 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1, 16)
serialflag = 1
MessageRequester("Fehler !", "Schnittstelle geöffnet !", #PB_MessageRequester_Ok)
Else
serialflag = 0
MessageRequester("Fehler !", "Konnte Schnittstelle nicht öffnen !", #PB_MessageRequester_Ok)
EndIf
EndIf
Case 8
If ThreadFlag = 1
KillThread(ComThread)
ThreadFlag = 0
CloseSerialPort(1)
serialflag = 0
MessageRequester("Info !", "Schnittstelle neu öffnen !", #PB_MessageRequester_Ok)
EndIf
Case 9
; Pause -> Thread
If ThreadFlag = 1
PauseThread(Comthread)
EndIf
Case 10
; Resume -> Thread
If ThreadFlag = 1
ResumeThread(ComThread)
EndIf
EndSelect
EndSelect
Until Quit = 1 Or EventID = #PB_Event_CloseWindow
EndIf
If serialflag = 1 : CloseSerialPort(1) : EndIf
FreeMemory(*Puffer)
End