logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega8 Bascom: Niespełniony warunek w pętli FOR przy RS232 i A/C

siwekyhy 12 Mar 2012 18:02 1023 2
  • #1 10668130
    siwekyhy
    Poziom 14  
    Witam

    Napisałem program który w zależności od wartości trzech przetworników A/C ma wysyłać różne napisy przez RS232 , niestety jeden warunek pętli nie wiem dlaczego nie reaguje na zmiany wartości. Zaznaczyłem w programie komentarzem wadliwy fragment. Co jest nie tak ?

    
    
    
    
    $regfile = "m8def.dat"                                      'informuje kompilator o pliku
          'dyrektyw mikrokontrolera
    $crystal = 8000000                                          'informuje kompilator
          'o częstotliwości oscylatora
          'taktującego mikrokontroler
    
     $baud = 38400
    
          'LCD
    Config Adc = Single , Prescaler = Auto , Reference = Avcc   'konfiguracja wewnętrznego
          'przetwornika A/C
    
    Config Portb = Output
    
    Portb = 255
    
    
    Dim Wart_ac As Word
    Dim Wart_ac1 As Word
    Dim Wart_ac2 As Word
    
    Dim V As Single
    Dim V1 As Single
    Dim V2 As Single
    
    Dim Vo As String * 3
    Dim Vo1 As String * 3
    Dim Vo2 As String * 3
    
    
    
    
    Start Adc                                                   'uruchamia wbudowany przetwornik
    
    Print "Jedz na PRZOD !!! "
    Wait 3
    
    
    Do
    
    Gosub Pobierz
    
    If Wart_ac > 1000 Then
    
    Gosub Wykrywanie
    
    Elseif Wart_ac < 1000 Then
    
    Gosub Czujnik1przeciwnik
    
    Elseif Wart_ac1 < 1000 Or Wart_ac2 < 1000 Then ' ###### ta czesc petli nie reaguje na zmiany w ukladzie ###
    
    Gosub Czujnik12lini
    
    End If
    
    
    
    
    
    
     Print
     Print ; Wart_ac ; " " ; Wart_ac1 ; " " ; Wart_ac2
    
     Print
    
     Print " " ; V ; "   " ; V1 ; "   " ; V2
    
    
     Print
    
     Waitms 100                                                 'opóźnienie 100 ms
    Loop                                                        'koniec pętli Do...Loop
    End                                                         'koniec programu
    
    
    Pobierz:
    
    
     Wart_ac = Getadc(0)
     Wart_ac1 = Getadc(1)
     Wart_ac2 = Getadc(2)
    
     V = Wart_ac * 0.0049
     V1 = Wart_ac1 * 0.0049
     V2 = Wart_ac2 * 0.0049
    
    
    Vo = Fusing(v , "#.&&")
    Vo1 = Fusing(v1 , "#.&&")
    Vo2 = Fusing(v2 , "#.&&")
    
    
    
     Return
    
     Czujnik1przeciwnik:
    
     Portb = &B11111110
    
     Print
     Print "Czujnik 1 Wykryto Wroga jazda W Przod"
     Print
    
      Return
    
    
      Wykrywanie:
    
     Portb = &B11111011
     Print
     Print "Krec w kolo    szukam wroga"
     Print
    
      Return
    
      Czujnik12lini:
    
      Portb = &B11111101
    
     Print
     Print "Wykryto biala linie cala w TYl"
     Print
    
      Return
    
    
  • Pomocny post
    #3 10668786
    Fredy
    Poziom 27  
    W twoim programie jest tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    w jaki sposób 3 opcja ma zostać spełniona? Przecież jeśli Wart_ac < 1000 to się spełni pierwszy warunek i wtedy następne warunki typu elseif zostaną pominięte.
    Spróbuj tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA