Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Pomocna odpowiedź

Zadanie 5.2 udalo mi sie w koncu zrobić tak jak chciałem, czyli jak najprościej 😛 Problem był z odpowiednim dobraniem argumentów pętli

void setup () {
  pinMode(3,OUTPUT); // Wyjscie PWM pin3
}
void loop () {
  for (int i=0; i<255; i++) { // Zwiekszanie wypelnienia od 0 do 255
    analogWrite(3, i); 
    delay(2); //przerwa
  }
    for (int i=255; i>0; i--) { //Zmniejszanie wypelnienia od 255 do 0
      analogWrite(3, i);
      delay(2); // przerwa
  }
}

Chyba w pętli for najprościej to zrobić.

  • Lubię! 1
Link to post
Share on other sites

@Krawi92 Super, jestem ciekaw czy zrobiłeś to celowo czy to przypadek. W kodzie masz pewien szczegół związany z wartościami od/do jakich iterujesz. Pierwsza pętla to od 0 do 254 włącznie, druga od 255 do 1 włącznie. Czyli nie ma powtórzeń.

Zazwyczaj pętla z odejmowaniem wygląda tak że wartość startowa jest mniejsza o 1 (tu 255-1) a przyrównujesz do i >= 0, aby zaczepić też zero. 

W twoim kodzie akurat to pasuje, ale gdybyś chciał wypełnić indeksy tablicy "od bandy do bandy" to by nie wyszło 😉 

Link to post
Share on other sites

Nie pomyślałem nawet o tym. Ale przy odejmowaniu troche kombinowałem bo jak mialem 0 to mi chyba nie chciało działać, ale sprawdzę to jeszcze

Link to post
Share on other sites

Poprawilem obie petle w ten sposob

 for (int i=0; i<=255; i++)
 for (int i=255; i>=0; i--)  

Ale dziwna rzecz zauwazylem w serial monitorze. Logika tego co piszesz sie zgadza, ale serial monitor pokazuje ze zaczyna liczyc od 0 do 255 i zawraca,potem konczy na 0 i liczy od nowa. Po poprawieniu operatorow w petli nie widze zadnej roznicy w zwiekszaniu/zmniejszaniu wartosci petli. 

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dnia 21.04.2021 o 18:43, Treker napisał:

@nikolas2020 witam na forum 🙂 Tak, tutaj jest mały haczyk - trzeba poszukać w dokumentacji Arduino funkcji, która będzie tutaj pomocna. Daj znać, jeśli nic nie znajdziesz to podpowiemy.

Witajcie, właśnie dochodząc do tematu nr 9 podstaw Arduino, gdzie tłumaczone były funkcje, udało mi sie rozwiązać zadanie nr 5.4 Wiedziałem że Arduino przesłane znaki traktuje jako kody ASCII ale nie mogłem znaleźć odpowiedniej funkcji aby rzutować to na liczbę, z pomocą przyszła funkcja .toInt() dzięki za odpowiedź Treker pozdrawiam

  • Lubię! 1
Link to post
Share on other sites

@Krawi92 raczej jest różnica, w nowej wersji wykonujesz instrukcje dwa razy dla wartości i = 0, i = 255. Wiec przy wypisywaniu do serial monitora powinno być to widoczne.

@nikolas2020 Super! Dobrze, że uczysz się rozwiązywać problemy. Dokumentacja na stronie Arduino na pewno może się przydać 🙂 

Link to post
Share on other sites
(edytowany)

Cześć!

Mam następujący problem z zadaniem 5.4. - po zadaniu kąta obrotu, serwo obraca się jednak po chwili wraca do pozycji wyjściowej. Co powoduje powrót do pozycji wyjściowej? Poniżej kod:

 

#include <Servo.h> //Biblioteka odpowiedzialna za serwa
int pozycja = "";
Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa
void setup()
{
  Serial.begin(9600);
  serwomechanizm.attach(9);  //Serwomechanizm podłączony do pinu 9
}
void loop() {
 if(Serial.available() > 0) { //Czy Arduino odebrało dane
    pozycja=Serial.parseInt(); //Wklej dane
 if(pozycja <=180 &&& pozycja>=0) { //Jeśli pozycja mieści się w zakresie
    serwomechanizm.write(pozycja); //Wykonaj ruch
  }    
  delay(200); //Opóźnienie                       
}}

 

Edytowano przez Gieneq
Link to post
Share on other sites

@k0lo witam na forum 🙂 

Dobre rozwiązanie, fajnie że wykorzystałeś parseInt(), który sprawdza też poprawność danych.

Nie wiem tylko jak przeszła Ci kompilacja z tym: &&&

Dnia 20.08.2021 o 15:55, k0lo napisał:

po zadaniu kąta obrotu, serwo obraca się jednak po chwili wraca do pozycji wyjściowej.

więc pewnie to powoduje problemy. Możesz też skorzystać z narzędzia autoformat wtedy kod będzie bardziej przejrzysty wizualnie.

W zadaniu też było o wypisaniu komunikatu w przypadku błędnych danych. Np wpisanie liter zamiast cyfr powinno skutkować wypisaniem komunikatu.

Link to post
Share on other sites

Mam pytanie co do układu podłączenia serwomechanizmu do stabilizatora. W zestawie znalazłem tylko jeden kondensator ceramiczny ze zdjęcia układu. O jakiej pojemności powinny być to kondensatory?

Link to post
Share on other sites
42 minuty temu, Masteroreo13 napisał:

O jakiej pojemności powinny być to kondensatory?

Jaki bys nie dal bedzie lepszy niz zaden...w przypadku elektrolitycznego to im wiekszy tym lepszy w tym przypadku

Link to post
Share on other sites

Jaki mniej więcej prąd pobiera wejście sterujące serwa?

Edytowano przez daneil737
Link to post
Share on other sites

Długi czas nie zaglądałem tu po ostatnich próbach zrobienia zadania domowego z czujnikiem odległości za pomocą tablic, Wtedy zabrakło mi informacji o tablicach w kursie. Dostałem linki do artykułów w Google ale i tak nie dałem sobie rade z wykorzystaniem w.w tablic w praktyce.

Zniechęciłem się do nauki programowania na jakiś czas, bo stwierdziłem że jeżeli kurs jest też dla tych, co nie mieli wcześnie żadnej styczności z programowaniem a w zadaniach domowych jednak jest wymagana już jakaś znajomość podstaw programowania, bo na przykład jakaś tam "instrukcja" czy "funkcja" czy coś innego nie było wcześniej omawiane w danym kursie a muszą być użyte do wykonania zadania domowego to jest to strasznie męczące dołujące. Bo niby skąd mogę wiedzieć że coś takiego "ta sama nie omawiana instrukcja czy funkcja" istnieje skoro nie było o niej wspomniane? Zaczyna człowiek wątpić w swoje zdolności i inteligencję a tu nie w tym problem. . .

Zobaczyłem że kurs został "zaktualizowany, poprawiony" myślę no teraz już będzie ok. Zaczynam wszystko od nowa i co? Dalej to samo😕W komentarzach czytam ". . . nie wspomniałem o tym bo jestem złośliwym nauczycielem " albo "jest tu pewien haczyk"... Czyli znowu zabrakło wcześniej informacji o czymś, co będzie potrzebne już teraz 🤔 Znowu szperanie w Google w poszukiwaniu nie wiadomo czego.

To tak jakby się zapisać na kurs prawa jazdy, a instruktor by powiedział : tu jest "gaz", tu hamulec a tam sprzęgło. A teraz idź do domu weź auto tatusia i się naucz jeździć a ja później sprawdzę co potrafisz...   😕

Zdaje sobie sprawę że zaraz mnie zlinczują, i pewnie zwłaszcza ci co już dużo potrafią i im nie przeszkadza ten brak  niektórych informacji ale proszę o zrozumienie że to nie jest żaden "hejt" czy jak to teraz tam się nazywa, tylko taka drobna uwaga z czym mogą się spotkać nowicjusze i co w jakimś stopniu zniechęca.

Sam przeczytałem dwa kursy podstaw elektroniki na FORBOCIE I i II poziom i uważam że jest to coś pięknego. Spory zastrzyk wiedzy zrozumiały nawet dla początkującego takiego jak ja. Może po prostu wystarczy zmienić w tytule, że jest to kurs programowania dla średnio-zaawansowanych a nie początkujących...🤔 

Pozdrawiam i trzymajcie się ciepło😉

Link to post
Share on other sites

@Vova kurs nie obejmuje wielu tematów, bo jest to naprawdę niemożliwe. Ostatnio zabrałem się za pisanie czegoś o tablicach i określenie "czegoś" jest dość trafne, bo jak wejdziesz w temat to stajesz przed wyzwaniem pokroju tabliczka mnożenia – jeżeli masz świadomość, że twój uczeń może nie znać dodawania, to robisz kurs dodawania, bez którego nie ruszy dalej więc nie ma sensu kontynuować... i w ten sposób wymyślasz dłuuugie lekcje matematyki od zera 🙂 

Więc czasem są potrzebne uproszczenia. Sam ostatnio trochę się dokształcam z C i trochę z C++ i zacząłem pisać kurs o tablicach, żeby już więcej nie truć ludziom, żeby gdzieś tam poszukali sobie jak zrobić lepiej zadanie w kursie. Wiesz ile wyszło części? 12 😄 z czego 4 są wyłącznie projektowe, 4 obejmują typowe zagadnienia tablic, reszta tematy pokrewne.

Tu masz pierwszą część kursu, która tłumaczy jak rozwiązać typowe problemy kursantów. Dziś publikuję 3 część i jakoś co tydzień będą pojawiać się kolejne:

 

  • Lubię! 1
Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.