Skocz do zawartości

Problem z kierunkiem jazdy robota


ciuupa

Pomocna odpowiedź

Witam, mam taki problem w programie, robot(mini sumo) jak jedzie do przodu, czy to skreca, czy centralnie prosto jedzie to jest ok. Tak samo jak jedzie do tyłu, też wszystko spoko. Problem pojawia sie, gdy robot jedzie prosto i nagle ma jechac do tylu. Robot staje. nie wykonuje wiecej ruchow. Tak samo jest z jazda tył-> przod. Do tyłu jedzie, ale jak czujnik wykryje ze ma nagle jechac prosto to kaput. Prosiłbym bardzo o pomoc, w środe zawody i jedynie to szwankuje. Wszystko działa ok, procz wlasnie tego, przy zmianie kierunku obrotow silnika silniki nie reaguja wogle na czujniki

oto czesc programu co za to odpowiada:

a=PINC;

b=PINA;

c=a & (0x01); //wykrywanie z lewej strony

d=a & (0x02); //wykrywanie przod lewo

e=a & (0x08); //wykrywanie przod prawo

f=b & (0x01); //wykrywanie z prawej strony

g= a & (0x0A); //wykrywanie 2 przod

h=PIND &(0x04); //wykrywanie tyl

if ((pomiar(4)<800) && (pomiar(3)<800)) //wykrywanie ktirow tylnich rownoczesnie

{

OCR2=30;

OCR0=10;

PORTC |=przod1|przod2;

PORTC &=~((tyl1)&(tyl2));

}

else if ((pomiar(7)<800) && (pomiar(2)<800)) //wykrywanie ktirow przednich rownoczesnie

{

OCR2=30;

OCR0=255;

PORTC |=tyl1|tyl2;

PORTC &=~((przod1)&(przod2));

}

else if ((pomiar(7)<800) && (pomiar(2)>800)) //wykrycie ktira przedniego lewego

{

OCR2=20;

OCR0=255;

PORTC |=tyl1|tyl2;

PORTC &=~((przod1)&(przod2));

_delay_ms(500);

}

else if ((pomiar(2)<800) && (pomiar(7)>800)) //wykrycie ktira przedniego prawego

{

OCR2=255;

OCR0=20;

PORTC |=tyl1|tyl2;

PORTC &=~((przod1)&(przod2));

_delay_ms(500);

}

else if ((pomiar(4)<800) && (pomiar(3)>800)) //wykrycie ktira tylniego lewego

{

OCR2=10;

OCR0=70;

PORTC |=przod1|przod2;

PORTC &=~((tyl1)&(tyl2));

}

else if ((pomiar(3)<800) && (pomiar(4)>800)) //wykrycie ktira tylniego prawego

{

OCR2=70;

OCR0=10;

PORTC |=przod1|przod2;

PORTC &=~((tyl1)&(tyl2));

}

else if(g==0) //sharpy 2 przod

{

OCR0=test1;

OCR2=test2;

PORTC |=przod1|przod2;

PORTC &=~((tyl1)&(tyl2));

}

else if((g!=0)&&(d==0)) //sharp1 przod lewy

{

OCR0=100;

OCR2=test2;

PORTC |=przod1|przod2;

PORTC &=~((tyl1)&(tyl2));

}

else if((g!=0)&&(e==0)) //sharp1 przod prawy

{

OCR0=test1;

OCR2=100;

PORTC |=przod1|przod2;

PORTC &=~((tyl1)&(tyl2));

}

else if(c==0) //sharp1 lewy

{

OCR2=255;

OCR0=100;

PORTC |=przod1|przod2;

PORTC &=~((tyl1)&(tyl2));

}

else if(f==0) //sharp1 prawy

{

OCR2=100;

OCR0=255;

PORTC |=przod1|przod2;

PORTC &=~((tyl1)&(tyl2));

}

else if(h==0) //sharp1 tył

{

PORTC &=~((tyl1)&(tyl2));

OCR2=50;

OCR0=255;

PORTC |=przod1|przod2;

}

else {

OCR2=255;

OCR0=255;

PORTC &=~(przod1&tyl1&przod2&tyl2);

}

}

}

if (pomiar(1)<760)

PORTC |=ledbateria;

else

PORTC &=~ledbateria;

uint16_t pomiar(uint8_t kanal) //to juz po za whilem

{

ADMUX = (ADMUX & 0xF8) |kanal;

ADCSRA |=(1<

while (ADCSRA & (1<

return ADCW;

}

Link do komentarza
Share on other sites

Wygląda to na resetowanie się mikrokontrolera podczas tej zmiany kierunku jazdy, bo wtedy pobierany jest największy prąd. Spróbuj dodać jakiś kondensator elektrolityczny na zasilaniu. Co do programu to najpierw opatrz go większą ilością komentarzy, zaznacz gdzie rozpoczyna się funkcja main i na forum wstawiaj w znacznikach:

[code]
[/code]

, to może wtedy zechce się komuś to przeczytać.

Link do komentarza
Share on other sites

Ok przepraszam. Problem rozwiazany w zasadzie dosyc dziwnie. Otoz jak mialem np zalaczenie rownoczesnie jazdy przod i rownoczesnie negacja jazdy w tyl to wystarczylo rozdzielic instrukcje, czyli z PORTC |=przod1 | przod2; zrobic osobno portc |= przod1; i portc|=przod2; moze jak sam mowisz, ze ciagnelo za duzy prad, wiec jak rozdzielono to , to moze wtedy osobno ciagna prad. Pierwszy raz sie spotkalem z czyms takim. W sumie moze ktos mial podobnie lub ma racjonalne wyjasnienie tego?

Dziekuje za odzew

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

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

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.