Hej
Bardzo mi się podoba zaangażowanie w Twój projekt. Faktycznie od strony założeń - wszystko w dechę
Sam, swego czasu stworzyłem sobie taki sterownik, jednak nie zaczynałem od programowania przy użyciu Arduino IDE, a AVR GCC
I właśnie do tego chciałbym nawiązać, z góry zaznaczę jednak że ekspertem nie jestem, ale trochę w tym się bawię :):
Piszesz, że brakuje Ci już miejsca w sterowniku. Wiadomo, przy 1500 liniach kodu, o optymalizację jest bardzo ciężko. Jednak mogę Ci powiedzieć, że w kilka wieczorów da się wyciągnąć z tego jeszcze trochę miejsca, a na pewno odzyskasz sporo cykli kontrolera: DigitalWrite() oraz DigitalRead() to są wygodne funkcje, zgodzę się, ale jak zagłębicie się w biblioteki, to zobaczycie mnóstwo bezużytecznego kodu który rzadko jest używany. Bez problemu można zastąpić te funkcje... odwoływaniem się bezpośrednio do rejestrów. Można to robić spokojnie z poziomu Arduino IDE.
Fragment kodu dla lampek w szafie z czujnikiem ruchu i otwarcia drzwi, jaki sam stworzyłem:
Cytuj///PINY - OUTPUT
// pinMode(szafaZewnatrz, OUTPUT);
// pinMode(szafaGora, OUTPUT);
// pinMode(szafaPolka1, OUTPUT);
// pinMode(szafaPolka2, OUTPUT);
// pinMode(szafaPolka3, OUTPUT);
// pinMode(szafaPolka4, OUTPUT);
// pinMode(szafaPolka5, OUTPUT);
// pinMode(szafaPolka6, OUTPUT);
DDRA |= 0b11111111;
PORTA |= 0b00000000;PORTA = WYJSCIA_out;
WYJSCIA_out |= PIR_st ? szafaZewnatrz : 0b00000000;
Całość na githubie, jakby ktoś chciał przejrzeć. Nie przeraźcie się - mam dużo naleciałości z pracy (programista PLC - próbowałem zasymulować cykl sterownika i przenieść logikę cyfrową z nich :D)
Ale prosty tutorial wytłumaczy o co mi chodzi: Kurs AVR GCC
Myślę, że wtedy mógłbyś na prawdę sporo wyciągnąć jeszcze z tego programu
A od siebie jeszcze dodam, że myślę mógłbyś rozważyć tranzycję (albo kto inny) z płytek Arduino na ESP8266 lub ESP32. Płytki z podstawową elektroniką pod to kosztują poniżej 100 zł a z wersją ESP32 mamy jeszcze Bluetooth (BLE). Obie płytki obsługują WiFi, można na nie ładować proste (a nawet bardziej skomplikowane) strony WWW. Mają 512kb lub 4MB pamięci na program, 40-80mHz czas cyklu.... i da się je programować jak każde Arduino - i jest tak o połowę mniejsze. Ale wtedy dużo będzie trzeba pisać od nowa - nie wszystko działa idealnie jak na "oryginalnych" płytkach Arduino.
Sam, jak będę miał przypływ czasu planuję na tych płytkach coś zrobić. Najpierw parę projektów dla domu, a potem sterownik + oświetlenie LED .
A propo PWM jest jeszcze alternatywne rozwiązanie. Można kupić bardzo fajne płytki 16 kanałowe wyjścia PWM 12 Bit - można na nich osiągnąć niesamowitą płynność w przyroście jasności (standardowe 8-10 bitów było dla mnie za mało, widać było poszczególne kroki). Płytki komunikują się po I2C więc właściwie od strony programu jedyne czym się trzeba martwić to obliczeniem stopnia wysterowania. Traci się dużo mniej cyklu kontrolera (z tego co się orientuję Arduino także PWM generuje w czasie cyklu...)
Ale i tak podziwiam za werwę w stworzeniu tego W czym pisałeś kod ? Arduino IDE, czy już jakieś inne lepsze IDE? Ja ostatnio robiłem tranzycję na Atom'a