Skocz do zawartości
Komentator

Kurs budowy robotów - #4 - pierwsze programowanie

Pomocna odpowiedź

@jas123 niepoprawnie wywołujesz funkcję zatrzymującą silniki - brak nawiasów na końcu. Dopisz "()" i sprawdź czy problem ustąpił 🙂

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

gdy dopisałem () to wszystko działa . Dziękuje za szybką pomoc.😀

Udostępnij ten post


Link to post
Share on other sites

Cześć! 😉

Zad 4.3 - Działa, ale nie do końca tak jak należy...

Robot rozpędza się, po czym staje na około 1 sekundę. Następnie cała sekwencja zwalniania i ponownego rozpędzania zachodzi tak jak należy i znowu się zatrzymuje.

Pomożecie? 😉 Wstawiam kod do wglądu:

#define L_DIR 4
#define L_PWM 5
#define R_PWM 6
#define R_DIR 9
#define PWM_MAX 165

void setup() {
  //Konfiguracja pinow od mostka H
  pinMode(L_DIR, OUTPUT);
  pinMode(R_DIR, OUTPUT);
  pinMode(L_PWM, OUTPUT);
  pinMode(R_PWM, OUTPUT);
}

void loop() {
for  (int i=50; i<PWM_MAX; i++) {
  leftMotor(i);
  rightMotor(-i);
  delay(50);
}
for (int i=PWM_MAX; i>=50; i--) {
 leftMotor(i);
 rightMotor(-i);
 delay(50);
}
}

void leftMotor(int V) {
  if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia)
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 0); //Kierunek: do przodu
    analogWrite(L_PWM, V); //Ustawienie predkosci 
  } else {
    V = abs(V); //Funkcja abs() zwroci wartosc V  bez znaku
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 1); //Kierunek: do tyłu
    analogWrite(L_PWM, V); //Ustawienie predkosci    
  }
}

void rightMotor(int V) {
  if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia)
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 0); //Kierunek: do przodu
    analogWrite(R_PWM, V); //Ustawienie predkosci 
  } else {
    V = abs(V); //Funkcja abs() zwroci wartosc V  bez znaku
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 1); //Kierunek: do tyłu
    analogWrite(R_PWM, V); //Ustawienie predkosci    
  }
}

void stopMotors() {
  analogWrite(L_PWM, 0); //Wylaczenie silnika lewego
  analogWrite(R_PWM, 0); //Wylaczenie silnika prawego
}

 

Udostępnij ten post


Link to post
Share on other sites

Cześć wszystkim!

Ta część poradnika w końcu dała tą frajdę której spodziewałem się w kursie budowy robotów. Super sprawa. Załączam moje testy metod odpowiedzialnych za napęd:

pierwszy

drugi

trzeci

Rozwiązanie zadania 4_2,  tutaj efekt w praktyce. Kod niestety nadpisałem robiąc następne zadanie. Po wykonaniu wszystkich ruchów dodałem zatrzymanie na 10s bo sam się nie mogłem połapać kiedy jest koniec 🙂

A tutaj nagranie zadania 4_3, a poniżej kod:

#define PWM_MAX 165

#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9

void setup()
{
  pinMode(L_PWM, OUTPUT);
  pinMode(L_DIR, OUTPUT);
  pinMode(R_PWM, OUTPUT);
  pinMode(L_DIR, OUTPUT);
}

int currentValue = 0;
int delta = 5;

void loop()
{

  leftMotor(currentValue);
  rightMotor(-currentValue);

  delay(250);
  
  currentValue += delta;

  if(currentValue >= 100 || currentValue <= 0)
  {
    delta = -delta;
    currentValue += delta;
  }
  
}

void leftMotor(int v)
{
  if(v < 0)
  {
    v = map(abs(v), 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 1);
    analogWrite(L_PWM, v);
  }
  else
  {
    v = map(v, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 0);
    analogWrite(L_PWM, v);
  }
}

void rightMotor(int v)
{
  if(v < 0)
  {
    v = map(abs(v), 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 1);
    analogWrite(R_PWM, v);
  }
  else
  {
    v = map(v, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 0);
    analogWrite(R_PWM, v);
  }
}

void stopMotors()
{
  analogWrite(L_PWM, 0);
  analogWrite(R_PWM, 0);
}

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@olum widzę że jednak udało Ci się złożyć robota i programy działają bardzo ładnie 🙂 

7 godzin temu, olum napisał:

Rozwiązanie zadania 4_2,

Fajnie, acz etap "obrót o 360°" przypomina bardziej piruet z kilkukrotnym obrotem 😄 

7 godzin temu, olum napisał:

A tutaj nagranie zadania 4_3

A tu działa bardzo ładnie, powodzenia w kolejnych zadaniach!

Edytowano przez Gieneq
  • Lubię! 2

Udostępnij ten post


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!

Gość
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...