Hallo Marco,
dass das Programm sehr weit nach oben springt sollte klar sein, da die Sub-Funktion "pinAnazeige" hier nunmal endet, zurück in die loop geht, die dann endet und von neuem beginnt.
Warum die letzten drei prints nicht ausgegeben werden wenn das "error" kommt, kann ich nicht sehen. Hier befindet man sich ja schon in der if-Anweisung die das print "error" enthält.
Das "Error" selbst hat innerhalb dieses Strings hier jedenfalls nichts damit zu tun und kann nicht irgendwie aktiv werden. Es sei den der String wird noch irgendwie irgendwo ausgewertet - sieht aber nicht danach aus.
Versuche mal den Inhalt vom ersten (fehlendem) print manuell in einen definitven String zu ändern (z.B. Serial.print("Ziffer 0"); ). Wenn der dann nach dem "error" auch kommt dann tippe ich darauf das der Inhalt von print jetzt noch fehlerhaft ist. Print scheint gar keinen Inhalt zu haben. Was ja nicht sein kann wenn alle Prints davor in der gleichen Form "print(digitalread ... )" funktionieren. Warum sehe ich aber nicht.
Viele Grüße
Jörg
Edit1:
Unglücklich finde ich immer so Bedingungen wie z.B. " >=7 " zu wählen wenn man auf eine Zahl prüft ob sie größer als 6 ist. Da würde ich persönlich immer direkt " >6 " bevorzugen, weil man hier direkt sehen kann worum es geht, nämlich um einen Test auf "größer als 6". Die 7 kommt zwar nach 6, ist aber im Bezug auf die Prüfung bei Ganzzahlen nicht relevant.
Das gleiche sinngemäß umgekehrt für die for-Schleifen z.B. bei "(..., j <=10 , ... )".
Edit2:
Um die "if 's" alles zusammenzufassen würde ich Dir ncht empfehlen den Operator ?: zu benutzen. Wie Du selbst gesehen hast erzeugt er eher Verwirung, bei der großangelegten Verwendung in Blöcken ist diese umso größer.
Daher schaue Dir dazu lieber ein "switch-case" Konstrukt an.
Lesezeichen