Hallo
Ich will mir mit LEDs eine Ladezustandsanzeige basteln
Ansteuern will ich die mit:
1 | byte Zustand =0;
|
2 | byte anz=0;
|
3 | anz = (etwas zwischen 0 und 8);
|
4 | Zustand = byte(pow(2,anz)-1);
|
Wenn ich anz direkt etwas zwischen 0 und 8 setze leuchten die leds so
wie sie sollen.
z.B.
1 | anz = 4;
|
2 | println(anz,DEC); ->4 angezeigt
|
3 | println(Zustand,DEC); -> 15 angezeigt(leds leuchten entsprechend dem Binärmuster)
|
Fange ich jetzt an anz zu berechnen aus einem SOC
1 | anz=byte(map(SOC,0,100,0,Aufloesung));
|
oder
1 | anz=byte(SOC*Aufloesung/100);
|
wobei mir Aufloesung angibt ob ich 4 oder 8 oder... LEDs für die Anzeige
zur Verfügung habe.
kommt die falsche anzeige bei raus obwohl ich an der Zustand berechnung
nichts ändere kommt z.B. bei SOC 50 folgendes raus
println(anz,DEC); ->4 angezeigt
println(Zustand,DEC); -> 14 angezeigt(leds leuchten entsprechend dem
Binärmuster)
kann mir mal einer sagen warum einmal
2^4-1=15
und einmal
2^4-1=14
rauskommt?????
und das nur weil die 4 einmal fest geschrieben und einmal ausgerechned
wird?
beim ausrechnen entsteht ein fehler bei jedem SOC
PS:
Der fehler tritt auch auf wenn ich die einzelnen Schwellen mit if und
else if bedingungen mache... und immer setze z.B. if(SOC > 45) anz = 4;
nur wenn ich wieder ganz kurz vor dem ausrechnen des Zustandes anz auf
einen wert z.B. 4 setze, dass wird alles richtig angezeigt...
es ist zum verrückt werden...