Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Pomocna odpowiedź

  • 2 tygodnie później...

Na szczęście mój egzemplarz Arduino okazał się "idioto-odporny" 🤪

Zadanie 5.4 napisałem i działa, ale wcześniej przy podłączaniu potencjometru popełniłem kardynalny błąd. Oczywiście wyleciały mi z głowy te czerwone ramki z ostrzeżeniami, z poprzednich części i z rozpędu potencjometr podłączyłem do napięcia 9v.

Na szczęście po przekraczaniu 5V mikrokontroler tylko się zawieszał... ale ja katowałem go dalej, bo zamiast szukać błędu w kablach, ciągle próbowałem poprawiać kod 🥴

Zdaje się ze wytrzymał i nadal jest w pełni sprawny, bo po tym zdarzeniu sprawdzałem go na różne sposoby, ale nie mam pewności, że teraz nie boli go coś, o czym jeszcze nie wiem.

Trochę znam samego siebie, dlatego oryginalne Arduino z zestawu, po zakupie tylko pooglądałem, wgrałem jakiś "Blink" i teraz leży grzecznie w szafce.
Ja uczę się na najtańszym klonie. Ale nawet i tego mi szkoda...

Wiem, że nie da się napisać kursu tak, aby ustrzec uczestników przed wszystkimi możliwymi problemami, bo nikt nie jest w stanie opisać wszystkich kombinacji na jakie mogą wpaść ludzie. Ale może by tak (przy najbliższej aktualizacji) ponownie wtrącić zdanie ostrzegające "Potencjometr podłącz pod maksymalnie 5V!" 👍

 

Gdzie drwa rąbią, tam wióry lecą. Każdy popełnia błędy, Ci bardziej wprawieni też i nawet to ze co 2 zdanie w kursie będzie na czerwono nie da gwarancji, ze się nie pomylisz. Na szczęście pracujemy na stosunkowo niskich napięciach, to ucierpi ew. Sprzęt 😆 

  • Lubię! 1
  • 2 miesiące później...
(edytowany)

Dopiero zacząłem się uczyć i nie znam jeszcze "pozycja += zmiana" o co chodzi z tym += ?

Mój kod tak najbardziej łopatologicznie

Zadanie 5.2

#define LED 3

int wypelnienie = 0;
int zmiana = 1;

void setup() {
  pinMode(LED, OUTPUT); //ustawienie pinu 3 jako wyjście

}

void loop() {
 ;
 analogWrite(LED, abs(wypelnienie)); //Generujemy sygnał o zadanym wypełnieniu

if (wypelnienie < 255){
    wypelnienie = wypelnienie + zmiana; //zwiększamy wypelnienie
}

else { //jeżeli wypełnienie = 100% wtedy zmniejszamy

    wypelnienie = - wypelnienie;  
}
 delay(10); //prędkość zmiany wypełnienia
}

 

Edytowano przez kwiatekelk

@kwiatekelk witam na forum 🙂 

i += 4; oznacza to samo co i = i + 4; czyli jest to dodanie do tej samej liczby (zwiększenie liczby o np. 4).

Jak masz i += 1; to możesz zapisać równoważnie jako i++ lub ++i, na razie bez wnikania w różnicę tych 2 zapisów.

Tu też taka historycza ciekawostka, język C++ w którym piszesz kod Arduino to zinkrementowany C czyli w praktyce D (bo C++ czyli C += 1, C = C + 1 = D).

  • Pomogłeś! 1
  • 2 miesiące później...
(edytowany)

Na początku artykułu dodałbym jedno proste zdanie: PWM (Pulse-Width Modulation) - metoda regulacji polegająca na na zmianie wypełnienia sygnału, a potem wyjaśnić, na czym to polega. Można też inaczej, w każdym razie pisanie wielkiego wprowadzenia, bez wstępnego powiedzenia, o czym właściwie będziemy mówić, jest poważnym błędem redakcyjnym i utrudnia czytanie i rozumienie. 😞

Edytowano przez szaroblekitny

Nie da sie czegos tak napisac zeby wszystkim pasowalo..😉 zawsze czegos bedzie brakowac dla niektorych, a akurat na temat pwm jest tyle ze nie trudno sie dowiedziec o co chodzi jesli ktos czegos nie zrozumial z artykulu..😉

Dnia 16.07.2015 o 22:52, Elvis napisał:

Co do zadania 5.2 - program działa dla zmiennej "zmiana" = 5. Ale czy będzie działał dla innej wartości? Np. zmiana = 4? Co zrobić, żeby nadal działał poprawnie?

Wydaje mi się że można by to zrobić za pomocą map(), aczkolwiek jeszcze nie próbowałem. 

Czy ktoś ma jakieś pomysły?

(edytowany)
Dnia 7.02.2022 o 07:46, Gieneq napisał:

język C++ w którym piszesz kod Arduino to zinkrementowany C czyli w praktyce D

Ja bym jednak rzekł, że w praktyce C z dodatkami, coś po C. Nazywanie go D ujmuje istniejącemu językowi programowania D.

PS Ja wiem, że historycznie to go nie było na scenie, ale współcześnie to go szkoda :P.

PPS https://www.stroustrup.com/bs_faq.html#name (tl;dr: to nie miało być D)

Edytowano przez trainee
  • Pomogłeś! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...