Hi ich benutze das c-controll mega 128 pro board von conrad. Es funktioniert auch nur kann ich keine kommazahlen addieren. Wenn ich + 1 schreibe geht die Funktion wenn ich aber + 0,5 oder so eingeben wird nicht hochgezählt. Ich hoffe ihr könnt mir helfen. Gruß steve Die Funktion: void warteAufSensor(word sollWert) { word istWert; istWert = 0; while(istWert < sollWert) { if(Port_ReadBit(46) == 1) { istWert = istWert + 1; //Diese plus eins soll zu einer 0,5 werden LCD_CursorPos(0x42); LCD_WriteWord(istWert,2); LCD_WriteText("/"); LCD_WriteWord(sollWert,2); while(Port_ReadBit(46) == 1); }
Ich gehe mal davon aus, dass ein "word" ein uint16_t ist. Das ist ein Ganzzahlendatentyp, in dem hast du keine Nachkommastellen. Also wenns wirklich sein muss, nimm ein double oder ein float oder so. Das Problem dabei ist halt, dass der µC keine Kommazahlen verarbeiten kann, und der gcc das dann in Software simulieren muss, was das Programm langsam und groß macht. Schau dir mal Festkommaarithmetik an.
Also müsste ich wenn ich die kommazahlöen addieren will einfach schreiben: void warteAufSensor(word sollWert) { word istWert; istWert = 0; while(istWert < sollWert) { if(Port_ReadBit(46) == 1) { istWert = istWert + 0,5; //Diese plus eins soll zu einer 0,5 werden LCD_CursorPos(0x42); LCD_WriteFloat(istWert,4); LCD_WriteText("/"); LCD_WriteWord(sollWert,2); while(Port_ReadBit(46) == 1); Oder? In der hilfe steht: Syntax void LCD_WriteFloat(float value, byte length); Sub LCD_WriteFloat(value As Single, length As Byte) Beschreibung Schreibt eine Fließkommazahl mit angegebener Länge auf das LCD Display. Parameter value Fließkommawert length Ausgabelänge Gruß steve
Kommazahlen schreibt man in C auch nicht mit einem Komma, sondern einem Punkt.
Hallo, und was steht ganz am Anfang vom Programm? float istWert; sonnst wird da nie ein float daraus. Und "," kennt der Compiler auch nicht da musst du wohl "."
Hi
> word istWert;
Du kannst zu einem Word keine 0,5 addieren. Auch wenn du es tausend mal
versuchst, wird sich der Wert nicht ändern.
MfG Spess
Okay danke schon für die hilfe:-) Ich fasse dann mal zusammen: void warteAufSensor(float sollWert) { float istWert; istWert = 0; while(istWert < sollWert) { if(Port_ReadBit(46) == 1) { istWert = istWert + 0.5; LCD_CursorPos(0x42); LCD_WriteFloat(istWert,4); LCD_WriteText("/"); LCD_WriteWord(sollWert,2); while(Port_ReadBit(46) == 1); dann müsste es gehen oder? Gruß steve edit: Was mir eingefallen ist, kann ich nicht einfach den istWert + 1 * 1/2 machen? Dann werden doch nur die ganzen zahlen angezigt oder?.. Bin leider nicht so gut bewandert mit c...
1 * 1/2 ist einfach 0. Grund: 1/2 ist eine ganzzahlige Division, der Divisionsrest wird also weggeworfen und 1/2 ist damit 0. Das 1*... davor rettet auch nichts mehr. -> Grundlagen C
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.