Skocz do zawartości

[BASCOM] Sterowanie LF'em przez BTM


JayJay

Pomocna odpowiedź

Witam Wszystkich

Mam Line-Followera, stworzonego oczywiście na podstawie przepisu Nawyka. Wzbogaciłem go o moduł BTM. Chciałbym nim sterować poprzez aplikację stworzoną w AppInventorze [poradnik Naelektryzowanego] i tu pojawia się problem - skorzystałem z funkcji InKey w Bascomie, aby odbierać znaki wysyłane przez komórkę, jednak robot nie reaguje właściwie.

Odbiera sygnały - dla 1 rusza, a dla 0 zatrzymuje się.

Problemem jest jednak to, że jeśli już ruszy to nie podąża za linią, tylko kręci lekkie kółko, nie bacząc na czujniki. [Jedzie na podstawie PWM'ów dla stanów czujnika 000, które można zobaczyć w kodzie]

Oczywiście jeśli usunę opcję zczytywania InKey to robot porusza się prawidłowo jak Line-Follower.

Miał ktoś do czynienia z podobna sytuacją?

Lub realizował sterowanie LF'em przez BTM'a w inny sposób i mógłby podsunąć wskazówkę?

Link do komentarza
Share on other sites

Funkcja Inkey oddaje kod znaku gdy coś przyszło, ale gdy UART procesora nic nie odebrał, oddaje 0. Nie znak "0" tylko wartość zero. To powoduje, że żaden z if-ów Twojego programu się nie wykonuje i robot nie odczytuje czujników. Zrób albo sprawdzanie czy zaszła taka sytuacja albo wcześniej testuj UART funkcją IsCharWaiting() dającą informację, że w ogóle coś przyszło. Dopiero wtedy wczytuj znak przez Inkey() a jeśli nic nie ma, rób to co zleciłeś ostatnim wysłanym znakiem.

  • Lubię! 1
Link do komentarza
Share on other sites

Funkcja Inkey oddaje kod znaku gdy coś przyszło, ale gdy UART procesora nic nie odebrał, oddaje 0. Nie znak "0" tylko wartość zero. To powoduje, że żaden z if-ów Twojego programu się nie wykonuje i robot nie odczytuje czujników. Zrób albo sprawdzanie czy zaszła taka sytuacja albo [...] .

W jaki sposób mogę tego sprawdzenia dokonać?

Z funkcją IsCharWaiting już się zetknąłem i zapewne jej użyję, ale jestem bardzo ciekawy tego drugiego rozwiązania "Sprawdź czy zaszła taka sytuacja".

Nocny update postu:

Skorzystałem z IsCharWaiting i niestety bez zmian w działaniu robota.

Do
S = Ischarwaiting()
If S <> 0 Then
Kod = Inkey()
If Zmienna = "1" Then
      Silnik_left= 255
      Silnik_right = 255
Elseif Zmienna = "2" Then
Gosub Wczytaj_czujniki
          If Czuj_lewy < Granica And Czuj_srodk < Granica And Czuj_prawy > Granica Then       ' Stan 001
             Silnik_left = 20
             Silnik_right = 255
           Elseif 
           [...]
           End If
End If
End If
Loop
End

Czy nie należy dodać jeszcze jakichś 'configów' do programu?

Link do komentarza
Share on other sites

W configi nie wnikam. Zastanów się co Twój program robi (w tej czy poprzedniej wersji) gdy jednokrotnie otrzyma znak "włącz silniki" a potem przez długi czas nic nie odbiera (tj zarówno funkcja Inkey jak i IsCharWaiting oddają zero). Który if wtedy się wykonuje i czy to oznacza poprawne odczytywanie czujników i sterowanie napędami. Najlepiej gdybyś sobie algorytm działania narysował na kartce i spokojnie prześledził jego wykonanie bez pomocy komputera.

Wskazówka: Nie możesz reagować wyłącznie na znaki otrzymywane z UARTa, ale musisz gdzieś trzymać aktualny stan programu. Potrzebujesz zmiennej w której będziesz pamiętał co ostatnio przyszło i w zależności od tego wykonywał odpowiednie akcje. Przychodzące znaki powinny tylko ten stan modyfikować.

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!

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.