Prosty stoper - problem z uruchomieniem - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino) +--- Wątek: Prosty stoper - problem z uruchomieniem (/watek-prosty-stoper-problem-z-uruchomieniem) Strony:
1
2
|
Prosty stoper - problem z uruchomieniem - anka389 - 10-08-2019 Hej, właśnie jestem na początku mojej drogi w programowaniu Arduino i trochę się wyboista zrobiła Napisałam taki oto kod i wszystko się kompiluje, ale odliczanie czasu nie działa. Ktoś podpowie gdzie szukać błędu? Kod: void minutes() { Kod: void startWatch() { wszystkie deklaracje mam w innym pliku, jest ustawienie pinów i konfiguracja wyświeltacza Zakładam że nakręciłam w tej części z czasem :/ RE: Prosty stoper - problem z uruchomieniem - Jarewa0606 - 10-08-2019 Pokaz to " stopWatch();" RE: Prosty stoper - problem z uruchomieniem - anka389 - 10-08-2019 (10-08-2019, 19:46)Jarewa0606 napisał(a): Pokaz to " stopWatch();" Kod: //for stop the clock RE: Prosty stoper - problem z uruchomieniem - Jarewa0606 - 10-08-2019 A wyświetla się coś?? błąd jest ale mimo to jakieś krzaczki na wyświetlaczu powinny być do 60s powinno liczyć w miarę dobrze choć użycie funkcji delay w tym to pomyłka na 1s możesz mieć pomyłki 15%.. Kod: if (sec == 60) { //changing minutes Nie resetujesz zmiennej "sec" a po drugie wysyłasz gdzieś indziej a jeszcze nie wyświetliło powinno być Kod: if (sec == 60) { //changing minutes No i ten if powinien być pierwszy by widzieć 59s-0s a nie 59s-60s-0s No i najważniejsze sekundnik powinien być na przerywaniach to da bardzo dokładne wyniki. Wykorzystaj timer a nie delay. Od biedy można jeszcze użyć funkcji millis. RE: Prosty stoper - problem z uruchomieniem - kaczakat - 11-08-2019 Niestety tak to nie zadziała, nawet jak Ci się będzie wydawało, że działa, to tylko tak sobie. Minimum to użycie funkcji millis() do odmierzania czasu. Możesz użyć funkcji z C sprinf do formatowania ciągu znaków tak by wyrzucać na ekran całą linię tekstu: Kod: char napis[17]; Znajdź sobie w historii postów funkcję czas(), wrzuciłem tam przykład jak odliczać czas z millis(). Jak już będziesz chciała bardziej dokładnie to trzeba użyć swojego timera i przerwań. Użycie delay() powoduje, że każde dodanie/odjęcie polecenia w loop zmieni sposób zliczania czasu. Użycie millis() do odmierzenia 10ms też może być niedokładne, czasami coś może umknąć gdy pętla będzie dłuższa niż kilka ms. Lepiej byłoby zarejestrować stan początkowy z millis, końcowy i z tego obliczyć czas zmierzony stoperem, a te pośrednie wyliczenia ms pokazywane w czasie mierzenia traktować tylko orientacyjnie (i tak cyferki szybko przelatują). RE: Prosty stoper - problem z uruchomieniem - Jarewa0606 - 11-08-2019 Można jeszcze tak formatować Kod: lcd.setCursor(15, 0); I tak zliczac Kod: //////////// czas MTh Time_czas pochodzi od timera ustawiony na 2Hz.. Bez problemu ustawisz timer1 na 100Hz wtedy przerywanie będzie dokładnie co 10ms.. Cod w setup dla Ardunio 16MHz użycie TIMER1 Kod: cli(); Kod: ISR(TIMER1_COMPA_vect){ ms będzie dodawało dokładnie co 10ms RE: Prosty stoper - problem z uruchomieniem - anka389 - 11-08-2019 Do timerów to ja jeszcze nie doszłam, ale na pewno biorę się za lekturę. Dziękuję wszystkim za wypowiedzi RE: Prosty stoper - problem z uruchomieniem - semi - 13-08-2019 (11-08-2019, 09:54)Jarewa0606 napisał(a): Można jeszcze tak formatowaćW porównaniu do kodu kaczakat ten jest dłuższy a zmienne będzie wyświetlał bez poprzedzającego zera co w przypadku sekund i dziesiątych części sekund nie wygląda zbyt ciekawie. RE: Prosty stoper - problem z uruchomieniem - Jarewa0606 - 13-08-2019 A po co ci 056 sekud?? Jak wystarczy 56. Nie wiem co jest lepsze ale tutaj nie ma tablicy więc ta metoda mniej zajmuje. Pierwsze dzieli przez 10 i pokazuje dziesiątki drugie pokazuje końcówkę czyli od 0-9 RE: Prosty stoper - problem z uruchomieniem - semi - 13-08-2019 (13-08-2019, 14:38)Jarewa0606 napisał(a): A po co ci 056 sekud?? Jak wystarczy 56.Napisałeś tak jakbys nigdy nie widział zegara cyfrowego lub stopera. K0d, który pokazałeś wyświetli tak: 0:0 0:1 ... 0:9 0:10 0:11 Widziałeś zegar czy stoper wyświetlający czas w ten sposób? Jak dodasz sekundy jeszcze ciekawsze efekty będą. (13-08-2019, 14:38)Jarewa0606 napisał(a): ale tutaj nie ma tablicyJakiej tablicy? Ile mniej? (13-08-2019, 14:38)Jarewa0606 napisał(a): więc ta metoda mniej zajmuje.Jakiej tablicy? Ile mniej? Dodaj jeszcze wyświetlanie w prawidłowy sposób i ponownie sprawdź ile zajmie pamięci. |