Skocz do zawartości

Włączanie i wyłączanie robota


dominos96

Pomocna odpowiedź

Zbudowałem line followera, i chciałbym aby po wciśnięciu microswitcha po 5 sekundach robot się włączał oraz po ponownym naciśnięciu wyłączał.

Oto program tego robota w bascomie

$regfile = "m8def.dat"
$crystal = 16000000

'Konfiguracja przetwornika analog-cyfra (ADC)
Config Adc = Single , Prescaler = Auto

'Konfiguracja sterowania sprzętowym PWM
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

'Konfiguracja portów
Config Portd = Output
Config Portb = Output

'Opis portów
'Enable1 - Silnik lewy - Portb.1 (PWM1A)
'Enable2 - Silnik prawy - portb.2 (PWM1B)
'Input1 - Silnik lewy A - Portd.3
'Input2 - Silnik lewy B - Portd.2
'Input4 - Silnik prawy A - Portd.0
'Input3 - Silnik prawy B - Portd.1
'Dioda - Portd.6
'Czujnik lewy - ADC5
'Czujnik środkowy - ADC4
'Czujnik prawy - ADC3

Silnik_lewy_a Alias Portd.3
Silnik_lewy_b Alias Portd.2
Silnik_prawy_b Alias Portd.0
Silnik_prawy_a Alias Portd.1
Dioda Alias Portd.6

'Granica reagowania na linię - należy dobrać doświadczalnie
Const Granica = 500

'Deklaracje zmiennych
Dim Czujnik_lewy As Single
Dim Czujnik_srodkowy As Single
Dim Czujnik_prawy As Single
Dim W As Word

'Blok instrukcji
Set Silnik_lewy_a
Reset Silnik_lewy_b
Set Silnik_prawy_a
Reset Silnik_prawy_b


Do
 Gosub Wczytaj_stany_przetwornikow
  If Czujnik_srodkowy > Granica Then
     'Silnik lewy - maksymalna prędkość
     Pwm1a = 255
     'Silnik prawy - maksymalna prędkość
     Pwm1b = 255
     Reset Dioda
  Elseif Czujnik_lewy > Granica Then
     Pwm1a = 0
     Pwm1b = 255
     Set Dioda
  Elseif Czujnik_prawy > Granica Then
     Pwm1a = 255
     Pwm1b = 0
     Set Dioda
  Else
     Pwm1a = 255
     Pwm1b = 255
  End If
Loop
End

Wczytaj_stany_przetwornikow:
Start Adc
W = Getadc(5)
W = Getadc(5)
Stop Adc
Czujnik_lewy = W
Start Adc
W = Getadc(4)
W = Getadc(4)
Stop Adc
Czujnik_srodkowy = W
Start Adc
W = Getadc(3)
W = Getadc(3)
Stop Adc
Czujnik_prawy = W
Return

Czy mógłby ktoś go tak przerobić żeby było tak jak wyżej pisałem

Jak przypuszczam microswitch powinien być podłączony z jednej strony pod port np.PC0

a z drugiej strony pod +5V (jeśli tak to które nóżki podpiąć, microswitch ma 4)

Link do komentarza
Share on other sites

Może mamy jeszcze za Ciebie zaprogramować?

Porty obsługiwać chyba potrafisz? Jak nie to zobacz do kursu:

https://www.forbot.pl/forum/viewtopic.php?t=1057

Microswitch z jednej strony do uC, z drugiej do masy, a jak nie wiesz jak go podpiąć to zobacz na różne schematy lub weź miernik w łapki i sam sprawdź, gdzie co przewodzi.

P.S Twój avatar narusza regulamin.

Link do komentarza
Share on other sites

Dobra, problem z podłączeniem już rozwiązany.

Ale dalej się pytam gdzie wpisać tę komendę aby po wciśnięciu przycisku po 5 sekundach robot się uruchamiał.

Bo szukałem ale nie znalazłem tego o co mi dokładnie chodzi.

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

dominos96, no chyba skoro ma startować po wciśnięciu, to raczej logiczne jest, że musisz to umieścić przed główną pętlą.

A wyjście możesz zrobić na zasadzie Do Loop Until (wciśnięty przycisk), za pętlą wyzeruj PWM'y i silniki.

Link do komentarza
Share on other sites

Mógłbyś mi to objaśnić na przykładzie bo nie za bardzo rozumie (w bascomie znam tylko podstawowe komendy, bawię się nim dopiero 3 dzień)

To może warto było by na początek poczytać Help z Bascoma i "pobawić" się na płytce stykowej/uniwersalnej z prostszymi rzeczami (pętle, warunki, skoki do podprogramów) i zobaczyć jak one działają, a dopiero później zabierać się za bardziej ambitne rzeczy?

Link do komentarza
Share on other sites

Próbowałem zrobić tak jak Treker napisał ale to co jest w pętli ogóle nie działa.

Czy mógłbyś mi wpisać tą komendę do programu tak aby zadziałało (microswitcha mam na porcie PC2) tak chyba będzie szybciej niż zgadywanki co gdzie wpisać.

Link do komentarza
Share on other sites

A ustawiłeś port C jako wyjście, podciągnąłeś wewnętrznie?

Pewnie nawet nie wiesz o co pytam, więc poszukaj o tym w naszym kursie, powiedz co znalazłeś i pokaż, gdzie byś to wstawił.

Nikt za Ciebie tutaj nie będzie robił, masz się sam czegoś nauczyć.

Link do komentarza
Share on other sites

Zapomniałem ustawić jako wejście, ale już zrobiłem, tylko nie rozumie z tym wewnętrznym podciąganiem.

$regfile = "m8def.dat"
$crystal = 1000000

'Konfiguracja przetwornika analog-cyfra (ADC)
Config Adc = Single , Prescaler = Auto

'Konfiguracja sterowania sprzętowym PWM
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

'Konfiguracja portów
Config Portd = Output
Config Portb = Output
---Config Portc.2 = Output---


'Opis portów
'Enable1 - Silnik lewy - Portb.1 (PWM1A)
'Enable2 - Silnik prawy - portb.2 (PWM1B)
'Input1 - Silnik lewy A - Portd.3
'Input2 - Silnik lewy B - Portd.2
'Input4 - Silnik prawy A - Portd.0
'Input3 - Silnik prawy B - Portd.1
'Dioda - Portd.6
'Czujnik lewy - ADC5
'Czujnik środkowy - ADC4
'Czujnik prawy - ADC3
'Przycisk - Portc.2


Silnik_lewy_a Alias Portd.3
Silnik_lewy_b Alias Portd.2
Silnik_prawy_b Alias Portd.0
Silnik_prawy_a Alias Portd.1
Dioda Alias Portd.6

'Granica reagowania na linię - należy dobrać doświadczalnie
Const Granica = 500

'Deklaracje zmiennych
Dim Czujnik_lewy As Single
Dim Czujnik_srodkowy As Single
Dim Czujnik_prawy As Single
Dim W As Word

'Blok instrukcji
Set Dioda
Set Silnik_lewy_a
Reset Silnik_lewy_b
Set Silnik_prawy_a
Reset Silnik_prawy_b

Do
 Gosub Wczytaj_stany_przetwornikow
  If Czujnik_srodkowy > Granica Then
     'Silnik lewy - maksymalna prędkość
     Pwm1a = 255
     'Silnik prawy - maksymalna prędkość
     Pwm1b = 255
     Reset Dioda
  Elseif Czujnik_lewy > Granica Then
     Pwm1a = 0
     Pwm1b = 255
     Set Dioda
  Elseif Czujnik_prawy > Granica Then
     Pwm1a = 255
     Pwm1b = 0
     Set Dioda
  Else
     Pwm1a = 255
     Pwm1b = 255
  End If
---Loop Until Portc.2 = 0---
End

Wczytaj_stany_przetwornikow:
Start Adc
W = Getadc(5)
W = Getadc(5)
Stop Adc
Czujnik_lewy = W
Start Adc
W = Getadc(4)
W = Getadc(4)
Stop Adc
Czujnik_srodkowy = W
Start Adc
W = Getadc(3)
W = Getadc(3)
Stop Adc
Czujnik_prawy = W
Return
Link do komentarza
Share on other sites

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

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.