und die ReadComBuffer parameter hab ich gleich im letzten code eingefügt

Code: Alles auswählen
EnableDebugger
;EnableExplicit
Define.w Temp,y, Tempalt , Xalt, X
Enumeration ; Gadgets
#cmdStart
#cmdPause
#cmdReset
#cmdDrucken
#cmdSpeichern
#cmdBeenden
#datDatum
#imgGadget
EndEnumeration
Procedure RahmenZeichnen()
Define x, y, Count
StartDrawing(WindowOutput(0)) ;Startet das Rahmenzeichnen
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(0))
; links
Line(58, 70, 0, 451)
Line(59, 70, 0, 451)
x = 16
For y = 483 To 93 Step -30
Count + 5
DrawText(x, y, RSet(Str(Count), 2, " ") + "°C")
Next
x = 53
For y = 505 To 85 Step -15
Line(x, y, 5, 0)
Line(x, y+1, 5, 0)
Next
; unten
Line(59, 520, 601, 0)
Line(59, 521, 601, 0)
y = 533
Count = 0
For x = 100 To 600 Step 50
Count + 5
DrawText(x, y, Str(Count))
Next
y = 522
For x = 83 To 658 Step 25
Line(x, y, 0, 8)
Line(x+1, y, 0, 8)
Next
DrawText(300, 560, "Zeit in Minuten")
StopDrawing()
EndProcedure
Global ThreadStop, HCom
Procedure ReadComBuffer(timeout)
Protected NbDataToRead, Empfang$, Timer
Repeat
If ElapsedMilliseconds() > Timer
Timer = ElapsedMilliseconds() + timeout
If HCom
NbDataToRead = ComInputBufferCount(HCom)
If NbDataToRead
Empfang$ = Space(NbDataToRead)
If ComRead(HCom, @Empfang$, NbDataToRead)
Debug Empfang$
EndIf
EndIf
Else
Debug "Thread Error: HCom=0"
ThreadStop = 1
EndIf
Else
Delay(10)
EndIf
Until ThreadStop
EndProcedure
If OpenWindow(0, 0, 0, 700, 600, "Templogger v0.0001...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ButtonGadget(#cmdStart, 50, 20, 60, 30, "Start")
;ButtonGadget(#cmdPause, 120, 20, 60, 30, "Pause")
;ButtonGadget(#cmdReset, 190, 20, 60, 30, "Reset")
;ButtonGadget(#cmdDrucken, 260, 20, 60, 30, "Drucken")
;ButtonGadget(#cmdSpeichern, 330, 20, 60, 30, "Speichern")
ButtonGadget(#cmdBeenden, 400, 20, 60, 30, "Beenden")
DateGadget(#datDatum, 500, 25, 180, 25, "Datum: %mm/%dd/%yyyy Zeit: %hh:%ii")
ImageGadget(#imgGadget, 60, 70, 0, 0, 0)
Else
Debug "CreateGadgetList() Error"
End
EndIf
EndIf
Repeat
If CreateImage(0, 600, 450)
StartDrawing(ImageOutput(0))
FillArea(0, 0, -1, $FFFFFF)
Y = 500 - ((Empfang -5)*6)
LineXY(Xalt, Tempalt, X, Y , 145)
x=x+1
If X = 598
x = 597
EndIf
xalt = x
Tempalt=Y
StopDrawing()
SetGadgetState(#imgGadget, ImageID(0))
Else
Debug "CreateImage() Error"
EndIf
LoadFont(0, "Fixedsys", 8)
Define Thread, Quit, MyCom$ = "Com2: baud=9600 parity=N data=8 stop=1"
;Repeat
RahmenZeichnen()
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #cmdStart
Debug GetGadgetText(#cmdStart)
If GetGadgetText(#cmdStart) = "Start"
HCom = ComOpen(MyCom$,0,256,0)
If HCom
SetGadgetText(#cmdStart, "Stop")
ThreadStop = 0
Thread = CreateThread(@ReadComBuffer(), 100)
Else
Debug "ComOpen() Error"
EndIf
Else ; stop
If Thread
ThreadStop = 1
WaitThread(Thread)
EndIf
If HCom
If ComClose(HCom)
HCom = 0
SetGadgetText(#cmdStart, "Start")
Else
Debug "ComClose() Error"
EndIf
EndIf
EndIf
Case #cmdBeenden
Quit = #True
EndSelect
Case #PB_Event_CloseWindow
Quit = #True
EndSelect
Until Quit
If Thread
ThreadStop = 1
WaitThread(Thread)
EndIf
If HCom
ComClose(HCom)
EndIf
End
Wie bekomm ich Empfang in Byte Form ?
Code: Alles auswählen
Ergebnis.l = Val(Empfang$)
Code: Alles auswählen
EnableExplicit
Enumeration ; Fenster
#Fenster
EndEnumeration
Enumeration ; Gadgets
#cmdStart
#cmdPause
#cmdReset
#cmdDrucken
#cmdSpeichern
#cmdBeenden
#datDatum
#imgGadget
EndEnumeration
Enumeration ; Bilder
#Bild
EndEnumeration
Enumeration ; Fonts
#Font
EndEnumeration
Procedure CheckBuffer(Buffer$)
ProcedureReturn Val(Buffer$)
EndProcedure
Procedure ReadComBuffer(HCom)
Protected NbDataToRead, Buffer$
If HCom
NbDataToRead = ComInputBufferCount(HCom)
If NbDataToRead
Buffer$ = Space(NbDataToRead)
If ComRead(HCom, @Buffer$, NbDataToRead)
ProcedureReturn CheckBuffer(Buffer$)
EndIf
EndIf
Else
Debug "Error: HCom=0"
EndIf
EndProcedure
Procedure ResetImage()
StartDrawing(ImageOutput(#Bild))
Box(0, 0, 640, 450, $FFFFFF)
StopDrawing()
SetGadgetState(#imgGadget, ImageID(#Bild))
EndProcedure
Procedure DrawCoordinates()
Protected x, y, z
StartDrawing(WindowOutput(#Fenster))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(#Font))
; links
Line(58, 70, 0, 451) : Line(59, 70, 0, 451)
x = 16
For y = 483 To 93 Step -30 : z + 5 : DrawText(x, y, RSet(Str(z), 2, " ") + "°C") : Next
x = 53
For y = 505 To 85 Step -15 : Line(x, y, 5, 0) : Line(x, y+1, 5, 0) : Next
; unten
Line(59, 520, 601, 0) : Line(59, 521, 601, 0)
y = 533 : z = 0
For x = 100 To 600 Step 50 : z + 5 : DrawText(x, y, Str(z)) : Next
y = 522
For x = 83 To 658 Step 25 : Line(x, y, 0, 8) : Line(x+1, y, 0, 8) : Next
DrawText(300, 560, "Zeit in Minuten")
StopDrawing()
EndProcedure
Global FullTime.f
Structure TEMPDATA
temp.l
time.l
EndStructure
Procedure DrawTemp(TempData.TEMPDATA())
Protected time.f, temp.f
Static OldTemp
ForEach TempData()
temp + TempData()\temp
time + TempData()\time
Next
time / 6000
temp / CountList(TempData())
ClearList(TempData())
If FullTime + time > 640
ResetImage()
FullTime - 640
EndIf
StartDrawing(ImageOutput(#Bild))
Line(FullTime, 450 - OldTemp * 6, time, (OldTemp - temp) * 6)
StopDrawing()
OldTemp = temp
FullTime + time
SetGadgetState(#imgGadget, ImageID(#Bild))
EndProcedure
Define Title$ = "Templogger v0.0002"
If OpenWindow(#Fenster, 0, 0, 700, 600, Title$, #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#Fenster))
ButtonGadget(#cmdStart, 50, 20, 60, 30, "Start")
ButtonGadget(#cmdPause, 120, 20, 60, 30, "Pause")
DisableGadget(#cmdPause, 1)
ButtonGadget(#cmdReset, 190, 20, 60, 30, "Reset")
ButtonGadget(#cmdDrucken, 260, 20, 60, 30, "Drucken")
ButtonGadget(#cmdSpeichern, 330, 20, 60, 30, "Speichern")
ButtonGadget(#cmdBeenden, 400, 20, 60, 30, "Beenden")
DateGadget(#datDatum, 500, 25, 180, 25, "Datum: %mm/%dd/%yyyy Zeit: %hh:%ii")
ImageGadget(#imgGadget, 60, 70, 0, 0, 0)
Else
Debug "CreateGadgetList() Error"
End
EndIf
EndIf
If CreateImage(0, 600, 450)
ResetImage()
Else
Debug "CreateImage() Error"
EndIf
LoadFont(0, "Fixedsys", 8)
Define Quit, HCom, MyCom$, ComTimer, DrawTimer, temp, time, StartTime
NewList TempData.TEMPDATA()
#ComTimeOut = 300
#DrawTimeOut = 30000
MyCom$ = "Com2: baud=9600 parity=N data=8 stop=1"
Repeat
If HCom
time = ElapsedMilliseconds()
If time > ComTimer
ComTimer = time + #ComTimeOut
AddElement(TempData())
TempData()\temp = ReadComBuffer(HCom)
TempData()\time = time - StartTime
StartTime = time
EndIf
If time > DrawTimer
DrawTimer = time + #DrawTimeOut
DrawTemp(TempData())
EndIf
EndIf
Select WaitWindowEvent(50)
Case #PB_Event_Repaint
DrawCoordinates()
Case #PB_Event_Gadget
Select EventGadget()
Case #cmdStart
HCom = ComOpen(MyCom$,0,255,0)
If HCom
DisableGadget(#cmdStart, 1)
DisableGadget(#cmdPause, 0)
StartTime = ElapsedMilliseconds()
Else
Debug "ComOpen() Error"
EndIf
SetGadgetState(#datDatum, Date())
Case #cmdPause
If HCom
If ComClose(HCom)
DisableGadget(#cmdPause, 1)
DisableGadget(#cmdStart, 0)
HCom = 0
Else
Debug "ComClose() Error"
EndIf
EndIf
Case #cmdReset
ResetImage()
FullTime = 0
StartTime = ElapsedMilliseconds()
Case #cmdDrucken
; Drucken
Case #cmdSpeichern
; Speichern
Case #cmdBeenden
Quit = #TRUE
EndSelect
Case #PB_Event_CloseWindow
Quit = #TRUE
Case 0
Delay(1)
EndSelect
Until Quit
If HCom
ComClose(HCom)
EndIf
End