(04-09-2018, 16:48)ArduinoNewbie napisał(a): Projekt mieści się na Atmedze 328W pamięci programu tak bo nie widzę obsługi błędów. Zewrzyj 1-Wire do masy, jaki jest rezultat? To samo z I2C, co się dzieje? Odłącz termometry, jaka temperatura się wyświetla? Czy nie powinien to być komunikat o braku czujnika a nie kosmiczna temperatura?
Czy nie uważasz, ze dobrze napisany program powinien reagować na błędy? Czy nie powinien mieć włączonego watchdoga? Czy nie powinien, jeśli jest taka możliwość, wysyłać informacji diagnostycznych na np USART (przykładowo o resecie uC i przyczynie resetu, o wykryciu bądź nie wyświetlacza). Czy zamiast delay 5 sekund uC nie powinien być usypiany aby pobierać mniej energii i generować mniejsze zakłócenia EMI?
Już na początku kodu masz wpadkę:
Kod:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Kod:
display.clearDisplay();
display.drawBitmap(0, 0, logo, 128, 64, 1);
display.display();
Zrób tez mały eksperyment, odłącz rezystory podciągające I2C. Jak zachowa się program? Na 99% zawiśnie. Czy tak powinno być?
nie pamiętam czy SSD1306 może zablokować w pewnych sytuacjach I2C ale NA PEWNO, nie masz mechanizmu, który w takiej sytuacji "ożywia" magistralę. Program zawiśnie i reset nie pomoże (przynajmniej nie jeden), trzeba będzie odłączyć zasilanie jak w Windows. Chcesz robić konkurencję firmie Micro$oft?
Jestem przekonany, że gdy napiszesz ten program "po bożemu" to zacznie brakować pamięci programu.
Jestem także przekonany, że w kilka sekund potrafię program w postaci w jakiej teraz jest doprowadzić do nieprzewidywalnego zachowania (nieprawdziwe temperatury, zawieszanie).
Sprawdź też ile tak naprawdę masz wolnej pamięci RAM.
PS
Gdyby to była praca końcowa w technikum, to za taki program, ocena dopuszczająca z dwoma minusami. A wystarczy poświęcić jeden czy dwa dni aby było 4..5.