Witam, postanowiłem zrobić sobie podstawkę pod kufel, która byłaby podświetlana diodami rgb, które zmieniałyby kolor poprzez odczyt temperatury. Docelowym mikrokontrolerem ma być tiny25, więc jestem ograniczony z pamięcią flash. Znalazłem na stronie
http://olson-projects.blogspot.com/2012/04/rgb-led-temperature-indicator.html kod i przerobiłem go trochę na swoje potrzeby.
Ogólnie rzecz biorąc, attinka robi 100 pomiarów adc i uśrednia je(zrobiłem tak aby odczyt nie skakał) i przelicza na stopnie celsjusza, a następnie w pętli głównej instrukcje warunkowe sprawdzają, jaka jest temperatura(
WAŻNE: W OBECNEJ WERSJI KORZYSTAM Z ZESTAWU ATB, WIĘC ODCZYTUJE POMIAR Z POTENCJOMETRA I ŚWIADOMIE USTALIŁEM TAK WYSOKIE PROGI NAPIĘCIA MIERZONEGO ) i na tej podstawie oblicza stopień wypełnienia impulsu.
Dla przykładu, jeśli mamy temperaturę 8 stopni, to wypełnienie czerwonej jest zerowe, niebieskiej pełne(255), a zielonej 32*temperatura - 256, czyli daje nam to zerowe wypełnienie, a przy górnym progu(troszkę poniżej 16 stopni) około 255, czyli pełne.
Niestety, pojawia się problem przy przejściu przy 16 stopniach, gdy zostaje przekroczony ten próg, wartość wypełnienia diody niebieskiej wynosi 128, a więc połowę tego, czego chciałbym uzyskać, a w efekcie przy 20 stopniach niebieski gaśnie całkowicie i wzwyż dostaje wartość 128. Wywnioskowałem to po dołączeniu wyświetlacza lcd, aby sprawdzać stany wypełnienia.
Zmienna ta zachowuje się, jakby nie była unsigned, czyli ma zakres od 128 do -128, a nie od 0 do 256 jakbym sobie tego życzył.
Byłbym wdzięczny za pomoc
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.