Verfasst: 05.01.2007 16:21
jo für den com port zugriff verwende ich die MVCOM userlib,
und die ReadComBuffer parameter hab ich gleich im letzten code eingefügt
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