Hallo,
ich möchte auf einem Atmel-Controller die Temperatur über eine 8er
LED-Leiste ausgeben.
Ich wollte die Temperatur (welcher °-Bereich wird später eingestellt) in
Acht Bereiche einteilen und dann mit switch-case abarbeiten.
Irgendwie komme ich aber nicht mehr weiter. Ich weiss dass der Block mit
den Defines noch nicht korrekt ist, es geht mir nur um die
switch-case-Geschichte
Könnte das mal jemand durchchecken? Kann man das so gebrauchen? Oder ist
das grob falsch? (syntaktische Fehler bitte verzeihen, ist noch in der
Bastelphase).
Danke schonmal, ich verzweifle hier bald
Thomas schrieb:> Kann man das so gebrauchen? Oder ist> das grob falsch?
Leider letzteres. Switch-case kann keine Ungleichungen. Mach einfach 8
if Abfragen hintereinander.
Danke für die schnelle Antwort.
Wenn ich die Bereiche bzw. Grenzspannungen vorher definiert habe, ist
doch beim switch-case keine Ungleichung drin oder seh ich das irgendwie
falsch?
Ok, das bedeutet also, wenn ich mit Grenzspannungen arbeiten will ist
switch-case nicht möglich? Oder gibt es anstelle von #define eine
bessere Möglichkeit?
Thomas schrieb:> Ok, das bedeutet also, wenn ich mit Grenzspannungen arbeiten will ist> switch-case nicht möglich?
Klar geht das. Man müsste nur die eigentliche Bereichsprüfung
"auslagern" und einen dem gefundenen Bereich zugeordneten Index
ermitteln, den man dann per switch auswerten könnte.
Aber bei einem derart simplen linearen Zusammenhang ist das alles
komplett überflüssig. Man kann das Ganze auch mit nur einer Zeile Code
erledigen.
Angenommen voltage_conversion ist in mV (was es bei dir nicht ist):
Naja es soll so simpel wie möglich sein. Ich möchte einfach nur abhängig
von der Temperatur (also der Spannung in mV) 1 bis 8 LEDs leuchten
lassen.
Ich dachte switch-case wäre das richtige Werkzeug dafür.
Wie müsste den der oben genannte Codeschnippsel eingebaut werden
(PORTD = (1 << (voltage_conversion/100)) - 1;) ?
> Naja es soll so simpel wie möglich sein. Ich möchte einfach nur abhängig> von der Temperatur (also der Spannung in mV) 1 bis 8 LEDs leuchten> lassen.
Noch einfacher gehts nicht. Z.B. so:
Thomas schrieb:> Wie müsste den der oben genannte Codeschnippsel eingebaut werden> (PORTD = (1 << (voltage_conversion/100)) - 1;) ?
Was meinst du mit "einbauen"? Es "ersetzt" das komplette Geraffel.
Was nur zusätzlich noch fehlt, ist eine sinnvolle Vorbereitung von
voltage_conversion. Die Formel dafür in deinem Code liefert nämlich kein
wirklich sinnvolles Ergebnis.
Das klingt gut.
Dann verstehe ich die Bedeutung deiner Code-Zeile irgendwie falsch,
könntest du mir die kurz erläutern?
Das mit der Formel ist mir bewusst und wird später geändert.
Es ist nur eine Weile her dass ich programmiert habe und ich quäl mich
schon ewig mit diesem einfachen Problem...
Thomas schrieb:> Dann verstehe ich die Bedeutung deiner Code-Zeile irgendwie falsch,> könntest du mir die kurz erläutern?
Nö, denn so kompliziert ist die ja nun auch nicht. Sorry, aber wenn du
die Zeile nicht selbst nachvollziehen kannst, dann fehlen dir eh ein
paar Grundlagen, die du erst mal nachholen müsstest.
Übrigens müsstest du die Zeile ggf. auch noch ein wenig modifizieren. In
ihrer jetzigen Form erzeugt sie ein Verhalten, wie ich es von einer
Balkenanzeige mit 100mV-Schritten erwarten würde. Das weicht ein wenig
davon ab, was du in deinem Pseudo-Code oben als beabsichtigtes Verhalten
offenbart hast.