Hallo,
ich habe ein Problem mit switch case. Sobald ich den zehnten case hinzufüge bekomme ich einen Fehler. Der Teil des sketches sieht so aus.
if(AnzeigeAktiv.unixtime() >= jetzt.unixtime()){ //Wenn die Anzeige noch aktiv ist
switch (Anzeigeindex) {
case 1: //Anzeige Messwerte
AktuelleAnzeige = Anzeigeindex; //Umstellen der AktuellenAnzeige. Wird in jedem Case
break;
case 2: //Anzeigeindex 2:
if(Anzeigeindex != AktuelleAnzeige){ //Wenn die Anzeige noch nicht auf Anzeigeindex aktualisiert wurde
AktuelleAnzeige = Anzeigeindex; //Umstellen der AktuellenAnzeige. Wird in jedem Case benötigt.
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("Einstellungen #"));
lcd.setCursor(0,1);
lcd.print(F("Betriebsmodus"));
}
break;
case 3: //Anzeigeindex 3:
if(Anzeigeindex != AktuelleAnzeige){ //Wenn die Anzeige noch nicht auf Anzeigeindex aktualisiert wurde
AktuelleAnzeige = Anzeigeindex; //Umstellen der AktuellenAnzeige. Wird in jedem Case benötigt.
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("Einstellungen #"));
lcd.setCursor(0,1);
lcd.print(F("Frostschutz"));
}
break;
case 4: //Anzeigeindex 4:
if(Anzeigeindex != AktuelleAnzeige){ //Wenn die Anzeige noch nicht auf Anzeigeindex aktualisiert wurde
AktuelleAnzeige = Anzeigeindex; //Umstellen der AktuellenAnzeige. Wird in jedem Case benötigt.
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("Einstellungen #"));
lcd.setCursor(0,1);
lcd.print(F("Datenlogger"));
}
break;
case 5: //Anzeigeindex 5:
if(Anzeigeindex != AktuelleAnzeige){ //Wenn die Anzeige noch nicht auf Anzeigeindex aktualisiert wurde
AktuelleAnzeige = Anzeigeindex; //Umstellen der AktuellenAnzeige. Wird in jedem Case benötigt.
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("Einstellungen #"));
lcd.setCursor(0,1);
lcd.print(F("Wassergehalt"));
}
break;
case 6: //Anzeigeindex 6: Eingabe Betriebsmodus
if(Anzeigeindex != AktuelleAnzeige){ //Wenn die Anzeige noch nicht auf Anzeigeindex2 aktualisiert wurde
AktuelleAnzeige = Anzeigeindex; //Umstellen der AktuellenAnzeige. Wird in jedem Case benötigt.
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("Betriebsmodus"));
lcd.setCursor(0,1);
lcd.print(F("Eingabe: 0-4"));
}
break;
case 7: //Betriebsmodus Bestätigen
if(Anzeigeindex != AktuelleAnzeige){ //Wenn die Anzeige noch nicht auf Anzeigeindex aktualisiert wurde
AktuelleAnzeige = Anzeigeindex; //Umstellen der AktuellenAnzeige. Wird in jedem Case benötigt.
lcd.clear();
lcd.setCursor(0,0);
switch(atoi(Zwischenspeicher)){
case 0:
lcd.print(F("Nur Messen"));
break;
case 1:
lcd.print(F("Intervall"));
break;
case 2:
lcd.print(F("Zeitschaltuhr"));
break;
case 3:
lcd.print(F("Dauerbetrieb"));
break;
case 4:
lcd.print(F("Testbetrieb"));
break;
}
lcd.setCursor(0,1);
lcd.print(F("Ja (#) Nein(*)"));
}
break;
case 8:
if(Anzeigeindex != AktuelleAnzeige){ //Wenn die Anzeige noch nicht auf Anzeigeindex2 aktualisiert wurde
AktuelleAnzeige = Anzeigeindex; //Umstellen der AktuellenAnzeige. Wird in jedem Case benötigt.
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("Betriebsmodus"));
lcd.setCursor(0,1);
switch(atoi(Zwischenspeicher)){
case 0:
lcd.print(F("Nur Messen"));
break;
case 1:
lcd.print(F("Intervall"));
break;
case 2:
lcd.print(F("Zeitschaltuhr"));
break;
case 3:
lcd.print(F("Dauerbetrieb"));
break;
case 4:
lcd.print(F("Testbetrieb"));
break;
}
}
break;
case 9:
if(Anzeigeindex != AktuelleAnzeige){ //Wenn die Anzeige noch nicht auf Anzeigeindex aktualisiert wurde
AktuelleAnzeige = Anzeigeindex; //Umstellen der AktuellenAnzeige. Wird in jedem Case benötigt.
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("Einstellungen #"));
lcd.setCursor(0,1);
lcd.print(F("Uhrzeit"));
}
break;
case 10:
if(Anzeigeindex != AktuelleAnzeige){ //Wenn die Anzeige noch nicht auf Anzeigeindex aktualisiert wurde
AktuelleAnzeige = Anzeigeindex; //Umstellen der AktuellenAnzeige. Wird in jedem Case benötigt.
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("Einstellungen #"));
lcd.setCursor(0,1);
lcd.print(F("Datum"));
}
break;
}
}
Anzeigeindex ist ein Integer.
Ich bekomme folgenden Fehler avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x10 avrdude: stk500_cmd(): programmer is out of sync avrdude: stk500_cmd(): programmer is out of sync
Hat jemand von euch eine Idee an was das liegen könnte.
Ist die Anzahl der cases begrenzt?
Das hat vorerst Nichts mit dem Sketch zu tun - Dein Prpgrammer wird nicht sauber gefunden.
Eigentlich dürfte es vollkommen egal sein, wie der Sketch aussieht - wenn Er zum Kompilieren Hochladen ansetzt, ist der Sketch 'durch'.
MfG
PS:0...9 sind bereits 10 Fälle - Du bist am 11.ten Fall - aber auch hier ist keine Beschränkung
PPS: Entferne unnötige Leerzeilen und drücke in der IDE STRG+T - Das rückt den Code auf Klammer-Ebene ein - macht den Kram lesbarer.
Edit
Kompilieren war falsch, der Sketch ist 'durch', wenn mit dem Hochladen begonnen wird, was hier wohl der Fall ist. Edit 2 (oda so) Noch gefühlt zwei Dutzend Rechtschreibfehler/Vertipper gerichtet
Das hat vorerst Nichts mit dem Sketch zu tun - Dein Prpgrammer wird nicht sauber gefunden.
Eigentlich dürfte es vollkommen egal sein, wie der Sketch aussieht - wenn Er zum Kompilieren ansetzt, ist der Sketch 'durch'.
Und was bedeutet das jetzt.
Was kann die Ursache dafür sein?
Sobald ich den letzten case wieder entferne funktioniert es ja wieder.
combie:
Vollständige Ausgaben aktivieren und alles posten.
Die komplette Ausgabe ist für den Beitrag leider zu groß: Ich hoff das ist der Teil auf den es ankommt.
Der Sketch verwendet 28704 Bytes (88%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes. Globale Variablen verwenden 1529 Bytes (74%) des dynamischen Speichers, 519 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes. D:\Programme\Arduino\hardware\tools\avr/bin/avrdude -CD:\Programme\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\Michael\AppData\Local\Temp\arduino_build_672313/Lueftung_20.ino.hex:i avrdude: Version 6.3-20190619
Also sobald ich den letzen case wieder entferne und nochmal versuche den Sketch hochzuladen funktioniert es wieder.
Und nochmal:
Das hat damit nichts zu tun!
Nicht ursächlich!
OK, es bringt den Fehler zum Vorschein.
Aber mehr auch nicht.
Merke:
Symptom ist nicht Ursache.
Zwischen den beiden gibt es einen erheblichen semantischen Unterschied.
PS:
Ich mag diese Nachbauten nicht.
Den fehlen die Abblockkondensatoren! (oder sie sind zuweit weg)
Ganz schlecht, das macht den ADC erheblich ungenauer.
Kann zu Abschmierern führen.
Andererseits haben sie einen Quarz statt Resonator, das ist fein.
Also ich hab jetzt nochmal etwas in Sketch herumgespielt.
Der Fehler scheint aufzutauchen wenn der Sketch eine gewisse Länge überschreitet.
Ich habe den Sketch hochgeladen und immer um eine Zeile erweitert.
Ab einer bestimmten Länge trat der Fehler auf und zwar egal an welcher Stelle ich den Sketch erweitert habe. Wenn Ich den Sketch dann wieder verkürzt habe war der Fehler wieder weg.
Wenn ich es richtig verstanden habe ist der Fehler ja ausschließlich ein Kommunikationsfehler. Kann das an der Länge des Sketches liegen ?
combie:
Ich mag diese Nachbauten nicht.
Den fehlen die Abblockkondensatoren! (oder sie sind zuweit weg)
Ganz schlecht, das macht den ADC erheblich ungenauer.
Kann zu Abschmierern führen.
Geht mir inzwischen auch so. Aktuell bin ich bei meinem ersten Projekt und ich hab halt alles von einem Lieferanten bezogen. Außerdem waren die Aussagen im Internet bezüglich Nachbau eigentlich nicht sonderlich negativ. Aber wenn man Fehler hat bei denen man sich nicht sicher ist ob es an der Hardware liegt, dann ist das ärgerlich und man hätte lieber die paar Euro mehr bezahlt.
Leider bin ich bis jetzt nicht wirklich weitergekommen.
Ich bin gerade am überlegen ob es Sinn macht mal einen Arduino Mega zu holen, da ich dann ja mehr Speicher hätte.
Aktuell sieht mein Speicherverbrauch ja folgendermaßen aus. Und sobald ich meinen Sketch irgendwie vergrößere bekomme ich die Fehlermeldung.
Der Sketch verwendet 28704 Bytes (88%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes. Globale Variablen verwenden 1529 Bytes (74%) des dynamischen Speichers, 519 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
Da ich erst am Anfang meines Projektes bin wird der Speicher wohl sowieso nicht reichen. Meint Ihr das könnte das Problem beheben oder seht Ihr das Problem irgendwo anders?
Beim Sketch lässt sich auch bestimmt noch was optimieren, um Speicher einzusparen. Allerdings wie hier schon angemerkt wurde, liegt wohl nicht an deinem Sketch.
Ich hatte mal ein ähnliches Problem (Thread), allerdings mit einem Pro Mini und einem FT232RL USB-Serial-Adapter, ab ca. 14000 Bytes brach die IDE den Flashvorgang beim Verifizieren (reading) ab. Lange Rede kurzer Sinn, bei mir war/ist es eine Inkompatibilität zwischen den USB 2.0 Ports des Mainboards und den FT232RL, mit USB 3.1 funktioniert es einwandfrei.
Probier mal andere USB-Ports, ggf. auch einen anderen PC, sowie ein anderes (oder mehrere) USB-Kabel, vielleicht auch einen USB HUb, oder falls im Einsatz auch mal ohne.
Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *). So ist er auch auf portablen Geräten lesbar.
Das kannst Du auch noch nachträglich ändern.
Tommy56:
Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *). So ist er auch auf portablen Geräten lesbar.
Das kannst Du auch noch nachträglich ändern.