Tachoanzeige in Qt programmieren

Alles rund um die Programmierung mit Qt
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Ok das mit der linken hat geklappt :)

Aber das Problem mit dem Zeigerruckler ist immer noch da :(

Würde mich auf Hinweise oder Tipps freuen, was die Ursache sein könnte.
Danke!

Gruss
Flat
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Okey die Ruckler habe ich jetzt auch weg bekommen.
Da ich die Dll mit gegeben habe und Mein Programm die Dll's nicht in den grossen Qt Bibliotheken suchen muss, sind die Ruckler jetzt weg.

Aber ist trotzdem merkwürdig, da es auf meinem Lappi funktioniert ohne das ich die Dll's mitgeben muss.

Ansonsten habe ich nicht verändert. Naja sei es drum. Danke nochmal für eure Hilfe :)
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Hallo,

ich habe noch ne Frage.
Es geht darum das ich die Anwendung jetzt auf meinem Display anzeigen möchte. Das Display ist ein Chinch display wobei ich die Auflösung anpassen muss, damit das Rundtacho auch Kreisförmig angezeigt wird. Ich habe nun das Bild so weit gedämpft das das Rundtacho jetzt auf dem Display Kreisrund dargstellt wird, doch jetzt habe ich Probleme mit dem Zeiger, da der Tacho in wirklichkeit Eiförmig ist, laufen die Zeiger aus dem Tacho raus.

Gibt es ne routine, wo ich den Zeiger entsprechend dem Tacho rotieren lassen kann. Ich hoffe ihr habt mich richtig verstanden.
Ich wäre sehr dankbar, wenn ihr mir auch hierbei helfen könntet.

Der Code für die Zeiger rotation bei einem Kreisrundem Tacho.
Ich brauch einen Code für für das entsprechende TAcho das eingefügt worden ist.

Code: Alles auswählen


Item {
    id: root
    property int value : 0
    property int angle : 0
    width: 338
    height: 518

    Image {
        id: zeiger
        x: 167; y: 114
        width: 11
        height: 190
        smooth: true
        source: "GeschwZeiger.png"
        transform: Rotation {
            id: zeigerRotation
            origin.x: 0; origin.y: 150
            //! [needle angle]
            angle: Math.min(Math.max(root.value * 3.5 -160 ), root.value +50)

              
            Behavior on angle {
                SpringAnimation {
                    spring: 0.1
                    damping: .25
                }
            }
            //! [needle angle]
        }
    }

}

Dateianhänge
tacho.png
tacho.png (209.06 KiB) 10120 mal betrachtet
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Hallo,

kann mir denn keiner helfen, zu meiner Problemstellung??
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Hi,

habe hier in youtube sowas ähnliches

http://www.youtube.com/watch?v=6QZBft8lBOI

Die Nadel läuft nicht über das Rundinstrument.
Es passt sich an die Struktur des Rundinstrumentes an.

Weiss vielleicht einer wie man so etwas realisiert ?
Ich suche schon so lange danach, habe leider nichts gefunden

Gruss

Flat
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Kann mir denn hier keiner Behilflich sein ?

Ich wäre euch sehr dankbar !
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Re: Tachoanzeige in Qt programmieren

Beitrag von jerry42 »

Hi,

ich kann dir dabei nicht direkt helfen, aber ich bin die letzten Tage über folgendes Video von den Qt Dev Days in Barcelona gestolpert.
Das dort gezeigte entspreicht sehr nah deiner Vorstellung. Der entsprechende Code ist auch veröffentlicht, vielleicht kannst Du dir da das ein oder andere abschauen.


Video:
http://www.youtube.com/watch?v=2_W9YotVDWM

Seite mit Code:
http://www.ics.com/technologies/qtquick/

Gruß
jerry
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Hi,

Danke für deine Antwort.
Habe mein Problem jetzt so gelöst indem ich mein Rundtacho als Ellipse
genommen habe, sodass das es auf dem Display, was ich habe als Kreis
angezeigt wird.

Damit der Zeiger nicht über die Ellipse läuft, habe ich über die
Ellipsengleichung die Zeigerlänge berechnet und es passt sich an das
Rundtacho an.

Ellipsengleichung: (x²/a²) + (y²/b²) = 1
a und b sind die Durchmesser des Rundinstruments, wo der Zeiger entlang
laufen soll.

x = a* cos (Winkel)
y = b* sin (Winkel)

Nun habe ich die Zeigerhöhe ausgerechnet indem ich die Formel auf y
umgestellt habe und durch den Satz des Pythagoras habe ich die
Zeigerhöhe herausgefunden.

z = Wurzel(b² + cos(Winkel)² (a²-b²)) z:Zeigerhöhe

Code: Alles auswählen

Item {
    id: root
    property int value : 0
    property int angle : 0
    property in a: 550
    property in b: 366
    width: 338
    height: 518

    Image {
        id: zeiger
        x: 167; y: 114
        width: 366
        height: Math.sqrt((root.b*root.b) + (Math.cos(tachoZeigerRotation.angle) * ((root.a*root.a)-(root.b*root.b))))
        source: "GeschwZeiger.png"
        transform: Rotation {
            id: zeigerRotation
            origin.x: 183; origin.y: 1
            //! [needle angle]
            angle: Math.min(Math.max(root.value * 3.5 -160 ), root.value +50)

             
            Behavior on angle {
                SpringAnimation {
                    spring: 0.1
                    damping: .25
                }
            }
            //! [needle angle]
        }
    }

}
In der Theorie sollte es funktionieren. Doch als ich die Formel versucht
habe zu implementieren, beim drehen des Zeigers, verändert sich zwar die
höhe aber es wird ständig größer und kleiner.
Ich bin mir sicher das der Fehler mit dem Winkel und der cos funktion
was zun tun hat, aber ich weiss nicht was falsch gemacht habe.
Ich wäre euch sehr dankbar wenn ihr reinschauen und mir sagen könntet,
was genau flasch ist?
Danke

Gruss
Flat
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Ich habe den Fehler jetzt gefunden, Qt berechnet die Winkel in radiant.
Ich habe den Winkel von von Grad in Radiant umgewandelt und jetzt funktioniert es.

rad = 90 * pi /180


Gruss
Flat
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Hallo,


habe noch ne Frage wegen der Zeigerstellung, die ich digital Anzeigen
lassen möchte.
Ich habe tachoZeigerRotation.angle also den Winkel genommen um die
Zeigerstellung digital Anzeigen zu lassen. Doch der Winkel geht von -160
bis 160 Grad. Ich möchte jetzt die Minima und maxima so wählen das ich
min 0 und max 240 km/h haben möchte.

Hier ist die der Code für die Rotation von -160 bis 160 Grad

Code: Alles auswählen

    Image {
        id: tachoZeiger
        x: 0
        y: 275-tachoZeiger.height/2

        width: 366
        height: Math.sqrt(c+ (Math.pow(Math.cos(tachoZeigerRotation.angle.toFixed(1)*Math.PI/180),2)*e))

        source: "zeiger480x480.png"
        smooth: true
        transform: Rotation {
            id: tachoZeigerRotation
            origin.x: 183; origin.y:  tachoZeiger.height/2
            angle: Math.min(Math.max( root.value*3.5 -160 ), 160)

            Behavior on angle {
                SpringAnimation{
                    spring: 0.03
                    damping: .1


                }
            }

        }
    }
Hier der Code für die Anzeige in Digital.
Wie kann ich mit der Funktion Math.min und Math.max die minima und
maxima einstellen so das ich am Ende bei der Zeigerstellung bei -160° =
0 km/h und bei +160°= 240 km/h habe?

Code: Alles auswählen

    Text {
            id: myText1
            x: 156
            y: 144
            text:  tachoZeigerRotation.angle.toFixed(0)
            anchors.verticalCenterOffset: -97
            anchors.horizontalCenterOffset: -8
            anchors.centerIn: parent
            style: Text.Outline
            font.italic: true
            font.bold: true
            rotation: 0
            font.family: "Arial Black"
            font.pointSize: 35
            color: "red"

    }
Ich danke euch für eure Hilfe
Gruss
Flat
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Weiss denn keiner Bescheid, wie das gehen könnte??
Ich komme nicht mehr weiter.

Ich habe noch das Problem das die Anwendung zu viel CPU-Leistung frisst und es ruckelt sobald ich die Nadeln rotieren lasse.
Liegt das vielleicht daran, dass ich zu große png Bilder Rotieren lasse, oder hat es einen anderen Grund?
Auf Anfrage kann ich das Projekt auch hochladen.

Gruss
Flat
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Kann mir denn keiner hier helfen?

Wäre euch sehr dankbar für einen hilfreichen tipp.
Danke.

Gruss
Flat
Flat
Beiträge: 25
Registriert: 14. Mai 2012 12:02

Re: Tachoanzeige in Qt programmieren

Beitrag von Flat »

Hi ,

habe das Problem, dass die Analog Anzeige nicht mit der Digitalen
Anzeige übereinstimmt da ich den Kreis als Oval dargestellt habe.

Ich habe die Geschwindigkeiten in Excel aufgenommen und habe es in einem
Diagramm dargestellt. Man sieht das die Kennlinie bei 0°,90°,180°,270°
und 360° einen Nulldurchgang hat , also das die Digitale Werte mit dem
analogen Zeigerinstrument bei diesen Winkeln übereinstimmmen.

Nun zu meiner Frage kann ich die Kennlinie linearisieren , wenn ja wie
kann ich den Winkel in Qt Mathematisch so beschreiben das es mit der
digitalen Anzeige passt.

Ich danke für jeden Lösungsvorschlag

hier ist der Code für das Zeigerinstrument

Code: Alles auswählen

    Image {
        id: tachoZeiger
        x: 178
        y: 270

        width: 11
        height: Math.sqrt(c+ (Math.pow(Math.cos(tachoZeigerRotation.angle.toFixed(1)*Math.PI/180),2)*e))
        source: "GeschwZeiger.png"
        smooth: true
        transform: Rotation {
            id: tachoZeigerRotation

            origin.x: 5.5; origin.y:  1;

            angle:     25.714+root.value*9/7 
            Behavior on angle {
                SpringAnimation{
                    spring: 0.3 
                    damping: 0.1 
                }

            }

        }
    }


Freundliche Grüsse

Flat
Dateianhänge
Funktion.PNG
Funktion.PNG (37.99 KiB) 9144 mal betrachtet
Antworten