Liczba postów: 2,368
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
Program nie ma sensu, to i nie działa prawidłowo. Naucz się używać millis(), zastanów się czy jest sens wyświetlać coś częściej niż co ... - tu sobie wstaw wartość i rób to nie częściej niż jest to absolutnie niezbędne. W kolejnym kroku przestań czyścić ekran, po prostu nadpisuj go nowymi wartościami.
W sumie to bardzo dobry program do nauki, tyle rzeczy tu można zrobić inaczej.
Liczba postów: 2,368
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
No to jak działa, to po co ten temat?
Jak jesteś cyborgiem i potrafisz analizować dane wyświetlane co 5ms (tyle masz tam delaya) to może ma to sens. Jak jesteś człowiekiem to wartości wyświetlane częściej niż 200-1000ms nie mają sensu. Można je wysłać na serial częściej, zapisać do pliku, ale nie LCD 16x2 I2C. Odczyt danych z czujników i kręcenie silnikiem by sterować jakimś procesem można nawet częściej, ale dla oczu operatora to nic nie daje. Zauważysz różnicę, że coś jest wyświetlane w 1FPS, 10FPS, czy 20FPS, ale nie przeanalizujesz oczami takiej ilości danych.
Ekran na I2C zajmuje z 20ms na wysłanie danych, pewnie w tym czasie silnik jest bez sterowania. Zmień ekran na zwykły z interfejsem równoległym, a silnikiem kręć w przerwaniach od timera. Jest jeszcze tak funkcja bliźniacza do millis - micros(), można złapać licznik us przed i drugi po jakiś czynnościach, potem odejmowanie i wyrzucenie na serial pokazuje ile dany blok programu zajmuje czasu. Sprawdź sobie ile trwa odczyt_z_belki(); i czy to Ci generuje tą czkawkę. Są też gotowe biblioteki do silnika krokowego.
Jak nie po drodze z Arduino to nawet dobrze, w czystym C operowanie stanami portu bezpośrednio przez rejestry pamięci uC jest 10x szybsze niż w Arduino - profit.
Liczba postów: 170
Liczba wątków: 0
Dołączył: Dec 2021
Reputacja:
15
Panowanie nad czasem jest jednym z kluczowych elementów optymalizacji programu w Arduino. Delay powinien zniknąć, a porównanie: b%100 == 0 jest potencjalnym zabójcą niezawodności programu.
Wysłane z mojego POCOPHONE F1 przy użyciu Tapatalka
Liczba postów: 2,368
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
Delay wystarcza do zrobienia dema prostego programu, jeśli ma to ogarniać kilka funkcji to trzeba dodać umiejętność korzystania z millis(), jak czas jest krytyczny to przerwania timera.
Serial możesz ustawić na prędkość nawet 1Mbps, zależy od konkretnego konwertera, LCD na I2C nie wiem czy efektywnie przekracza 1kbps.
Liczba postów: 170
Liczba wątków: 0
Dołączył: Dec 2021
Reputacja:
15
FORBOT ma lekcję dedykowaną tylko i wyłącznie tematowi delay i millis. Obejrzeć, zrozumieć, wprowadzić w życie.
Liczba postów: 10
Liczba wątków: 2
Dołączył: Dec 2021
Reputacja:
0
Niestety nie wime jak zastąpić funkcję deleay, z tego co wyczytałem na FORBOT funkcja mills jedynie odmierza czas, usuwając funkcję delay program przestaje działać. Należy zastosować dodatkową bibliotekę stepper w celu konfiguracji działania silnika?
Liczba postów: 170
Liczba wątków: 0
Dołączył: Dec 2021
Reputacja:
15
Linki do kodu nie działają.
Wysłane z mojego POCOPHONE F1 przy użyciu Tapatalka