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  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »

@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  
 




RICOSCH
hat die platine auch die microtaster per rechte und linke maustaste ?
ich würde lieber auf diese tasten setzen !

und was soll eigendlich gezählt werden ? wohl nicht die anzahl der tritte ?
wenn es circa dem schwungrad befestigt ist ?
 
I LOVE TOOLS
10.07.2012  
 



@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  
 




funkheld


und was soll eigendlich gezählt werden ? wohl nicht die anzahl der tritte ?
wenn es circa dem schwungrad befestigt ist ?


Ich zähl die Mausschritte.
Bis zu einer bestimmten Geschwindigkeit funktioniert es, danach wird fast garnicht gezählt, wenn ich wieder etwas langsamer werde, zählt es wieder.

Gruss
 
10.07.2012  
 



funkheld (10.07.12)
Bis zu einer bestimmten Geschwindigkeit funktioniert es, danach wird fast garnicht gezählt, wenn ich wieder etwas langsamer werde, zählt es wieder.


Bezieht sich das auf meinen Quelltext?

Wenn ja, dann ist dies imho aus mindestens diesen 2 Stabilire vorstellbar:

+ die Schrittweite pro "Frame" ist größer als das Fenster (probiere mal windowstyle 80 und window (maxx-100),(maxy-100) - also größeres Fenster)

+ der Chip auf der Maus ist nicht schnell genug bzw. die abtast-Frequenz zu niedrig (hier potuto es helfen wenn Du mit einem "Getriebe" die letztendliche Rotationsgeschwindigkeit des Mausrades reduzierst)
 
10.07.2012  
 




funkheld
Hallo, dein Programm funktioniert schon wesentlich besser, Geschwindigkeit kann schon verdoppelt werden. Danke.

Gruss
 
10.07.2012  
 



Noch "schneller" könntest halt wenn Du das Fenster vergrößert und wenn das noch
nicht reicht dann halt das WaitInput 10 auskommentieren und wenn das dann immer
noch nicht reicht dann einfach nochmal melden. ^^
 
10.07.2012  
 




funkheld
Jup, habe "Waitinput" rausgenommen und den Bildschirm vergrössert. und habe den Maussensor circa den Treibriemen gesetzt, weil das Rad langsamer dreht als das Schwungrad. Funktioniert wunderbar mit deinem Programm.
Ich glaube dadurch ist auch wieder mehr spielraum in der Schleife per etwas Grafisches

Frage:
Wie kann man jetzt da mal als Test in der Schleife irgendetwas Grafisches reinmachen per die Optik?

Danke.

Gruss
KompilierenMarkierenSeparieren
 {$cleq}
Windowstyle 31
Windowtitle "Cursorposition ermitteln"
window (maxx-500),(maxy-100)
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

    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&)
='./../../funktionsreferenzen/xprofan/end/'>end

125 kB
Hochgeladen:10.07.2012
Downloadcounter88
Herunterladen
141 kB
Hochgeladen:10.07.2012
Downloadcounter98
Herunterladen
 
10.07.2012  
 



Hehe sehr cool -

als ich 16 war (vor 17 Jahren ^^) hatte ich das mit einer normalen Kugelmaus ganz
ähnlich gemacht -

mein Radl hatte solch analog-Tacho das von einer einfachen Drahtwelle angetrieben
wurde -

diese Welle hatte ich mit einer Maus-Achse verbunden.



Etwas Mostra kannst Du beliebig -

da gibts auch viele Wege das mit XProfan umzusetzen.

Ein Beispiel:
KompilierenMarkierenSeparieren
 {$cleq}
 {$notmp}
 {$compiler c:\xprofan12}
 {$runtime c:\xprofan12}
decimals 2
Windowstyle 31
Windowtitle "Cursorposition ermitteln"
window (maxx-500),(maxy-100)
setcursorpos((winRight-winLeft)\2+winLeft,(winBottom-winTop)\2+winTop)
var speed!=0
var tmp&=0
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!=((strecke&-tmp&)*0.03)*0.01+speed!*0.99
        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$((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.:"
        copybmp 1,240 - 640,240 > 0,240;0
        setpixel 638,479-speed!,$FFFFFF
        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&ss=s2>)
end

72 kB
Hochgeladen:10.07.2012
Downloadcounter84
Herunterladen
 
10.07.2012  
 




funkheld
He, dein Grafikprogramm funktioniert schon prima mit meiner Maus am Trimmrad.
Danke.

Muss jetzt nur mal schauen ,warum die Durchschnittsgeschwindigkeit so langsam auf "0" runtergeht , wenn ich aufhöre zu treten.

Gruss
 
10.07.2012  
 



Na weil die Zeit weiterläuft aber die Strecke gleich bleibt -

ist halt "Durchschnittsgeschwindigkeit " und nicht die aktuelle Tretgeschwindigkeit.
 
10.07.2012  
 




funkheld
Hmm.., wie kann man eigentlich die Geschwindigkeit ermitteln, so ungefähr?

Gruss
 
10.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.303 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