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

@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 😉 

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. 

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

@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ć 🙂 

  • 1 miesiąc później...
(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

@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.

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

  • 4 tygodnie później...

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😉

@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

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...