Guten morgen an alle!
Ich bin gerade dabei mit über die serielle Schnittstelle Daten einzulesen um diese dann in einem Graph als Messkurve darzustellen (x/y-Achse). Ganz toll wäre es wenn man auch bestimmte Bereiche aus der Darstellung Zoomen könnte.
Wie macht man denn sowas am besten?
Danke
Diagramm zeichnen
in etwa so ?
die Werte für dx und dy sind dann natürlich Deine ausgelesenen
Werte . Zoomen kannst Du indem Du ein wenig mit den
die Werte für dx und dy sind dann natürlich Deine ausgelesenen
Werte . Zoomen kannst Du indem Du ein wenig mit den
Code: Alles auswählen
;PB4
Fenster=OpenWindow(#PB_Any,0,0,800,700,"test")
CreateGadgetList(WindowID(Fenster))
ww=WindowWidth(Fenster) ;Fensterbreite merken
wh=WindowHeight(Fenster) ;Fensterhöhe merken
ImageGadget(0,0,0,ww,wh,0) ;Imagegadget erzeugen
CreateImage(0,ww,wh) ;Bild erzeugen
StartDrawing(ImageOutput(0)) ; Bildmalen
;Hintergrund weiß
Box(0,0,ww,wh,RGB(255,255,255))
;Koordinatenkreuz in cyan
Line(0,wh/2,ww,0,RGB(0,255,255))
Line(ww/2,0,0,wh,RGB(0,255,255))
faktor.f=0.01
schiebx=0 ;negativ nach links
schieby=0 ;negativ nach oben
;die Werte als rote Punkte
; hier etwas willkürlich ne Formel der Art y=x*x*x
; bei Dir stehen hier dann die ausgelesenen Werte
; der Wertebereich
For x=-ww/faktor/2 To ww/faktor/2
dx=(x*faktor*2+ww/2)+schiebx
y=Pow(x*faktor,3)
dy=(wh-(y/100)-wh/2)+schieby
;Debug Str(dx)+" "+Str(dy)
If dx>=0 And dy >=0 And dy <=wh/faktor And dx<=ww/faktor ;Übermalen ist verboten
Plot(dx,dy,RGB(255,0,0))
EndIf
Next
StopDrawing()
SetGadgetState(0,ImageID(0)) ;Bild zuweisen
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
Zuletzt geändert von bobobo am 22.06.2006 15:29, insgesamt 1-mal geändert.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Diagramm
Danke für die Hilfe! Funktioniert so
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Diagramm
Wie ich schon sagte gehts so.
Was ich aber brauche ist eine Routine, die Messwerte ähnlich wie ein Oszilloskop oder auch Messwertschreiber darstellt.
Gibt es hierzu irgendwo Beispiele?
Martin
Was ich aber brauche ist eine Routine, die Messwerte ähnlich wie ein Oszilloskop oder auch Messwertschreiber darstellt.
Gibt es hierzu irgendwo Beispiele?
Martin
weiß ich nich
aber das kannst Du auch selber häkeln.
Prinzipiell weist Du dem ImageGadget immer ein neues Bild zu.
Das Bild wird nach Bedarf gemalt.
In etwa so. Das folgende malt ein neues Bild und weist dies
dem Imagegadget zu solange Windowevents für das Programm
eintreffen (mit der Maus drüberwackeln)
aber das kannst Du auch selber häkeln.
Prinzipiell weist Du dem ImageGadget immer ein neues Bild zu.
Das Bild wird nach Bedarf gemalt.
In etwa so. Das folgende malt ein neues Bild und weist dies
dem Imagegadget zu solange Windowevents für das Programm
eintreffen (mit der Maus drüberwackeln)
Code: Alles auswählen
;PB4
Fenster=OpenWindow(#PB_Any,0,0,800,700,"test")
CreateGadgetList(WindowID(Fenster))
ww=WindowWidth(Fenster) ;Fensterbreite merken
wh=WindowHeight(Fenster) ;Fensterhöhe merken
ImageGadget(0,0,0,ww,wh,0) ;Imagegadget erzeugen
CreateImage(0,ww,wh) ;Bild erzeugen
Repeat
StartDrawing(ImageOutput(0)) ; Bildmalen
;Hintergrund weiß
Box(0,0,ww,wh,RGB(32,64,32))
;Koordinatenkreuz in cyan
Line(0,wh/2,ww,0,RGB(0,128,0))
;Line(ww/2,0,0,wh,RGB(0,255,255))
For x=0 To ww
dx.f=x/5+(Random(10)+40)
;y=Pow(x*faktor,3)
dy.f=Sin(dx)*(Random(2)+2)+350
;dy=(wh-(y/100)-wh/2)+schieby
;Debug StrF(dx)+" "+StrF(dy)
If (dx>=0 And dx <=wh) And (dy >=0 And dx<=ww) ;Übermalen ist verboten
Plot(dx,dy,RGB(255,255,0))
EndIf
Next
StopDrawing()
SetGadgetState(0,ImageID(0)) ;Bild zuweisen IN DER REPEATSCHLEIFE
Until WaitWindowEvent()=#PB_Event_CloseWindow
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
hab mal ne kleine demo dazu gemacht. ich hab ein array genommen, man könnte natürlich auch LL's nehmen. mit der mouse kann man provisorisch vertikal und horizontal zoomen.
Code: Alles auswählen
xZoom.f
yZoom.f
;currPos.l=0
Dim values.l(100)
win=OpenWindow(#PB_Any, 10,10,800,600, "")
imgNr=CreateImage(#PB_Any, 800,600)
imgHd=ImageID(imgNr)
Repeat
ExamineDesktops()
xZoom= DesktopMouseX()/100.0
yZoom= (DesktopHeight(0)-DesktopMouseY())/100.0
StartDrawing( ImageOutput(imgNr) )
Box(0,0, 800,600, $303030 )
For i=1 To 100
LineXY( i*xZoom, 600-values(i-1)*yZoom, i*xZoom+xZoom, 600-values(i)*yZoom , $0000ff)
Next
StopDrawing()
For i=0 To 99
values(i)=values(i+1)
Next
values(100)=values(99)+Random(6)-3
If values(100)<0 : values(100)=0 : EndIf
If values(100)>100 : values(100)=100 : EndIf
StartDrawing( WindowOutput(win) )
DrawImage( imgHd,0,0)
StopDrawing()
event=WindowEvent()
Select event
Case #PB_Event_CloseWindow
quit=1
EndSelect
Delay(10)
Until quit
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Diagramm
Vielen Dank für die Hilfe. Das ist es nun was ich gesucht habe.
Martin
Martin