Skocz do zawartości

Problem z zaprogramowaniem głowy robota - czujnik obrotowy na podczerwień


Pomocna odpowiedź

Napisano

Witam,

Jak można rozwiązać następujący problem???

 if(!(PINB & (1<<PB0)))    //warunek_1 

              goto miejsce_2;

                  if(PINB & (1<<PB0))

                    { PORTB |= (1<<PB2);
                       OCR1A = 700; 
                       z=0;
                     }
                       else     // ten sam warunek co warunek_1, a program nie wykona 
                    {            //instrukcji poniżej tylko przeskoczy w "miejsce_2"

                       z=z+1;
                       _delay_ms(50);

                      if(z<25)

                        { 
                            OCR1A = 1250;
                        }
                          else 
                        { 
                           OCR1A = 300;
                    z=25;

                         }}

Albo inaczej jak można rozdzielić zadania do wykonania dla pojawienia się takiego samego sygnału z czujnika w dwóch różnych miejscach?? Może ktoś pomoże??🙂:)

__________

Komentarz dodany przez: Treker

takiego samego sygnału z czujnika w dwóch różnych miejscach??

Rozumiem, że na 2 różnych pinach? Jak tak to przerwanie zewnętrzne.

Czy chodzi o w 2 różnych miejscach programu?

I wtedy ma być skok do innych funkcii?

Czyli, np.

gdy zmienna = 1 i czujnik wyśle 0 to skocz do etykieta1;

gdy zmienna = 2 i czujnik wyśle 0 to skocz do etykieta2;

o to chodzi, bo trochę nie rozumiem :-> ?

innymi słowy mam ten sam sygnał z czujnika w 2 instrukcjach warunkowych if i jak teraz zrobić żeby np instrukcje z drugiego if wykonały się a nie te pierwsze instrukcje z ifa pierwszego , bo tak się wykonuje. Jak odróżnić dwa te same sygnały.

W praktyce wygląda to tak,że robię głowę dla robota i potrzebuje sprawdzać w trzech położeniach serwa czy jest przeszkoda czy nie jest i dlatego będzie ten sam sygnał z czujnika zero logiczne. I nie mam pojęcia jak problem rozwiązać.

Może zrób tak:

1. Obróć serwo o jakiś kąt (głowa w lewo)

2. Sprawdź czy czujnik coś wykrywa - jeśli tak to zapisz do jakieś zmiennej że na lewo jest przeszkoda (np. lewo = 1)

3. Jeśli nie to ustaw głowę na środek i sprawdź i identycznie jak wyżej.

4. I prawa strona

Wtedy wiesz gdzie jest przeszkoda.

Sprawdzaj to po prostu po kolei.

Odpytujesz za każdym razem czujnik, tylko najpierw przesuwasz głowę robota, żebyś wiedział po której stronie jest przeszkoda i wtedy zapisujesz do zmiennej czy jest (np. lewo = 1), lub nie ma (np. lewo = 0) przeszkody.

Czyli jeszcze raz:

przesuwasz głowę

odpytujesz czujnik i zapisujesz do zmiennej czy jest przeszkoda

od początku (lub robisz co innego np. idziesz tam gdzie nie ma przeszkody)

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