Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Winkelberechnung Kategorie: Programmierung (von krassos - 15.04.2005 18:31)
Als Antwort auf Winkelberechnung von Stefan - 15.04.2005 13:54
Ich nutze:
C-Control II Unit, CC2-ReglerBoard, OSOPT V3.0
> Hallo Leute,
>
> momentan hänge ich an dem Problem, aus einem Spannungswert (0,5...4,5 Volt), eine Winkelangabe
> berechnen zu müssen.
> Doch leider kriege ich immer nur den "berechneten" Wert 0,00 Grad auf der I²C-Anzeige zu sehen.
>

Hallo,

das Problem liegt nach meiner Meinung in einem Compilerfehler.

>     Vin_=2.5;//orts.adc(2);                // einlesen des analogen Wertes über AD2
>     Vin = Vin_;    // übergabe der int-Variable an die float-Variable


1. Du Versuchst ein float an eine int-Variable zuzuweisen. Ist sicher ein Lapsus beim Test.
2. Ich hatte auch immer wieder Probleme beim zuweisen eines int auf eine float Variable.
Das Problem hab ich folgenderma�en gelöst:

nachl=0;nachl=(p1[8]+nachl)*1000;


Das sind jetzt mal zwei Zeilen wahllos aus einem Modul von mir gegriffen.
p1[8] ist ein int und nachl ist long.

in Deinem Falle würde ich also Probieren:


Vin=0.0   //Floatkonstante auf Variable zuweisen. Der Compiler wählt hier auf jeden Fall Float
              //als Typ für Vin.
Vin_=orts.adc(2);                // einlesen des analogen Wertes über AD2
Vin = Vin_+Vin;    // übergabe der int-Variable an die float-Variable


Es ist ein wenig dämlich gelöst, aber was besseres fiel mir nicht ein, da eine Definition

>   float Vin, EL;
>   int Vin_;

anscheinend manchmal vom Compiler ignoriert wird.

GruÃ? krassos


> Hier der Quelltext:
>
> ///------------
>   thread main
> //------------
> {
>   float Vin, EL;
>   int Vin_;
> //  
>   EL = 0;
>  
>   pcflcd.setpcf(1);              // I2C LCD-Anzeige adressieren
>   pcflcd.init();                 // I2C LCD-Anzeige initieren
>   sleep 30;           // x ms Pause
>   pcflcd.clear();           // I2C LCD-Anzeige löschen
>   pcflcd.setLight(2);           // LCD-Beleuchtung: 0=AUS, 1=EIN
>
>   loop
>   {
>     Vin_=2.5;//orts.adc(2);                // einlesen des analogen Wertes über AD2
>     Vin = Vin_;    // übergabe der int-Variable an die float-Variable
>
>     EL = math.asin(((Vin-2.5)/2)*180/3.14); // Umrechnung der Spannung mit Offset in Winkelgrade
>     pcflcd.goto(1,0);             // 1. Zeile der Anzeige vorbereiten
>     pcflcd.print("EL.:");       // Anzeige des Textes
>     pcflcd.zahl5n2(EL);         // Anzeige des Elevationswinkels
>     pcflcd.print(" Grad");       // Anzeige des Textes
>     pcflcd.goto(2,0);               // 2. Zeile der Anzeige vorbereiten
>     pcflcd.print("Uin.:");       // Anzeige des Textes
>     pcflcd.zahl5n2(Vin);          // Anzeige des Elevationswinkels
>     pcflcd.print(" Volt");    // Anzeige des Textes
>     sleep 30;                                  // x ms Pause
>
>   }
>       if EL <= -5 ;              // Arm in die Nullposition
>     pcflcd.goto(3,0);         // 3. Zeile der Anzeige vorbereiten
>     pcflcd.print("R");         // Anzeige des Textes
>      
>       if EL >= 5 ;               // Arm in die Nullposition
>     pcflcd.goto(3,0);         // 3. Zeile der Anzeige vorbereiten
>     pcflcd.print("L");         // Anzeige des Textes
>
> }
>
> Wer kann helfen ?
>
> Grüsse
>            Stefan


    Antwort schreiben


Antworten:

Re: Winkelberechnung (von Stefan - 17.04.2005 21:00)