Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Pomocna odpowiedź

Hejka, zrobiłem zadanie 5.4 nie sprawdzałem jak wy zrobiliście ale to w miarę proste rozwiązania chyba będą podobne.

#include <Servo.h>
 
Servo serwomechanizm; 
int pozycja = 0; 
String odczyt = ""; 

void setup() 
{ 
  Serial.begin(9600);
  serwomechanizm.attach(9);  
} 
 
void loop() 
{  
  while (Serial.available() > 0) {
    odczyt = Serial.readStringUntil('\n');
    pozycja = odczyt.toInt();
    Serial.print("aktualna pozycja =  ");
    Serial.println(pozycja);
  }if(pozycja <= 180){
    serwomechanizm.write(pozycja);
  }else{ 
    Serial.println("zla wartosc");
    pozycja = 0;
  }    
}

 

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

@mn860618 super 🙂 Możesz ewentualnie rozbudować walidację danych:

if(pozycja <= 180){

I zrobić to na wcześniejszym etapie żeby sprawdzić czy napis da się przekonwertować na liczbę od 0 do 180.

Link to post
Share on other sites
1 godzinę temu, Gieneq napisał:

żeby sprawdzić czy napis da się przekonwertować na liczbę od 0 do 180.

Ile będzie wynosić pozycja.toInt() jeśli pozycja będzie miała wartość "gdziekolwiek"?

Czy na pewno wartość będzie między 0 i 180 jeśli pozycja będzie "-33"?

 

 

Link to post
Share on other sites
4 godziny temu, Gieneq napisał:

@mn860618 super 🙂 Możesz ewentualnie rozbudować walidację danych:


if(pozycja <= 180){

I zrobić to na wcześniejszym etapie żeby sprawdzić czy napis da się przekonwertować na liczbę od 0 do 180.

 

3 godziny temu, ethanak napisał:

Ile będzie wynosić pozycja.toInt() jeśli pozycja będzie miała wartość "gdziekolwiek"?

Czy na pewno wartość będzie między 0 i 180 jeśli pozycja będzie "-33"?

 

 

Hej, dzięki za odpowiedz. Tzn. chodzi wam obojga że jeśli wartość będzie poniżej zera... w tym przypadku chyba trzeba by dodać jeszcze jeden warunek do if() by uniemożliwić działanie ujemnych wartości. Nie próbowałem wpisywać ujemnych wartości.

 

Gieneq, walidacja danych, wcześniejszy etap mógłbyś rozwinąć?

Niestety nie operuje takim językiem jeszcze ale za wskazówki byłbym bardzo wdzięczny.  

  

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

40 minut temu, mn860618 napisał:

w tym przypadku chyba trzeba by dodać jeszcze jeden warunek do if() by uniemożliwić działanie ujemnych wartości.

Bardzo dobrze. Problem może być, jeśli wpiszesz coś innego niż liczba - toInt() radośnie uzna że miałeś na myśli zero...

@Gieneq, możesz rozwinąć problem walidacji?

Link to post
Share on other sites

Ok. zrobiłem zadanko 5.5 i działa jak powinno wg. mnie oczywiście a co powiedzą inni 🙃 😁

#include <Servo.h>
Servo servo;
int adc5 = 0;
int pozycja = 0;

void setup() {
servo.attach(9);  
}

void loop() {
  adc5 = analogRead(A5);
  adc5 = map(adc5,0,1023,0,180);
  pozycja = adc5;
  servo.write(pozycja); 
}

 

Link to post
Share on other sites
5 minut temu, mn860618 napisał:

Ok. zrobiłem zadanko 5.5 i działa jak powinno wg. mnie oczywiście a co powiedzą inni 🙃 😁


#include <Servo.h>
Servo servo;
int adc5 = 0;
int pozycja = 0;

void setup() {
servo.attach(9);  
}

void loop() {
  adc5 = analogRead(A5);
  adc5 = map(adc5,0,1023,0,180);
  pozycja = adc5;
  servo.write(pozycja); 
}

 

ale dzieje się coś dziwnego przy skrajnych pozycjach potencjometru, trzymając w palcach mocno ściskając odczuwam drgania przy obu końcach tak jakby chciało się przekręcić dalej. Jeden raz po kilku manewrach lewa prawa dostało wariacji i zblokowało się gdzieś w połowie... Chyba trzeba by ograniczyć zakresy przykładowo od 5-175 bo chce obrócić po za zakres działania serva.        

Link to post
Share on other sites
Dnia 17.05.2022 o 12:59, ethanak napisał:

@Gieneq, możesz rozwinąć problem walidacji

@ethanak to właśnie miałem na myśli pisząc o walidacji. @mn860618 w żargonie programistycznym walidacja to sprawdzenie czy dane są "valid" czyli poprawne. Czyli właśnie żeby użytkownik został poinformowany, że np. 'a' to niezbyt konkretna pozycja 🙂 

 

  • Lubię! 1
Link to post
Share on other sites
40 minut temu, Gieneq napisał:

@ethanak to właśnie miałem na myśli pisząc o walidacji. @mn860618 w żargonie programistycznym walidacja to sprawdzenie czy dane są "valid" czyli poprawne. Czyli właśnie żeby użytkownik został poinformowany, że np. 'a' to niezbyt konkretna pozycja 🙂 

 

pewnie ma to na celu wykorzystanie lepszego serwa? natknołem się na forum gdzieś na podobny problem ale dyskusji jest masa tutaj wiec czytam szybko i filtruje... jak byś mógł rozwinąć ale chyba wiem o co ci chodzi by użyć if() i else chyba... z tym że nie sięgam tak daleko bo nie mam sprzętu tzn. lepszego serwa ale jak byś mógł naprowadzić z tą walidacją to z góry dziękuje.

Podaj najlepiej przykład programu i opisz... może da się zastosować inny sprzęt wy wytłumaczyć walidacje np. diody nie wiem 🙃 

Pzdr.

   

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.