Witam, chciałem zrobić projekt na ArduinoUno, z prockiem ATmega328P, nie mogę zrobić tego w ArduinoIDE ponieważ dla prowadzącego jest to za proste
. Napisałem program którym z powodzeniem mogę sterować położeniem serwa programowo. Dodałem obsługę potencjometru z ADC i przerwaniami, jeżeli w pętli wpisze:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
To serwo reaguje, dla położeń potencjometru przed połową ustawia się w położeniu 0 stopni, jak przejdę połowę zasięgu potencjometru to leci do końca. Chciałem jednak aby ruch serwa był ściśle związany z pozycją potencjometru. To też wymyśliłem, że do wartości 0.8 dodam (1.4*(odczyt z ADC/255)). W takiej konfiguracji przez 80% zasięgu potencjometru nic się nie dzieje po czym serwo wykona ruch o mniej więcej 50 stopni. Nie wiem czy to wina mojego przeliczania, próbowałem już różnych konfiguracji bo myślałem, że procesor nie daje rady z dzieleniem tego na bieżąco. Oto cały kod:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Z góry dziękuje za odpowiedź i przepraszam jeżeli pytanie jest trywialne
Edit: Poradziłem sobie z tym problemem przemnażając wartość ADCH przez 100 i dzieląc przez 25500. Mam natomiast jeszcze jedno pytanie: czy jest jakieś optimum tego rozwiązania? Bo z tego co myśle to chodzi o to że procesor nie radzi sobie z bardzo małymi wartościami dla tego nie było żadnego odzewu od serwa przez większość zakresu ruchu potencjometru.
Mam jeszcze błąd w kodzie, oczywiście powinno być
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.