Seite 1 von 2

Benötige Einstiegshilfe.

Verfasst: 04.01.2007 00:01
von Frischling
Hallo, bin ganz neu im Programmieren und möchte mir gleich mal ein kleines Tool basteln.
Es soll die Daten eines Atmegas empfaangen und sie als Grafik darstellen.
Ich messe die Temperatur und sende diese an die Com Schnittstelle.

Mit Hyperterminel kann ich mir die gesendetten Tempdaten ansehen.

Leider fehlen mir die grundlagen zum Programieren mit PB so das ich nicht recht weiter komm mit meinem Programm drum bitte ich euch um etwas Hilfe.

mein Programm soll folgendes können
Empfangen der Daten vom MC am bester wäre wenn man zwischen com 1 und 2 wählen könnt
Es sind folgende Button vorgesehen.
Start zum Starten der Aufzeichnung
Pause zum Anhalten der Aufzeichnung
Reset zum Rücksetzten
Speichern soll mir ein Bild der Temp kurve speichern
Drucken um die Kurve zu Drucken
Beenden -- das hab ich schon hinbekomm :-)

Ich poste euch mal was ich bis jetzt zusammen gebröselt hab ( nicht lache3n ist echt mein erster geh versuch)

Code: Alles auswählen

   
If InitSprite() = 0
MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
End
EndIf
  
If OpenWindow(0, 0, 0, 700, 600, "Templogger  V1.0...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
;           NR. X    Y Länge Breite Name    
ButtonGadget(1, 50, 20, 60, 30, "Start")
EndIf    
If CreateGadgetList(WindowID(0))
ButtonGadget(2, 120, 20, 60, 30, "Pause")
EndIf    
If CreateGadgetList(WindowID(0))
ButtonGadget(3, 190, 20, 60, 30, "Reset")
EndIf    
If CreateGadgetList(WindowID(0))
ButtonGadget(4, 260, 20, 60, 30, "Drucken")
EndIf
If CreateGadgetList(WindowID(0))
ButtonGadget(5, 330, 20, 60, 30, "Speichern")
EndIf
If CreateGadgetList(WindowID(0))
ButtonGadget(6, 400, 20, 60, 30, "Beenden")
EndIf    

DateGadget(0, 500, 25, 180, 25,  "Datum: %mm/%dd/%yyyy Zeit: %hh:%ii")
     ; Repeat: Until WaitWindowEvent() = #PB_Event_Gadget 
  
StartDrawing(WindowOutput(0)) ;Startet das Rahmenzeichnen 

;        X   Y     Wert  Farbe Schrift, Hintergrund

DrawText(5, 500, " 5°C" , 0 ,RGB(216,208,200))
DrawText(5, 470, "10°C" , 0 ,RGB(216,208,200)) ;Abstand y achse ist 30 Pixel 
DrawText(5, 440, "15°C" , 0 ,RGB(216,208,200))
DrawText(5, 410, "20°C" , 0 ,RGB(216,208,200));Hautstriche aller 5°C Y Achse
DrawText(5, 380, "25°C" , 0 ,RGB(216,208,200))
DrawText(5, 350, "30°C" , 0 ,RGB(216,208,200))
DrawText(5, 320, "35°C" , 0 ,RGB(216,208,200))
DrawText(5, 290, "40°C" , 0 ,RGB(216,208,200))
DrawText(5, 260, "45°C" , 0 ,RGB(216,208,200))
DrawText(5, 230, "50°C" , 0 ,RGB(216,208,200))
DrawText(5, 200, "55°C" , 0 ,RGB(216,208,200))
DrawText(5, 170, "60°C" , 0 ,RGB(216,208,200))
DrawText(5, 140, "65°C" , 0 ,RGB(216,208,200))
DrawText(5, 110, "70°C" , 0 ,RGB(216,208,200))
DrawText(5, 80, "75°C" , 0 ,RGB(216,208,200))

DrawText(41, 515,"_",   0 ,RGB(216,208,200))  ; Hilfsstriche aller 2,5°C Y Achse
DrawText(41, 500, "-" , 0 ,RGB(216,208,200))
DrawText(41, 485, "-" , 0 ,RGB(216,208,200))  
DrawText(41, 470, "-" , 0 ,RGB(216,208,200))
DrawText(41, 455, "-" , 0 ,RGB(216,208,200))
DrawText(41, 440, "-" , 0 ,RGB(216,208,200))
DrawText(41, 425, "-" , 0 ,RGB(216,208,200))
DrawText(41, 410, "-" , 0 ,RGB(216,208,200))
DrawText(41, 395, "-" , 0 ,RGB(216,208,200))
DrawText(41, 380, "-" , 0 ,RGB(216,208,200)) 
DrawText(41, 365, "-" , 0 ,RGB(216,208,200))
DrawText(41, 350, "-" , 0 ,RGB(216,208,200))
DrawText(41, 335, "-" , 0 ,RGB(216,208,200))
DrawText(41, 320, "-" , 0 ,RGB(216,208,200))
DrawText(41, 305, "-" , 0 ,RGB(216,208,200))
DrawText(41, 290, "-" , 0 ,RGB(216,208,200))
DrawText(41, 275, "-" , 0 ,RGB(216,208,200))
DrawText(41, 260, "-" , 0 ,RGB(216,208,200))
DrawText(41, 245, "-" , 0 ,RGB(216,208,200))
DrawText(41, 230, "-" , 0 ,RGB(216,208,200))
DrawText(41, 215, "-" , 0 ,RGB(216,208,200))
DrawText(41, 200, "-" , 0 ,RGB(216,208,200))
DrawText(41, 185, "-" , 0 ,RGB(216,208,200))
DrawText(41, 170, "-" , 0 ,RGB(216,208,200))
DrawText(41, 155, "-" , 0 ,RGB(216,208,200))
DrawText(41, 140, "-" , 0 ,RGB(216,208,200))
DrawText(41, 125, "-" , 0 ,RGB(216,208,200))
DrawText(41, 110, "-" , 0 ,RGB(216,208,200))
DrawText(41, 95, "-" , 0 ,RGB(216,208,200))
DrawText(41, 80, "-" , 0 ,RGB(216,208,200))

; X Achsen Striche mit Beschriftung. 
DrawText(50, 529, "|" , 0 ,RGB(216,208,200))  ; Hilfsstriche aller 5 Min X Achse
DrawText(50, 539, "5" , 0 ,RGB(216,208,200))
DrawText(100, 529, "|" , 0 ,RGB(216,208,200))
DrawText(100, 539, "10" , 0 ,RGB(216,208,200))
DrawText(150, 529, "|" , 0 ,RGB(216,208,200))
DrawText(150, 539, "15" , 0 ,RGB(216,208,200))
DrawText(200, 529, "|" , 0 ,RGB(216,208,200))
DrawText(200, 539, "20" , 0 ,RGB(216,208,200))
DrawText(250, 529, "|" , 0 ,RGB(216,208,200))
DrawText(250, 539, "25" , 0 ,RGB(216,208,200))
DrawText(300, 529,"|",   0 ,RGB(216,208,200))  
DrawText(300, 539,"30",   0 ,RGB(216,208,200)) 
DrawText(350, 529, "|" , 0 ,RGB(216,208,200))
DrawText(350, 539, "35" , 0 ,RGB(216,208,200))
DrawText(400, 529, "|" , 0 ,RGB(216,208,200))  
DrawText(400, 539, "40" , 0 ,RGB(216,208,200))
DrawText(450, 529, "|" , 0 ,RGB(216,208,200))
DrawText(450, 539, "45" , 0 ,RGB(216,208,200))
DrawText(500, 529, "|" , 0 ,RGB(216,208,200))
DrawText(500, 539, "50" , 0 ,RGB(216,208,200))
DrawText(550, 529, "|" , 0 ,RGB(216,208,200))
DrawText(550, 539, "55" , 0 ,RGB(216,208,200))
DrawText(600, 529, "|" , 0 ,RGB(216,208,200))
DrawText(600, 539, "60" , 0 ,RGB(216,208,200))

DrawText(650, 529, "|" , 0 ,RGB(216,208,200))

LineXY(39, 529, 650, 529 , 0)  ;Rahmen unten
LineXY(40, 530, 651, 530 , 0)  ;Rahmen unten
LineXY(39, 70, 39, 529 , 0)    ;Rahmen links
LineXY(40, 70, 40, 530 , 0)    ;Rahmen links

DrawText(300, 560, "Zeit in Minuten" , 0 ,RGB(216,208,200));X Beschriftung
StopDrawing()

EndIf 
Repeat      
Repeat
   
    Event = WindowEvent()    
   Select Event 
    Case #PB_Event_Gadget
    If EventGadget() = 6
    End
    EndIf
        
    Case #PB_Event_CloseWindow
    End 
    EndSelect
   Until Event = 0
ForEver  
      
Wäre euch sehr dankbar wenn ihr mir bei meinem programm helfen könntet und mir paar Tipps geben könntet wie ich es am besten anstellen kann denk mal das es ja nicht al zu schwer sein dürfe .
schon mal 1000 Dank im vorraus

Verfasst: 04.01.2007 01:34
von tobe
hi Frischling,

für den zugriff auf den com-port schaust du am besten mal hier rein:
Ansteuerung des Com1-Anschlusses

Re: Benötige Einstiegshilfe.

Verfasst: 04.01.2007 01:39
von Kiffi
Hallo Frischling,

willkommen im Board! :-)

Zu Deinem Code: Ich habe zu vorgerückter Stunde nicht mehr so viel Zeit,
den gesamten Code zu kommentieren. Deshalb hier zwei Verbesserungs-
vorschläge (ich bin mir sicher, dass Du zu dem Rest auch noch hilfreiche
Tipps bekommen wirst):
Frischling hat geschrieben:

Code: Alles auswählen

If CreateGadgetList(WindowID(0))
;           NR. X    Y Länge Breite Name    
ButtonGadget(1, 50, 20, 60, 30, "Start")
EndIf    
If CreateGadgetList(WindowID(0))
ButtonGadget(2, 120, 20, 60, 30, "Pause")
EndIf
[...]
CreateGadgetList() muss nur einmal pro Window aufgerufen werden und
nicht für jedes Gadget einzeln. Also so:

Code: Alles auswählen

If CreateGadgetList(WindowID(0))
;           NR. X    Y Länge Breite Name    
ButtonGadget(1, 50, 20, 60, 30, "Start")
ButtonGadget(2, 120, 20, 60, 30, "Pause")
[...]
Anstatt der Gadget-Nummer würde ich Konstanten verwenden. Wenn Dein
Programm irgendwann mal umfangreicher wird, wirst Du Schwierigkeiten
haben, die Gadgets nur anhand Ihrer Nummer zu identifizieren (Was war
noch mal Gadget Nummer 5? Ein ButtonGadget? Ein DateGadget?)

Die Enumerationen sorgen dafür, dass die Konstanten automatisch
sauber durchnummeriert werden.

Code: Alles auswählen

Enumeration
  #frmMain
EndEnumeration

Enumeration
  #cmdStart
  #cmdPause
  #cmdReset
  #cmdDrucken
  #cmdSpeichern
  #cmdBeenden
  #datDatum
EndEnumeration

If OpenWindow(#frmMain, 0, 0, 700, 600, "Templogger  V1.0...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(#frmMain))
    ;           NR. X    Y Länge Breite Name   
    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")
    
    StartDrawing(WindowOutput(#frmMain)) ;Startet das Rahmenzeichnen
[...]
In der Event-Schleife kannst Du dann auf diese Konstanten testen und hast
einen besseren Durchblick, welches Gadget ein Event ausgelöst hat.

Code: Alles auswählen

 Repeat
      
      Event = WindowEvent()
      
      Select Event
        
        Case #PB_Event_Gadget
          
          If EventGadget() = #cmdBeenden
            Quit = #True
          EndIf
          
        Case #PB_Event_CloseWindow
          Quit = #True
          
      EndSelect
      
    Until Quit = #True
Wie geschrieben: In Deinem Code sind noch mehr verbesserungswürdige
Sachen. Aber gemeinsam mit den anderen Boardies kriegst Du das schon
hin. ;-)
Frischling hat geschrieben:nicht lache3n ist echt mein erster geh versuch
Wir haben alle mal kleine angefangen ;-) Wäre aber dennoch nett, wenn
Du Dir vor dem Abschicken Deiner zukünftigen Postings den Beitrag noch
mal in Ruhe durchlesen würdest (geht mit dem Preview-Button). Dann
kannst Du vorher noch den einen oder anderen Tippfehler korrigieren. ;-)

Grüße ... Kiffi

Verfasst: 04.01.2007 22:02
von Frischling
Nabend,
hab eure tipps mir angenommen und soweit das programm verbessert.

2 Probleme hab ich jetzt

1.

Code: Alles auswählen

MyCom.s = "Com2: baud=9600 parity=N data=8 stop=1"
HCom.l
HCom = ComOpen(MyCom,0,255,255) 
Wenn ich das Richtig sehe öffnet mir dieses meinen Com2 Port

Wie mach ich es jetzt am Besten das wenn ich mein Start Knopf drück er mir die Werte vom Com Port holt und sie mir in einer Variablen hinterlegt mit der ich dann meine Linie zeichnen kann?

Wollte es so machen das ich ca. aller 30 Sek mir die Werte auf dem Monitor Ausgeben lasse aber nicht den Aktuellen Wert zeichne sondern ein Mittelwert aus der letzten halben Minute zum Zeichnen nutze.

Was auch noch nicht Optimal ist wenn ich mir das jetzige Programm ausgeben lass und ich schiebe das Fenster bissel aus dem Anzeigefeld des Monitors sind meine X u. Y Achsen Werte weg.

Code-Tags gesetzt - Kaeru fecit
btw. wilkommen im board.

Verfasst: 05.01.2007 08:36
von tobe
ich hab deinen code mal umgebaut,
jetzt wird alle 100ms der ganze buffer des com-ports ausgegeben:

Code: Alles auswählen

EnableExplicit

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
If CreateImage(0, 600, 450)
  StartDrawing(ImageOutput(0))
  FillArea(0, 0, -1, $FFFFFF)
  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
hoffentlich war das jetzt nicht zuviel aufeinmal ;)

Verfasst: 05.01.2007 10:45
von ts-soft
@tobe
Threads sind für gleichzeitig ablaufende Dinge. Timer für periodisch
ablaufende Dinge. Timer wäre günstiger, vor allem in der Hinsicht, das es
sich um einen Anfänger handelt. Bei Fehler läßt sich wegen des Threads nicht
mehr korrekt Debuggen.

just my 2 cents

Verfasst: 05.01.2007 15:05
von tobe
@ts-soft
da hast du schon recht.
ich hab mich für einen thread entschieden,
weil in der pb-hilfe nix über timer steht und ehrlich gesagt:
ich hab noch nie einen timer benutzt :)
welche art timer meinst du:
API:

Code: Alles auswählen

SetTimer_(hwnd, nIDEvent, uElapse, lpTimerFunc)
PBOSL:

Code: Alles auswählen

StartTimer( #Timer , MilliSec , @procedure() )
oder ist das eh das gleiche ?

ps: mein thread hat auch einen timer ;)

Verfasst: 05.01.2007 15:31
von ts-soft
Der PBOSL Timer ist ein HighResTimer (Multimedia-Timer) mit höherer Genauigkeit. findeste auch als Include hier:
http://www.purebasic.fr/german/viewtopic.php?t=9938

Für normalle Windowsanwendungen sollte der API-Timer genügen. Allerdings
ist die Benutzung des PBOSL-Timers für Einsteiger sicherlich einfacher

Verfasst: 05.01.2007 15:49
von tobe
jetzt hab ich einen API-Timer eingebaut :)

Code: Alles auswählen

EnableExplicit

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 HCom

Procedure ReadComBuffer(a.l, b.l, c.l, d.l)
  Protected NbDataToRead, Empfang$
  If HCom
    NbDataToRead = ComInputBufferCount(HCom)
    If NbDataToRead
      Empfang$ = Space(NbDataToRead)
      If ComRead(HCom, @Empfang$, NbDataToRead)
        Debug Empfang$
      EndIf
    EndIf
  EndIf
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
If CreateImage(0, 600, 450)
  StartDrawing(ImageOutput(0))
  FillArea(0, 0, -1, $FFFFFF)
  StopDrawing()
  SetGadgetState(#imgGadget, ImageID(0))
Else
  Debug "CreateImage() Error"
EndIf
LoadFont(0, "Fixedsys", 8)

Define Timer, 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")
              Timer = SetTimer_(0, 0, 100, @ReadComBuffer())
            Else
              Debug "ComOpen() Error"
            EndIf
          Else ; stop
            If Timer
              If KillTimer_(0, Timer)
                Timer = 0
              EndIf
            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 Timer
  KillTimer_(0, Timer)
EndIf
If HCom
  ComClose(HCom)
EndIf
End
und danke für die timer tips, das schau ich mir gleich nochmal etwas genauer an ;)

Verfasst: 05.01.2007 15:58
von ts-soft
Kann den Code leider nicht testen, benötigt wohl eine UserLib.

Deine TimerProcedure "ReadComBuffer() " sollte vier Parameter haben, auch
wenn Du sie nicht nutzt :wink: ReadComBuffer(a.l, b.l, c.l, d.l)

Ansonsten könnte es Probleme mit dem Stack geben.

// Nachtrag:
Hier nochmal nachsehen: http://www.purebasic.fr/german/viewtopi ... r&start=10