aaannnd pisze:Posprawdzałem wczoraj, wprowadzenie zmiennej do podążania nie ma zbytniego wpływu, działa tak samo.
Jedno co jeszcze mogę sprawdzić, to wykorzystując różnicę między zadaną a pokazywaną prędkością, dołożyć zmienną, która będzie odpowiadać za prędkość ruchów serwa. Im większa różnica między zadaną a pokazywaną, tym większa prędkość serwa, a im mniejsza różnica tym mniejsza prędkość. Prędkość serwa ustala się w zakresie 1-255, czyli np dla różnicy 8km/h -> prędkość serwa 80, przy szybkim zatrzymaniu szybko wraca na zero; a dla różnicy 10km/h -> prędkość serwa 10 i wskazówka pływa sobie powolutku. Potem tylko eksperymentalnie dobrać zakres mapowania.
Zakładam, że zaadaptowałeś kod od @dziobu do pętli głównej? Jeśli dobrze strzelam, to przez to wtedy wzrastanie wykonuje się po prostu bardzo szybko (bo procesor jest szybki
), trzeba by dodać pewnie odpowiednie opóźnienie, w tym przypadku najlepiej oparte na millis(), bo niestety wątków nie ma
.
Czyli coś takiego:
Kod: Zaznacz cały
unsigned long last_change = 0;
void loop()
{
if(millis() - last_change >= 20) //założyłem 20 ale opóźnienie możesz dobrać eksperymentalnie
{
//kod od @dziobu
last_change = millis();
}
}
Oczywiście jeśli dobrze zakładam i masz to w pętli głównej, bez żadnych opóźnień.
Jarewa pisze:A nie prosciej zrobić średnia rosnąca lub opadająca??
Chciałem wspomnieć o średniej, bo tak znowu wygładzam dane z GPS, ale tutaj zastanaia mnie czy jakby zmienna częstotliwość próbkowania nie wpłynie negatywnie na działanie. Bo mając cały czas dane np. jak w GPS 10Hz to wygładzanie średnią będzie okej, a tutaj jak jedzie szybciej będzie inaczej, jak się zatrzyma będzie inaczej- ale tak sobie tylko myślę, być może się mylę. No i to chyba nie prostsze
.