Liczba postów: 34
Liczba wątków: 3
Dołączył: Mar 2022
Reputacja:
0
Tak ale najpierw jak zdefiniować zmienne PWM ? nie mogę się połapać bo mam 4 dwa 0=1 i dwa PWN ,do przodu bedzie na pinie 1 stan wysoki i PWN1 a przy do tyłu pin 2 wys a PWN2 i po powiedzmy powyżej 1500 jest fo przodu a piniowej do tyłu
Liczba postów: 2,371
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
No nie wiem o czym gadasz. Zmienne przecież masz definiowane w przykładach, więc chyba kumasz jak to robić. Dla PWM 8 bit robisz zmienną uint8_t , to wartości 0-255. Zrób sobie ten przykład z analogami.
Reszta to typowa logika, jak masz odczytną wartość wysterowania W w zakresie 1000-2000, powiedzmy, że +/-50 to martwa strefa w okolicy 1500:
if(W>1550) //jedzie do przodu
{
sensorValue = map(W, 1550, 2000, 0, 255);
}
else if (W<1450) //jedzie do tylu (albo na odwrot)
{
sensorValue = map(W, 1450, 1000, 0, 255); //tu dane wejsciowe są odwrocone, bo min prędkość jest przy wyższej wartości
}
else sensorValue=0; //gdy 1451-1549, albo <1000 >2000
Potem tam gdzie masz wyjście wpisujesz ustaloną wartość PWM, analogWrite(pin, sensorWalue)
Mogą być też jakieś glitche z PWM w AVR, że jak się wpisuje skrajne wartości to i tak coś tam miga, czasami lepiej użyć przy 0 digitalWrite(pin,0);
{
W tych blokach robisz wszystko dla danego odczytu, ustalasz wartość PWM, ustawiasz kierunki, wpisujesz PWM
}
Nie nauczysz się programować robiąc ten jeden program, po to są proste przykłady by pokazywać dostępne funkcje i uczyć jak je używać migając LED czy wciskając przyciski, zanim się zacznie palić Arduino podłączając 230V lub silniki.
Tak jakbyś chciał zbudować jakiś model statku po tym jak nauczyłeś się używać ołówka, a nie wiesz nic o istnieniu młotka, gwoździ, wyrzynarki, drewna, wkrętarki, kleju, itp. , ani jak tego używać.
Jeśli jesteś w C/C++/Arduino na etapie "nie wiem jakie są typy zmiennych" to wróć do kursu, wyszukaj w Google podstawowe informacje, zrób 500 przykładów by Ci się nie myliło co jest białe a co czarne.
Liczba postów: 34
Liczba wątków: 3
Dołączył: Mar 2022
Reputacja:
0
Masz wiele racji, właśnie chce zrobić ten regulator w liczbie 4 szt. i może jeszcze jakieś przełączniki reagując na RC i chyba nic więcej, z tych listingów próbowałem usunąć sterowanie drugim kanałem ale nic z tego nie wychodzi.
Liczba postów: 67
Liczba wątków: 1
Dołączył: Aug 2018
Reputacja:
7
Trzeba ustawiać prawidłowo drabinkę if.
Najpierw dzielisz if>1550 i tu map to nie zagra, będzie mapować też 2000, ale jeśli wcześniej dasz if>1950 pwM1a = 255, a potem else if>1550 pwM1a = map( nThrottleIn ,1550, 1995, 0, 255); to do funkcji map nie podasz wartości większej od 1995, bo jeśli taka będzie to w pierwszym if od razu zapodasz do zmiennej pwM1a 255.
Liczba postów: 34
Liczba wątków: 3
Dołączył: Mar 2022
Reputacja:
0
29-08-2022, 18:16
(Ten post był ostatnio modyfikowany: 29-08-2022, 18:17 przez Marek S.)
Czyli najpierw ograniczyć zakresy a potem mapować ? to ma sens ale jak to dokładnie zapisać ?
Liczba postów: 34
Liczba wątków: 3
Dołączył: Mar 2022
Reputacja:
0
Czytam na bieżąco i się uczę na tym przykładzie
Liczba postów: 34
Liczba wątków: 3
Dołączył: Mar 2022
Reputacja:
0
01-09-2022, 22:29
(Ten post był ostatnio modyfikowany: 01-09-2022, 23:08 przez Marek S.)
A jak zapisać pomiedzy czyli mniejsze niż 1550 a większe niż 1450 ?