switch case erlaubt wohl keinen negativen Wertebereich?
exit status 1
duplicate (or overlapping) case value
Mache ich was falsch oder gibt es Alternativen?
int Leistung0;
.
.
.
switch (Leistung0) {
case -99 ... -50:
//Relais1 = an;
bitSet(befehl,0); //1.Stelle(0) ganz rechts binär auf 1 setzen
break;
case -149 ... -50:
//Relais2 = an;
bitSet(befehl,1); //2.Stelle(1) von ganz binär auf 1 setzen
break;
case -199 ... -50:
//Relais3 = an;
bitSet(befehl,2); //3.Stelle(2) von ganz binär auf 1 setzen
break;
case -249 ... -50:
//Relais4 = an;
bitSet(befehl,3); //4.Stelle(3) von ganz binär auf 1 setzen
break;
case 5:
//do something when var equals 2
break;
case 6:
//do something when var equals 2
break;
case 7:
//do something when var equals 2
break;
case 8:
//do something when var equals 2
break;
case 9:
//do something when var equals 2
break;
case 10:
//do something when var equals 2
break;
case 11:
//do something when var equals 2
break;
case -49 ... 10000:
//Relais1 = aus;
bitClear(befehl,0); //1.Stelle(0) ganz rechts binär auf 0 setzen
//Relais2 = aus;
bitClear(befehl,1); //2.Stelle(1) ganz rechts binär auf 0 setzen
//Relais3 = aus;
bitClear(befehl,2); //3.Stelle(2) ganz rechts binär auf 0 setzen
//Relais4 = aus;
bitClear(befehl,3); //4.Stelle(3) ganz rechts binär auf 0 setzen
break;
default:
//Relais1 = aus;
//bitClear(befehl,0); //1.Stelle(0) ganz rechts binär auf 0 setzen
break;
}
das hat nichts mit negativen Werten zu tun, sondern deine Bereiche überschneiden sich.
Ganze Fehlermeldung in der IDE aktivieren und auch vollständig lesen.
sketch.ino:12:9: error: duplicate (or overlapping) case value
case -149 ... -50:
^~~~
sketch.ino:8:9: note: this is the first entry overlapping that value
case -99 ... -50:
^~~~
bitte poste künftig vollständigen Code den man in die IDE kopieren kann und einfach auf kompilieren drücken kann, so Codeschnippsel wo die Hälfte wieder fehlt kosten nur Zeit und nerven.
Darf ich dich fragen, warum du den Code bis zur Untestbarkeit verstümmelst?
(nein, ich möchte keine Antwort darauf, es reicht mir, wenn du das überdenkst)
Wenn Du willst, das zwischen -149 und -50 bit1 gesetzt wird UND zwischen -99 und -50 bit2, dann darfst Du das nicht ausschliessen.
Sprich: bei -70 würde bit1 und bit2 gesetzt?
Dann if ohne else.
void setup() {
Serial.begin(115200);
Serial.println(F("Start...."));
for (int i = 0; i >= -250; i -= 10)
{
Serial.println();
Serial.print(F("Wert:"));
Serial.println(i);
if (i <= -50)
{
Serial.print(F("Gefunden:"));
if (i >= -99)
{
Serial.print(F(" -99"));
}
if (i >= -149)
{
Serial.print(F(" -149"));
}
if (i >= -199)
{
Serial.print(F(" -199"));
}
if (i >= -249)
{
Serial.print(F(" -249"));
}
}
}
Serial.println();
}
void loop() {
}
@stoni99
bevor da weiter rumgeraten wird, ob ein if else funktioniert und was das break macht bzw. was passiert wenn es nicht gesetzt ist, würde ich an deiner Stelle erst mal auf Papier eine Tabelle machen was denn nun genau bei welchem Wert gesetzt werden soll.
Wenn man es auf Papier hat, kann man danach programmieren.
Rumtüfteln und rumraten bringt nicht viel.
Meine Codes waren noch nicht fertig - ich habe erst mal etwas rumprobiert. Das sieht sicherlich wirr aus - sorry.
Grundsätzlich werden die Relais per bit kaskadiert.
Relais1 50W
Relais2 100W
Relais3 200W
Relais4 200W
.
Relais6 200W
Die vorgegebene Leistung0 wird gelesen und, um z.B auf einen Sollwert von -350W zu kommen muss Relais 1 & 2 & 3 per bit gesetzt/gesendet werden. -450W 1 & 3 & 4.
Ich hoffe ich habe mich einigermaßen ausgedrückt.
Ich probiere das noch mal in Ruhe durch.
Erst mal Danke für eure Geduld!
Na dann ist doch meine Logik richtig.
Nimm was Du willst, ich würde das switch case nehmen - aber das ist meine Geschmackssache.
Das if geht ja wohl auch, wie sich die hemmungslose Bedienung von @agmue darstellt.
Ist es denn wirklich gewollt, dass bei z.B. dem größten Wert alle vier Bedingungen zutreffen? Oder soll bei jedem Wert nur eine Bedingung zutreffen und nur ein Bit(Wert) gesetzt werden?
Naja .. man könnte ja auch 8 Bits einzeln setzen und danach die Entscheidung treffen, was geschaltet wird. Das ginge ja bis 8 Relais....
Wäre möglicherweise ein bisschen schneller... aber das spielt wahrscheinlich keine Rolle.