Italia
Foro

Maus am Schwungrad vom Trimmrad: y-Mausposition setzen , abfragen und ausgeben überfordert

 
- Page 1 -



funkheld
Hallo, guten Tag.
Ich habe ein kombinationsproblem mit der Maus.

Ich habe circa dem Schwungrad von meinem Trimmrad eine optische Mausplatine befestigt(5 Euro-Maus). Die Befestigung ist so, das, wenn ich trete, die Mausposition von y-0 nach y-Max geht.

Wie kann man es machen, das die Maus zb auf y=0 gesetzt wird und bei y>500 ein Zähler gezählt wird und die Maus dann wieder auf y=0 gesetzt wird.
Dies dann in einer Schleife abläuft.

Diese kombination bekomme ich nicht hin, weil die Maus bei einer bestimmten Geschwindigkeit überfordert ist, sie zählt dann nicht mehr weiter.
Mit "sleep 1" geht es auch nicht.

Woran liegt das.
Ich compiliere mit XPSE.
KompilierenMarkierenSeparieren
 {$cleq}
Def @Getcursorpos(1) !"user32","GetCursorPos"
Def @Setcursorpos(2) !"USER32","SetCursorPos"
Struct Mauskoordinaten = X&,Y&
Declare Xpos&,Ypos&,Curpos#,zaehler&
Windowstyle 31
Windowtitle "Cursorposition ermitteln"
Window 200,0 - 440,440
@Setcursorpos (100,0)

While 0 = 0

    Sleep 5
    Dim Curpos#,Mauskoordinaten
    @Getcursorpos(Curpos#)
    Xpos& = Curpos#.X&
    Ypos& = Curpos#.Y&

    if Ypos& > 500

        @Setcursorpos (100,0)
        zaehler&=zaehler&+1

    endif

    Dispose Curpos#
    Drawtext 0,0,"Zähler: " + zaehler& + @Space$(30)

Endwhile


Danke.

Gruss
 
10.07.2012  
 



 
- Page 2 -


« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Page 1 -


@Funkheld: Hab Dir hier mal was die Strecke misst... sowas?

Herunterladen
KompilierenMarkierenSeparieren
 {$cleq}
Windowstyle 31
Windowtitle "Cursorposition ermitteln"
Window 500,500
setcursorpos((winRight-winLeft)\2+winLeft,(winBottom-winTop)\2+winTop)
var modified&=0
var strecke&=0
var my2MousePositions&=globalAlloc(gPTR,16)
getCursorPos(my2MousePositions&)
rtlMoveMemory(my2MousePositions&+8,my2MousePositions&,8)

while 1

    waitinput 10
    getCursorPos(my2MousePositions&)
    settext hWnd,"X:"+str$(long(my2MousePositions&,0))+" Y:"+str$(long(my2MousePositions&,4))+" Strecke:"+str$(strecke&)
    add strecke&,abs(long(my2MousePositions&,0)-long(my2MousePositions&,8))+abs(long(my2MousePositions&,4)-long(my2MousePositions&,12))

    if long(my2MousePositions&,0) > winRight

        long my2MousePositions&,0=winLeft
        inc modified&

    endif

    if long(my2MousePositions&,0) < winLeft

        long my2MousePositions&,0=winRight
        inc modified&

    endif

    if long(my2MousePositions&,4) < winTop

        long my2MousePositions&,4=winBottom
        inc modified&

    endif

    if long(my2MousePositions&,4) > winBottom

        long my2MousePositions&,4=winTop
        inc modified&

    endif

    if modified&

        modified&=0
        setCursorPos(long(my2MousePositions&,0),long(my2MousePositions&,4))

    endif

    rtlMoveMemory(my2MousePositions&+8,my2MousePositions&,8)

wend

globalFree(my2MousePositions&)
f='./../../funktionsreferenzen/xprofan/end/'>end

Wenn Du die add strecke Zeile dahin änderst:
KompilierenMarkierenSeparieren
add strecke&,(long(my2MousePositions&,0)-long(my2MousePositions&,8))+(long(my2MousePositions&,4)-long(my2MousePositions&,12))
(also ohne abs), dann wird die rückwärtsgefahrene Strecke auch von der Streckenlänge
subtrahiert statt zur Streckenlänge addiert.

PS: Bei XPSE brauchst die ganzen Standard-APIs nicht deklarieren und es ist
sogar sinnvoller es dann auch nicht zu tun da die Aufrufe in deutlich schnellere
Calls umgewandelt werden.

1.247 kB
Hochgeladen:10.07.2012
Downloadcounter173
Herunterladen
 
10.07.2012  
 



Schau mal vielleicht so:

Herunterladen


KompilierenMarkierenSeparieren
 {$cleq}
decimals 2
Windowstyle 31
Windowtitle "Cursorposition ermitteln"
window (maxx-500),(maxy-100)
setcursorpos((winRight-winLeft)\2+winLeft,(winBottom-winTop)\2+winTop)
var speed.realPixelSpeed!=0
var speed.forShow!=0
var tmp&=0
var tmp2&=479
var tme&=getTickCount
var tme.start&=getTickCount
var modified&=0
var strecke&=0
var my2MousePositions&=globalAlloc(gPTR,16)
getCursorPos(my2MousePositions&)
rtlMoveMemory(my2MousePositions&+8,my2MousePositions&,8)
mcls 640,480,0

while 1

    if tme&<getTickCount

        add tme&,100// nur alle 100ms etwas tun
        speed.realPixelSpeed!=(strecke&-tmp&)*0.5+speed.realPixelSpeed!*0.5
        speed.forShow!=speed.realPixelSpeed!*0.001
        tmp&=strecke&
        startpaint -1
        usefont "Arial",50,0,0,0,0
        textcolor $FFFF,0
        drawtext 10,10,"Race: "+str$((getTickCount-tme.start&)\1000)+" Sekunden"
        drawtext 10,60,"Strecke: "+str$(strecke&*0.0001)+" Meter"
        drawtext 10,110,"Geschw.: "+str$(speed.forShow!)+" km/h"
        drawtext 10,160,"ø Geschw.: "+str$((strecke&*0.0001)/(1+(getTickCount-tme.start&)\1000))+" Meter/s  "
        textcolor $00FF00,-1
        drawtext 10,10,"Race:"
        drawtext 10,60,"Strecke:"
        drawtext 10,110,"Geschw.:"
        drawtext 10,160,"ø Geschw.:"
        copybmp 1,240 - 640,240 > 0,240;0
        usepen 0,0,$00FF00
        line 637,tmp2& - 638,(479-speed.realPixelSpeed!*0.02)
        tmp2&=479-speed.realPixelSpeed!*0.02
        endpaint
        mcopysizedbmp 0,0 - 640,480 > 0,0 - width(hWnd),height(hWnd);0

    endif

    getCursorPos(my2MousePositions&)
    settext hWnd,"X:"+str$(long(my2MousePositions&,0))+" Y:"+str$(long(my2MousePositions&,4))+" Strecke:"+str$(strecke&)
    add strecke&,abs(long(my2MousePositions&,0)-long(my2MousePositions&,8))+abs(long(my2MousePositions&,4)-long(my2MousePositions&,12))

    if long(my2MousePositions&,0) > winRight

        long my2MousePositions&,0=winLeft
        inc modified&

    endif

    if long(my2MousePositions&,0) < winLeft

        long my2MousePositions&,0=winRight
        inc modified&

    endif

    if long(my2MousePositions&,4) < winTop

        long my2MousePositions&,4=winBottom
        inc modified&

    endif

    if long(my2MousePositions&,4) > winBottom

        long my2MousePositions&,4=winTop
        inc modified&

    endif

    if modified&

        modified&=0
        setCursorPos(long(my2MousePositions&,0),long(my2MousePositions&,4))

    endif

    rtlMoveMemory(my2MousePositions&+8,my2MousePositions&,8)

wend

globalFree(my2MousePositions
class=s2>) end

Den Faktor bei:
KompilierenMarkierenSeparieren
speed.forShow!=speed.realPixelSpeed!*0.001

bzw. das *0.001 musst halt anpassen so dass es passend wirkt.

41 kB
Hochgeladen:10.07.2012
Downloadcounter92
Herunterladen
1.248 kB
Hochgeladen:10.07.2012
Downloadcounter63
Herunterladen
 
10.07.2012  
 




funkheld
Jup, danke.
Du bist ja ein Mathefreak.

Funktioniert wunderbar.

Danke.

Gruss
 
10.07.2012  
 



Hier gibts Mathefreaks aber ich bin kein Mathefreak.
 
10.07.2012  
 




funkheld
Vielleicht kann man aus diesen Daten die Geschwindigkeit und die Wegstrecke ausrechnen:
Eine Pedalumdrehung hat 41000 Mauspunkte, dabei dreht sich das Schwungrad 5x.
Das Schwungrad hat einen Umfang von 75 cm.

Gruss
peter
 
11.07.2012  
 



5 Schwungraddrehungen metern also 5*75=375cm und dies entspricht dann wohl einer

Pedalumdrehung -

demnach müsstest il valore in strecke& vlt. nur mit 375/41000/100=0,0091463

multiplizieren und dann hast Du imho die Anzahl der zurückgelegten Meter statt

Pixel. Probiere mal ob dies hier bei Dir passende Werte zurückliefert:
KompilierenMarkierenSeparieren
 {$cleq}
decimals 2
Windowstyle 31
Windowtitle "Cursorposition ermitteln"
window (maxx-500),(maxy-100)
setcursorpos((winRight-winLeft)\2+winLeft,(winBottom-winTop)\2+winTop)
var speed.realPixelSpeed!=0
var speed.forShow!=0
var tmp&=0
var tmp2&=479
var tme&=getTickCount
var tme.start&=getTickCount
var modified&=0
var strecke&=0
var my2MousePositions&=globalAlloc(gPTR,16)
getCursorPos(my2MousePositions&)
rtlMoveMemory(my2MousePositions&+8,my2MousePositions&,8)
mcls 640,480,0

while 1

    if tme&<getTickCount

        add tme&,100// nur alle 100ms etwas tun
        speed.realPixelSpeed!=(strecke&-tmp&)*0.5+speed.realPixelSpeed!*0.5
        speed.forShow!=speed.realPixelSpeed!*0.000091463*36
        tmp&=strecke&
        startpaint -1
        usefont "Arial",50,0,0,0,0
        textcolor $FFFF,0
        drawtext 10,10,"Race: "+str$((getTickCount-tme.start&)\1000)+" Sekunden"
        drawtext 10,60,"Strecke: "+str$(strecke&*0.000091463)+" Meter"
        drawtext 10,110,"Geschw.: "+str$(speed.forShow!)+" km/h  "
        drawtext 10,160,"ø Geschw.: "+str$((strecke&*0.000091463)/(1+(getTickCount-tme.start&)\1000))+" Meter/s  "
        textcolor $00FF00,-1
        drawtext 10,10,"Race:"
        drawtext 10,60,"Strecke:"
        drawtext 10,110,"Geschw.:"
        drawtext 10,160,"ø Geschw.:"
        copybmp 1,240 - 640,240 > 0,240;0
        usepen 0,0,$00FF00
        line 637,tmp2& - 638,(479-speed.realPixelSpeed!*0.02)
        tmp2&=479-speed.realPixelSpeed!*0.02
        endpaint
        mcopysizedbmp 0,0 - 640,480 > 0,0 - width(hWnd),height(hWnd);0

    endif

    getCursorPos(my2MousePositions&)
    settext hWnd,"X:"+str$(long(my2MousePositions&,0))+" Y:"+str$(long(my2MousePositions&,4))+" Strecke:"+str$(strecke&)
    add strecke&,abs(long(my2MousePositions&,0)-long(my2MousePositions&,8))+abs(long(my2MousePositions&,4)-long(my2MousePositions&,12))

    if long(my2MousePositions&,0) > winRight

        long my2MousePositions&,0=winLeft
        inc modified&

    endif

    if long(my2MousePositions&,0) < winLeft

        long my2MousePositions&,0=winRight
        inc modified&

    endif

    if long(my2MousePositions&,4) < winTop

        long my2MousePositions&,4=winBottom
        inc modified&

    endif

    if long(my2MousePositions&,4) > winBottom

        long my2MousePositions&,4=winTop
        inc modified&

    endif

    if modified&

        modified&=0
        setCursorPos(long(my2MousePositions&,0),long(my2MousePositions&,4))

    endif

    rtlMoveMemory(my2MousePositions&+8,my2MousePositions&,8)

wend

globalFree(my2MousePositions
class=s2>) end
 
11.07.2012  
 




funkheld
Hallo, danke. Jetzt kommt bei einer Pedalumdrehung 3,77Meter raus. Das ist Super.

Aber warum geht die Geschwindigkeitsanzeige nicht höher wie ca 15Km/h ? Ist mir jetzt erst aufgefallen. Wenn ich schneller Trete, wird auch die zurückgelegte Strecke länger in einer Zeiteinheit, also der km-Zähler funktioniert mit steigender Geschwindigkeit.

Danke.

Gruss
 
11.07.2012  
 



Meinst Du mit Geschwindigkeitsanzeige den Graphen?
 
11.07.2012  
 




funkheld
Ich meine den Zahlenwert und die Grafik.

Gruss
peter
 
11.07.2012  
 



Auf meinem Computer kann ich die Maus so schnell bewegen dass sogar 20 km/h

angezeigt werden. Wie grande ist Dein hWnd? Kann es sein das die von Dir genutzte

Maus einfach nicht schneller erfassen kann?
 
11.07.2012  
 




funkheld
Ich habe jetzt mal : add tme&,200 eingestellt.
Jetzt funktioniert es circa 15Km/h.

Welchen Einfluss hat das eigentlich?

Gruss
 
11.07.2012  
 



Nach wievielen Millisekunden die Grafikprozedur ablaufen soll -

bei 100 also 10 mal pro Sekunde und bei 200 5 mal pro Sekunde.
 
11.07.2012  
 




funkheld
Warum aumento sich dann die Geschwindigkeit?
Ist da irgendein Einfluss drin, wenn ich 200 eingebe?

Wie errechnest du die Geshwindigkeit?

Gruss
 
11.07.2012  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

24.269 Views

Untitledvor 0 min.
Ralf Netz22.05.2021
Heltal23.01.2015
Jochen Roxlau04.10.2014
Julian Schmidt22.06.2013
Di più...

Themeninformationen

Dieses Thema hat 3 subscriber:

funkheld (16x)
iF (15x)
RICOSCH (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie