Masz piękny przykład buffer overflow w programie... Chociaż przyznam, że szukając tego błędu już sam zaczynałem wierzyć w czarną magię.
Zacznijmy od początku - sam błąd nie ma nic wspólnego z linijką i display.print(). Spróbuj usunąć to wyświetlanie, pewnie powiesz, że wtedy działa. Ale zobacz co będzie jeśli do deklaracji valveState dodasz volatile - błąd znowu się pojawi.
Przyczyna błędu nie ma nic wspólnego z display.print(), może poza tym, że jeśli usuwasz tę linię, to optymalizator usuwa całą zmienną valveState, bo nie jest nigdzie indziej używana i wtedy program działa poprawnie.
Jeśli chcesz zobaczyć, gdzie jest błąd to zmień valveChangeState na:
Teraz zobaczysz co się dzieje - parametr pin to nie jest indeks, ale numer pinu i tutaj masz zapis poza zakresem valveState, co akurat wylądowało w wynikach...
Zacznijmy od początku - sam błąd nie ma nic wspólnego z linijką i display.print(). Spróbuj usunąć to wyświetlanie, pewnie powiesz, że wtedy działa. Ale zobacz co będzie jeśli do deklaracji valveState dodasz volatile - błąd znowu się pojawi.
Przyczyna błędu nie ma nic wspólnego z display.print(), może poza tym, że jeśli usuwasz tę linię, to optymalizator usuwa całą zmienną valveState, bo nie jest nigdzie indziej używana i wtedy program działa poprawnie.
Jeśli chcesz zobaczyć, gdzie jest błąd to zmień valveChangeState na:
Kod:
void valveChangeState(int pin, int state){
if (pin >= 5)
Serial.println("Kaboom!");
valveState[pin] = state;
digitalWrite(pin, state == 1 ? HIGH : LOW);
}
Teraz zobaczysz co się dzieje - parametr pin to nie jest indeks, ale numer pinu i tutaj masz zapis poza zakresem valveState, co akurat wylądowało w wynikach...