Hi
unsigned long ZiegeInStation[5][4] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; //[Stand] [Laser, TagCode, Futtermenge]
... soll Was bringen?
unsigned long ZiegeInStation[][4] = {
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
}; //[Stand] [Laser, TagCode, Futtermenge]
... könnte halbwegs zum Erfolg führen.
MagicNumbers - z.B. die Pin-Nummern für RFID Zeile 231/232 - warum keine Variablen?
Stuchwort ... #define weg, const byte hin.
Sofern Dein µC keine 256 Pins hat, reicht BYTE dicke aus.
Was machen A0 bis A15?
Zeile 1229:
tSchneckAusschalten = Zeit + millis();// = abschaltzeit
DAS fällt Dir (nach 49,x Tagen) auf die Füße.
IMMER
millis()-Startzeit>=Wartezeit
Wenn Es blöd läuft, loop() braucht knapp über 1ms pro Durchlauf - verpasst Du den Ausschalt-Zeitpunkt und die Schnecke wird frühestens in 49,x Tagen erneut erfolgreich geprüft werden können - sofern dann dort 'passend' die Millisekunde getroffen wird.
Ok, weit hergeholt, aber warum nicht einfach sauber programmieren??
Davon ab wird dieser Fehler MIT SICHERHEIT mitten in der Nacht, Freitag auf Samstag auftreten - so hat die Schnecke über 2 Tage Zeit, Unsinn zu treiben.
Zeile 1669:
void shift()
Das schreib förmlich nach einer Schleife - macht dann zwar nichts Anderes, liest Sich aber deutlich besser - und wird weniger Platz brauchen.
Das Ganze liest sich zumindest so, als ob Du Dir den einen oder anderen Gedanken gemacht hättest.
Du wirst also eine Art Ablauf erstellt haben, nach Dem Du Das geschrieben hast - zeig besser Den - aus dem Code werde ich nur so schlau, daß Du wohl fünf Ziegen füttern und melken willst.
MfG