Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Program do Linefollower

Mat614 30 Maj 2011 16:16 696 0
  • #1 30 Maj 2011 16:16
    Mat614
    Poziom 2  

    Witam, mam 15 lat i mam na imię Mateusz. Napisałem program do linefollower i chciałem zastosować PWM i ADC ale nie wiem czy mi to wyszło. Gdy wgrywam program, włączam robota i naciskam start to nic czujniki nic nie wykrywają a silniki cały czas się kręcą do przodu. Pomoglibyście mi bym był bardzo wdzięczny.:D

    Code:
    $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 - ADC2
    'Czujnik lewy - ADC3
    'Czujnik środkowy - ADC4
    'Czujnik prawy - ADC5
    'Czujnik prawy skrajny - ADC6

    '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_srodkowy 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_srodkowy > Granica Then
          'Silnik lewy - maksymalna prędkość
          Pwm1a = 250
          'Silnik prawy - maksymalna prędkość
          Pwm1b = 250
       Elseif Czujnik_lewy > Granica Then
          Pwm1a = 230
          Pwm1b = 100
       Elseif Czujnik_skrajny_lewy > Granica Then
          Pwm1a = 230
          Pwm1b = 230
       Elseif Czujnik_prawy > Granica Then
          Pwm1a = 100
          Pwm1b = 230
       Elseif Czujnik_skrajny_prawy > Granica Then
          Pwm1a = 230
          Pwm1b = 230
       End If
    Loop
    End


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


    Moderowany przez Mirek Z.:

    A to? http://www.dioda.com.pl/forum/topics49/bascom-obsluga-adc-z-uzyciem-megi16-i-cny70-vt3575.htm

    0 0
  Szukaj w 5mln produktów