Skocz do zawartości

Servo - problem z działaniem programu robota


Navers

Pomocna odpowiedź

Witam,

Jestem jeszcze zielony jeśli chodzi o Arduino , ale postanowiłem zbudować swojego pierwszego robota ,na bazie pomysłu pewnego użytkownika Youtube. Napotkałem pewien problem, otóż mój motor Servo,który jest połączony z ultrasensorem cały czas się kręci .Wykonuje swoje zadanie ,czyli po napotkaniu jakiejś przeszkody obraca się tak jak powinien , tylko później nadal się kręci . Czy ktoś mógłby mi pomóc rozwiązać ten problem, ponieważ brakuje mi tylko tej jednej rzeczy do ukończenia całego robota. Bardzo proszę o choćby najmniejszą pomoc 😉

Poniżej kod jaki został wprowadzony do Arduino, jeśli chodzi o Servo:

void quaycbsangtrai()
{
  myservo.write(180);             
  delay(1000);
  dokhoangcach();
  myservo.write(90);            
}
void quaycbsangphai()
{
  myservo.write(0);           
  delay(1000);
  dokhoangcach();
  myservo.write(90);         
}
void resetservo()
{
  myservo.write(90);
}

 

Link do komentarza
Share on other sites

(edytowany)
#include <Servo.h>
Servo myservo;  // create servo object to control a servo
int pos = 0;    // variable to store the servo position


const int trig = 6;  
const int echo = 5;    
int tien1 = 10;       
int tien2 = 11;        
int lui1 = 12;        
int lui2 = 13;        
int dongcoservo = 9;   

int gioihan = 15;
int i;
int x = 0;
unsigned long thoigian;
int khoangcach;          
int khoangcachtrai, khoangcachphai;
int maxspeed=30;

void dokhoangcach();
void dithang(int duongdi);
void disangtrai();
void disangphai();
void dilui();
void resetdongco();
void quaycbsangphai();
void quaycbsangtrai();
void setup() {
  // put your setup code here, to run once:
  myservo.attach(9);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);   

  pinMode(tien1, OUTPUT);
  pinMode(tien2, OUTPUT);
  pinMode(lui1, OUTPUT);
  pinMode(lui2, OUTPUT);
  digitalWrite(tien1, LOW);
  digitalWrite(tien2, LOW);
  digitalWrite(lui1, LOW);
  digitalWrite(lui1, LOW);
  myservo.write(90);
  delay(500);

}

void loop()
{
  khoangcach = 0;
  dokhoangcach();
  if (khoangcach > gioihan || khoangcach == 0)
  {
      dithang();
  }
  else
  {
    resetdongco();
    quaycbsangtrai();
    dokhoangcach();
    khoangcachtrai = khoangcach;
    quaycbsangphai();
    dokhoangcach();
    khoangcachphai = khoangcach;
    if (khoangcachphai < 30 && khoangcachtrai < 30) {
      dilui();
    }
    else
    {
      if (khoangcachphai >= khoangcachtrai)
      {        
        disangphai();
        delay(500);
      }
      if (khoangcachphai < khoangcachtrai)
      {
        disangtrai();
        delay(500);
      }
    }
  }

}
void dithang()
{

  digitalWrite(tien1, HIGH);
  digitalWrite(tien2, HIGH);


}

void disangphai()
{
  resetdongco();
  digitalWrite(lui1, HIGH);
  delay(900);
  digitalWrite(lui1, LOW);


}
void disangtrai()
{
  resetdongco();
  digitalWrite(lui2, HIGH);
  delay(900);
  digitalWrite(lui2, LOW);

}

void dilui()
{
  resetdongco();
  for (i = 0; i < 20; i++)
  digitalWrite(lui1, HIGH);
  digitalWrite(lui2, HIGH);
  delay(1000);


  digitalWrite(lui1, LOW);
  digitalWrite(lui2, LOW);
}

void resetdongco()
{
  digitalWrite(tien1, LOW);
  digitalWrite(tien2, LOW);
  digitalWrite(lui1, LOW);
  digitalWrite(lui2, LOW);
}

void dokhoangcach()
{

  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);  
  delayMicroseconds(10);
  digitalWrite(trig, LOW);


  // Đo độ rộng xung HIGH ở chân echo.
  thoigian = pulseIn(echo, HIGH);

  khoangcach = thoigian / 2 / 29.412;

}


void quaycbsangtrai()
{
  myservo.write(180);              // tell servo to go to position in variable 'pos'
  delay(1000);
  dokhoangcach();
  myservo.write(90);              // tell servo to go to position in variable 'pos'
}
void quaycbsangphai()
{
  myservo.write(0);              // tell servo to go to position in variable 'pos'
  delay(1000);
  dokhoangcach();
  myservo.write(90);              // tell servo to go to position in variable 'pos'
}
void resetservo()
{
  myservo.write(90);
}


  myservo.write(90);
}

Edytowano przez Navers
Link do komentarza
Share on other sites

Zauważyłeś może nad edytorkiem takie coś z napisem "wstaw kod"? 

Popraw ten post, bo na razie nikt nie będzie analizował tych wypocin.

Tak przy okazji... fajnie że nazywasz funkcje i zmienne w ojczystym języku, ale trzymajmy się może języków obowiązujących w UE. Łatwiej jest analizować kod w którym funkcja nazywa się "turnLeft" niż taki z "pashowTyV3pindyKitajskohoBoha".

Link do komentarza
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

7 godzin temu, ethanak napisał:

Tak przy okazji... fajnie że nazywasz funkcje i zmienne w ojczystym języku, ale trzymajmy się może języków obowiązujących w UE. Łatwiej jest analizować kod w którym funkcja nazywa się "turnLeft" niż taki z "pashowTyV3pindyKitajskohoBoha".

Naprawdę chciałbyś nazw funkcji po łotewsku lub po maltańsku? W UE obowiązują 24 języki urzędowe:

https://europa.eu/european-union/about-eu/eu-languages_pl

Link do komentarza
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.