Skocz do zawartości

Włączanie i wyłączanie robota


Pomocna odpowiedź

Napisano

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)

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.

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.

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.

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ń)

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?

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

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

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

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