Skocz do zawartości

Pierwsze uruchomienie linefollower z programem


Pomocna odpowiedź

Witam, poprawiłem i uruchomiłem ale nie działa, widzicie jakieś błędy? 🙂😉

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

'Konfiguracja portów
Config Portb = Output
Config Portd = &B01111111
Config Portc = Input

Portd.7 = 1

Przycisk Alias Pind.7
    Led Alias Portd.6
Enable_a Alias Portb.1
Enable_b Alias Portb.2
Silnik_prawy_a Alias Portd.3
Silnik_prawy_b Alias Portd.2
Silnik_lewy_a Alias Portd.1
Silnik_lewy_b Alias Portd.0

Set Led

Do
Bitwait Pind.7 , Reset                                      'czekaj aż 7 linia portu D będzie w stanie 0.
'Obrót w jedną stronę
Set Silnik_prawy_a
Reset Silnik_prawy_b
Wait 1
'Obrót w stronę przeciwną
Reset Silnik_prawy_a
Set Silnik_prawy_b
Wait 1
'Stop
Reset Silnik_prawy_a
Reset Silnik_prawy_b
Wait 1
'Obrót w jedną stronę
Set Silnik_lewy_a
Reset Silnik_lewy_b
Wait 1
'Obrót w stronę przeciwną
Reset Silnik_lewy_a
Set Silnik_lewy_b
Wait 1
'Stop
Reset Silnik_lewy_a
Reset Silnik_lewy_b
Wait 1
Loop

End

Masz enable_a i enable_b . Ustaw na nich odpowiedni stan. Nie pamiętam czy to był wysoki czy niski. Sprawdź w nocie.

Witam, napisałem nieco inaczej program i mostek działa. Silniki jadą najpierw prosto, póżniej w tył a potem w lewo i prawo. Więc ok. Czujniki tęż są dobre, bo sprawdziłem aparatem i świecą się wszystki diody. Ale gdy wgrałem program, ten program, włączyłem robot, poruszałem czujnikami po linii i nic robot jechał cały czas prosto. A jak go puściłem to pojechał prosto i nie po linii. Może coś z programem? Zamieszczam program, może wy coś wykombinujecie. Bo już wykorzystałem wszystkie pomysły. 🙂😉

$regfile = "m88def.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 Portb = Output
Config Portd = &B01111111
Config Portc = Input

Portd.7 = 1

Przycisk Alias Pind.7
    Led Alias Portd.6
Enable_a Alias Portb.1
Enable_b Alias Portb.2
Silnik_prawy_a Alias Portd.3
Silnik_prawy_b Alias Portd.2
Silnik_lewy_a Alias Portd.1
Silnik_lewy_b Alias Portd.0

'Opis portów
'Enable_a - Silnik lewy - Portb.1 (PWM1A)
'Enable_b - Silnik prawy - portb.2 (PWM1B)
'Input1 - Silnik prawy A - Portd.3
'Input2 - Silnik prawy B - Portd.2
'Input4 - Silnik lewy A - Portd.0
'Input3 - Silnik lewy B - Portd.1
'Dioda - Portd.6
'Czujnik lewy skrajny - ADC5
'Czujnik lewy - ADC4
'Czujnik środkowy1 - ADC3
'Czujnik środkowy2 - ADC2
'Czujnik prawy - ADC1
'Czujnik prawy skrajny - ADC0

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

'Deklaracje zmiennych
Dim Czujnik_skrajny_lewy As Single
Dim Czujnik_lewy As Single
Dim Czujnik_srodkowy1 As Single
Dim Czujnik_srodkowy2 As Single
Dim Czujnik_prawy As Single
Dim Czujnik_skrajny_prawy As Single
Dim W As Word



Set Led

'Blok instrukcji
Set Silnik_lewy_a
Reset Silnik_lewy_b
Set Silnik_prawy_a
Reset Silnik_prawy_b

Do

Bitwait Pind.7 , Reset                                      'czekaj aż 7 linia portu D będzie w stanie 0.


  Gosub Wczytaj_stany_przetwornikow
  If Czujnik_srodkowy1 > Granica Then
     'Silnik lewy - maksymalna prędkość
     Pwm1a = 255
     'Silnik prawy - maksymalna prędkość
     Pwm1b = 255
  Elseif Czujnik_srodkowy2 > Granica Then
     Pwm1a = 255
     Pwm1b = 255
  Elseif Czujnik_lewy > Granica Then
     Pwm1a = 0
     Pwm1b = 255
  Elseif Czujnik_skrajny_lewy > Granica Then
     Pwm1a = 0
     Pwm1b = 255
  Elseif Czujnik_prawy > Granica Then
     Pwm1a = 255
     Pwm1b = 0
  Elseif Czujnik_skrajny_prawy > Granica Then
     Pwm1a = 255
     Pwm1b = 0
     Else
     Pwm1a = 255
     Pwm1b = 255
  End If
Loop
End


Wczytaj_stany_przetwornikow:
Start Adc
W = Getadc(0)
W = Getadc(0)
Stop Adc
Czujnik_prawy = W
Start Adc
W = Getadc(1)
W = Getadc(1)
Stop Adc
Czujnik_skrajny_lewy = W
Start Adc
W = Getadc(5)
W = Getadc(5)
Stop Adc
Czujnik_lewy = W
W = Getadc(4)
W = Getadc(4)
Stop Adc
Czujnik_srodkowy1 = W
W = Getadc(3)
W = Getadc(3)
Stop Adc
Czujnik_srodkowy2 = W
W = Getadc(2)
W = Getadc(2)
Stop Adc
Czujnik_skrajny_prawy = W
Return
$regfile = "m88def.dat"
$crystal = 16000000
Config Portb = &B11111111
Config Portd = &B01111111
Portb = &B00000110
Portd = &B10000000

Bitwait Pind.7 , Reset

Do

Portd = &B00001010
Wait 1
Portd = &B00000101
Wait 1
Portd = &B00001000
Wait 1
Portd = &B00000010
Wait 1

Loop

Witam, tak jak mówiłem podłączyłem zasilanie, dioda zielona i czerwona się zapaliła nacisnąłem przycisk i silniki tak jak mówiłem wcześniej. Więc dlatego nie wiem co jest grane. 🙂😉

Zmienne "Czujnik_srodkowy2", "1" itd. na pewno odpowiadają rzeczywistemu rozmieszczeniu czujników? Możesz też spróbować zamienić wartościami Pwm1a i Pwm1b w pętli warunkowej oraz upewnić się, że oba silniki będą obracać się w tym samym kierunku po podaniu pwm1a i pwm1b wartości 255. Od siebie mogę polecić napisanie programu od nowa, bo widać, że przepisywany "na pałę" z mojego arta. W ten sposób się nie nauczysz programować.

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