Skocz do zawartości

[C] Omijanie przeszkód - arduino


Pomocna odpowiedź

Napisano

Witam

Mam mały problem mianowicie program nie działa tak jakbym chciał.

Chcę zbudować robota line follower'a omijającego przeszkody za pomocą czujników odległości

Prosiłbym o pomoc ponieważ jak na razie robot jedynie kręci się w koło

KOD PROGRAMU:

#include

#define trigIPin 3 //przod

#define trigIIPin 5 //lewo

#define trigIIIPin 7 //prawo

#define echoIPin 4

#define echoIIPin 6

#define echoIIIPin 8

Servo LS; //Lewy silnik

Servo PS; //Prawy silnik

int f = 0; //lewa dioda

int r = 0; // prawa dioda

int lim = 900; // limit lewa dioda

int rim=880; // limit prawa dioda

void setup()

{

LS.attach(10);

PS.attach(11);

pinMode(trigIPin, OUTPUT);

pinMode(trigIIPin,OUTPUT);

pinMode(trigIIIPin,OUTPUT);

pinMode(echoIPin, INPUT);

pinMode(echoIIPin, INPUT);

pinMode(echoIIIPin, INPUT);

}

int c()//czujnik nr.1

{

long a,b;

digitalWrite(trigIPin, LOW);

delayMicroseconds(2);

digitalWrite(trigIPin, HIGH);

delayMicroseconds(10);

a=pulseIn(echoIPin,HIGH);

b=a/58;

return b;

}

int d() //czujnik nr.2

{

long g,h;

digitalWrite(trigIIPin, LOW);

delayMicroseconds(2);

digitalWrite(trigIIPin, HIGH);

delayMicroseconds(10);

g=pulseIn(echoIIPin,HIGH);

h=g/58;

return h;

}

int e() //czujnik nr.3

{

long i,j;

digitalWrite(trigIIIPin, LOW);

delayMicroseconds(2);

digitalWrite(trigIIIPin, HIGH);

delayMicroseconds(10);

i=pulseIn(echoIIIPin,HIGH);

j=i/58;

return j;

}

void loop()

{

f=analogRead(A1);

r=analogRead(A0);

int przod = c();

int lewo = d();

int prawo = e();

Serial.print("przod: ");

Serial.print(przod);

Serial.print(" cm ");

Serial.print(" lewa: ");

Serial.print(lewo);

Serial.print(" cm ");

Serial.print(" prawa: ");

Serial.print(prawo);

Serial.print(" cm ");

Serial.print(" lewy d: ");

Serial.print(f);

Serial.print(" prawy d: ");

Serial.println®;

if((przod<=15) && (przod>=0))

{

LS.write(90);

PS.write(90);

if ((prawo <= 15) && (prawo >= 0)&&(f=lim))

{

do

{

LS.write(0);

PS.write(0);

}

while((prawo<=15) && (prawo>=0));

if ((prawo<=15) && (prawo>=0))

{

LS.write(180);

PS.write(0);

if((prawo<=15)&&(prawo>=0)&&(f>=lim)&&(r>=rim))

LS.write(0);

PS.write(0);

loop();

}

else

{loop();}

}

else if ((lewo<=15) && (lewo>=0)&&(r=rim))

{

LS.write(180);

PS.write(180);

if ((lewo<=15) && (lewo>=0))

{

LS.write(180);

PS.write(0);

delay(10);

if((lewo<=15)&&(lewo>=0)&&(f>=lim)&&(r>=rim))

LS.write(180);

PS.write(180);

loop();

}

else

{loop();}

}

else

{

do

{

LS.write(0);

PS.write(0);

}

while((lewo<=15)&&(lewo>=0));

if ((lewo<=15) && (lewo>=0))

{

LS.write(180);

PS.write(0);

loop();

if((lewo<=15)&&(lewo>=0)&&(f>=lim)&&(r>=lim))

LS.write(180);

PS.write(180);

loop();

}

}

}

else

{

if((f>= lim) && (r>=rim))

{

LS.write(90);

PS.write(90);

}

else if ((f=rim))

{

LS.write(180);

PS.write(90);

}

else if ((f>=lim)&&(r

{

LS.write(90);

PS.write(0);

}

else if ((f

{

LS.write(110);

PS.write(70);

}

}

}

__________

Komentarz dodany przez: Treker

Kody programów należy umieszczać przez narzędzie KOD (znajdziesz je w edytorze pod ikonką "<>"). Dzięki niemu składania programów jest automatycznie kolorowana, a wtedy wszystkim znacznie łatwiej analizować wklejone programy. Proszę to poprawić - z góry dziękuję za zrozumienie i pomoc przy utrzymaniu porządku na forum.

Mam mały problem mianowicie program nie działa tak jakbym chciał.

To znaczy jak dokładnie?

Prosiłbym o pomoc ponieważ jak na razie robot jedynie kręci się w koło.

A jak sobie taką pomoc wyobrażasz? Czego oczekujesz?

Robot w założeniu ma jechać po linii i w momencie wykrycia przeszkody przez czujnik przedni sprawdza czujnikami umieszczonymi po bokach czy są jakieś przeszkody, jeśli ich nie ma robot skręca do momentu wykrycia prez boczny czujnik przeszkody. Po wykryciu jej przez czujnik boczny jedzie do przodu. Operacja ta powtarzana jest do momentu wykrycia przez robota linii.

Oczekuję jakiegoś naprowadzenia mnie co może być w tym programie ewentualnie źle

To może popatrz na to coś co tu wkleiłeś i zastanów się co my z tego będziemy wiedzieć i jak mamy zgadnąć co jest źle?

Przecież my nawet nie wiemy jak wygląda twój robot, co jest gdzie podłączone, etc. Skąd ja mogę wiedzieć co robi takie "r=analogRead(A0);" skoro nie napisałeś co jest podłączone na pinie A0?

Już nawet nie mówię o kompletnym braku jakiegokolwiek formatowania czy komentarzy. Komu się ma chcieć na to patrzeć? Jeśli poświęcisz te 30 sekund więcej i zrobisz to porządnie, to dostaniesz znacznie więcej odpowiedzi.

A najlepiej, to może zacznij od małych programów, które robią jedną rzecz na raz i po kolei wykluczaj co nie działa. Wtedy będzie ci dużo łatwiej dojść do tego gdzie jest błąd.

Może zacznij od tego że wydaj polecenie żeby jechał prosto i zobacz czy wykonuje to.

Potem dokładaj pojedynczo poszczególne sytuacje i sprawdzaj rekacje.

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