Arduino Polska Forum
Pomoc z działaniem projektu - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Pomoc z działaniem projektu (/watek-pomoc-z-dzia%C5%82aniem-projektu)

Strony: 1 2


Pomoc z działaniem projektu - lightzone - 18-12-2021

Witam jestem nowym użytkownikiem arduino uno i potrzebuję pomocy w działaniu kodu. Mam dwie funkcję jedna odnosi się do działania silnika krokowego i jego obrotów natomiast, druga do odczytywania wagi z belki tensometrycznej. Osobno wszystko fajnie chodzi, jednak kiedy próbuje połączyć to w całość (ciągłe działanie silnika i jednoczesne odczytywanie wagi w krótkim czasie). Nie wiem czy w arduino da radę zrównoleglić program ale na czymś takim by mi zależało. Na ten moment waga na lcd szybko się aktualizacji co jest w porządki jednak z taką samą prędkością silnik ma krótkie przerwy.
Poniżej kod:
https://paste.ofcode.org/naKX5Ti43pY8HNsujgB3jL


RE: Pomoc z działaniem projektu - kaczakat - 18-12-2021

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.


RE: Pomoc z działaniem projektu - lightzone - 18-12-2021

(18-12-2021, 21:52)kaczakat napisał(a): 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.
Dziękuje za odpowiedź, nie za bardzo po drodze mi z arduino, potrzebuje jedynie zoptymalizować ten projekt. Co do wyświetlania potrzebuję na LCD otrzymywać wyniki jak najczęściej by zbadać siłę oderwania. Co znaczy, że nie działa? Po odpaleniu lcd pokazuje wyniki z belki w oczekiwany sposób, jedynie silnik ma krótkie przerwy w działaniu, którym chciałbym zapobiec, niestety nie wiem jak.


RE: Pomoc z działaniem projektu - kaczakat - 18-12-2021

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.


Pomoc z działaniem projektu - MadMrQ - 18-12-2021

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


RE: Pomoc z działaniem projektu - lightzone - 19-12-2021

Rzeczywiście zauważyłem różnice w uzyskiwanych danych na wyświetlaczu lcd oraz tych w monitorze portu szeregowego, inną siłe pokazuję mi LCD a inną dostaje w monitorze portu. Kody działają ale osobne mianowicie powyżej wysłany kod powstał z bardzo amatorskiego połączenia przeze mnie tych dwóch kodów, które jak mi się wydaje dzialają poprawnie.
Kod do silnika: https://paste.ofcode.org/8ZcgiR6vBVQFL4rQKVfhUt
Kod do ważenia przez belke: https://paste.ofcode.org/eqfWmxZkJCB5R4sRLHrug8
Delay wynosił 5 bo jak wydawało mi się,że sterowałem nim prędkością obrotową silnika, i chciałem ją zwiększyć.


RE: Pomoc z działaniem projektu - kaczakat - 19-12-2021

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.


RE: Pomoc z działaniem projektu - MadMrQ - 20-12-2021

FORBOT ma lekcję dedykowaną tylko i wyłącznie tematowi delay i millis. Obejrzeć, zrozumieć, wprowadzić w życie.


RE: Pomoc z działaniem projektu - lightzone - 01-01-2022

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?


Pomoc z działaniem projektu - MadMrQ - 02-01-2022

Linki do kodu nie działają.

Wysłane z mojego POCOPHONE F1 przy użyciu Tapatalka