Skocz do zawartości

Łączenie modułów


Lalu17

Pomocna odpowiedź

Witam!

Mam pytanie jestem tu nowy i od niedawna siedzę w elektronice itd. W tym momencie buduje robota-platformę. Moje pytanie brzmi : Jak połączyć kilka modułów tzn. jak zrobić, żeby robot mógł być jednocześnie sterowany przez pilota RC5 i mogłbyć przełączany na line followera, lub omija cza przeszkód?

Z góry dziekuję za pomoc.

Link do komentarza
Share on other sites

najprościej to coś w tym stylu

while(1)
{
 if (Get_RC5_Key()==1) status=1;
 if (Get_RC5_Key()==2) status=2;
 ...etc

 if (status==1)
 {
    //kod linefollowera tutaj
 }
 else if (status==2)
 {
    //kod sumo tutaj
 }
  ..etc
}

Czyli w zmiennej status zapisujemy którą funkcję realizujemy.

Na początku sprawdzamy czy został wysłany kod RC5 zmieniający funkcję linefollower/sumo/... i ew. zmieniamy ją według wysłanego kodu

Potem tylko sprawdzamy wartość zmiennej status i wykonujemy zadaną funkcję.

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

Co prawda programuje w bascomie, ale już chyba wiem o co chodzi 🙂

wystarczą 2 switche i mozna zrobić cos takiego :

do 
if przycisk1 = 1 and przycisk2 = 0 then
<tutaj program do line followera>
elseif przycisk1 = 0 and przycisk2 = 1 then
<tutaj program do np. sumo>
elseif przycisk1 = 1 and przycisk2 = 2 then 
<tutaj program do np. omijacza przeszkód>
elseif przycisk1 = 0 and przycisk2 = 0 then
silnik1a = 0
silnik1b = 0
silnik2a = 0
silnik2b = 0
endif
loop

program sprawdza po kolei ktore przełączniki są włączone i uruchamia odpowiedni tryb pracy.... potem pętla się kończy i znowu musi sprawdzić. Chyba, że jest jakiś sposób, by procedura z konkretnym trybem pracy była nieskończona i dopiero ponowne wyłączenie i włączenie da możliwość pracy w innym trybie ?

Link do komentarza
Share on other sites

Co prawda programuje w bascomie, ale już chyba wiem o co chodzi 🙂

wystarczą 2 switche i mozna zrobić cos takiego :

do 
if przycisk1 = 1 and przycisk2 = 0 then
<tutaj program do line followera>
elseif przycisk1 = 0 and przycisk2 = 1 then
<tutaj program do np. sumo>
elseif przycisk1 = 1 and przycisk2 = 2 then 
<tutaj program do np. omijacza przeszkód>
elseif przycisk1 = 0 and przycisk2 = 0 then
silnik1a = 0
silnik1b = 0
silnik2a = 0
silnik2b = 0
endif
loop

program sprawdza po kolei ktore przełączniki są włączone i uruchamia odpowiedni tryb pracy.... potem pętla się kończy i znowu musi sprawdzić. Chyba, że jest jakiś sposób, by procedura z konkretnym trybem pracy była nieskończona i dopiero ponowne wyłączenie i włączenie da możliwość pracy w innym trybie ?

Nie znam się zbytnio na basomie ale masz chyba błąd w elseif przycisk1 = 1 and przycisk2 = 2 then... Po drugie masz tutaj zrobione to tak, że gdy dany przycisk jest wciśnięty to wtedy i tylko wtedy wykonuje dany program. Więc do wyboru o którym mówiłeś raczej się to nie nadaje. Musiałbyś raczej zrobić to w sposób taki, że przyciskami zmieniasz wartość jakiejś zmiennej a potem w if'ach sprawdzasz tą wartość i jeśli zmienna=1 to wykonuje pierwszy kod, jeśli zmienna=2 to wykonuje drugi kod itd...

Link do komentarza
Share on other sites

dlatego napisałem o przełączniku, a nie przycisku.

Jeśli będzie tak jak mowisz, to program wykona dana sekwencje i się zakończy (ew. od nowa sprawdzi ktory przycisk jest wcisniety). Więc ponawiam pytanie czy da się jakos zrobić funkcje/procedure ktora powtarza się w nieskonczonosc ?

Link do komentarza
Share on other sites

Przekładanie stanu przycisków na kombinacje binarne (2 przyciski-4 kombinacje 00 01 10 11) to trochę ryzykowna sprawa. Jeżeli program tylko raz przechodzi przez takie sprawdzanie stanu klawiszy a następnie "zawiesza się" w określonym trybie (omijacz, sumo, LF, etc.) to nie ma kłopotu. Problem pojawia się, jeżeli operator ponownie wklepuje żądaną kombinację, bo nigdy nie zrobi tego równocześnie i przez warunki typu :

if (przycisk1() and przycisk2()) then

program w nie nie wejdzie.

Warto dać jeden przycisk więcej (łącznie np 3 albo 4 kompletnie) i utworzyć coś na rodzaj klawiatury typu wstecz, kolejna_opcja+,kolejna_opcja-,wejdz. Podobnie do propozycji MirkaCZ przyciski odpowiedzialne za kolejne opcje zmieniają wartość jakiejś zmiennej (np "status") i po wciśnięciu klawisza "wejdz" jest switch na status. Wszystko się dzieje w while'u z warunkiem na wciśnięcie "wejdz". Wydaje mi się, że chodziło o sam algorytm ideę stąd nie przedstawiam gotowych kawałków kodu.

Jeżeli tryby nie będą zbyt często zmieniane to proponuje (w warstwie elektronicznej) nawet zamiast przycisków użyć zwykłe jumpery na goldpinach albo dip-switche

Link do komentarza
Share on other sites

W sumie przekładanie jednej zworki (goldpinu) też nie jest głupie. No i rozwiązuje problem ponownego sprawdzania switchy. No i dalej wystarczą 2 piny do 3, a nawet 4 stanów. Chociaż w swojej konstrukcji przewiduje narazie 3. No i chyba właśnie skorzystam z tego rozwiązania.

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.