Re: Winkelberechnung Kategorie: Programmierung (von krassos - 15.04.2005 18:31) | ||
Als Antwort auf Winkelberechnung von Stefan - 15.04.2005 13:54 | ||
| ||
> 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) |