-         

Ergebnis 1 bis 7 von 7

Thema: if-Then Bedingung - ich hab da mal ein Problem ** gelöst **

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.03.2006
    Ort
    Pfaffenhofen a.d. Roth
    Alter
    49
    Beiträge
    35

    if-Then Bedingung - ich hab da mal ein Problem ** gelöst **

    Anzeige

    Hallo erstmal,
    ich stöbere schon seit einiger Zeit in dem Forum, echt gut die Plattform!
    Jetzt hat es die Zeit zugelassen, und ich habe mir aus ein paar Teilen einen kleinen Bot geklöppelt - nicht schön, aber selten



    Die Aufgabe ist eigentlich nur einer Linie zu folgen. Dafür hat er 2 umgebaute Servos, die mit einem 293 angesteuert werden und 3 Sensoren an der Nase.

    Die Hardware habe ich überprüft, die Sensoren liefern die entsprechenden Signale, und die Motoren drehen, wie sie sollen.

    Ich als c64-Kind habe mich für Bascom entschieden und da mal was geschrieben, was eigentlich funktionieren sollte - tut es aber nicht

    Ich befürchte, dass ich den Wald vor lauter Bäumen nicht sehe, denn der Code ist alles andere als elegant oder kompliziert.

    Es wäre klasse, wenn da mal einer reinschauen könnte.

    Vielen Dank

    ************************************************** ***
    ' Taktfrequenz des Quarzes einstellen (3,686411 MHz -> 1 Takt=0,00000027127s=0,27127us)
    $crystal = 3686411
    $baud = 9600
    ' Verwendete CPU festlegen (ATmega
    $regfile = "m8def.dat"
    'ports definieren
    Config Portb = Output
    Config Portd = Input
    'Ddrd = &B00000000
    'sensor rechts
    Ls1 Alias Pind.2
    'Sensor mitte
    Ls2 Alias Pind.3
    'Sensor links
    Ls3 Alias Pind.4
    ' Hauptprogrammschleife
    Do
    ' sensor 1 und 3 auf schwarzer Linie --> vor
    If Ls1 = 0 Then
    If Ls3 = 0 Then
    Gosub Vor
    End If
    End If
    ' Sensor 1 Auf Schwarzer Linie --> Links
    If Ls1 = 0 Then
    If Ls3 = 1 Then
    Gosub Links
    End If
    End If
    ' sensor 3 auf schwarzer Linie --> rechts
    If Ls3 = 0 Then
    If Ls1 = 1 Then
    Gosub Vor
    End If
    End If
    'kein sensor auf linie --> stop
    If Ls1 = 1 Then
    If Ls3 = 1 Then
    'Print "stop"
    Gosub Stop
    End If
    End If

    'Waitms 100
    Loop
    Vor:
    Portb = &B00000000
    Portb = &B00101011
    Return
    Rueck:
    Portb = &B00000000
    Portb = &B00011101
    Return
    Links:
    Portb = &B00000000
    Portb = &B00101000
    Return
    Rechts:
    Portb = &B00000000
    Portb = &B00000011
    Return
    Stop:
    Portb = &B00000000
    Return
    End

    ************************************************** ***
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken img_5262.jpg  
    Grüsse Nechegris
    Das Leben ist schön, man muss sich nur daran beteiligen!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Hmmm.... auf den ersten Blick sehe zumindestens ich nichts in dem Code, was ein Problem sein könnte.

    Die Sequenzen in den GoSub´s
    Portb = &B00000000
    Portb = &B00101011
    versteh´ ich zwar nicht ganz - sie sollten aber kein ernsthafts Problem verursachen.

    Kannst Du mal beschreiben, was genau passiert? Das wäre für die Fehlersuche hilfreich!

    Gruß & Co.,

    Daniel

    P.S.: Ich habe zwar noch niemals mit Robotern herumexperimentiert, frage mich aber gerade folgendes: Wenn die Sensoren am vorderen Ende sind und Ls1 der rechte ist - müsste das Maschinchen dann nicht auch nach rechts fahren, wenn der Sensor die Linie sieht? In Deinem Code scheint das genau andersrum zu sein...

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    10.06.2006
    Ort
    Duisburg-Rheinhausen
    Alter
    71
    Beiträge
    80
    Hallo nechegris
    Hier ein Stueck Code wie ich es machen wuerde.
    Code:
     'Taktfrequenz des Quarzes einstellen (3,686411 MHz -> 1 Takt=0,00000027127s=0,27127us)
    
    $regfile = "m8def.dat"                                      'Das ist immer die erste Zeile damit Bascom weiß welcher Chip das ist!!
     $crystal = 3686411
    $baud = 9600
    ' Verwendete CPU festlegen (ATmega8)
    
    'ports definieren
    Config Portb = Output
    Config Portd = Input
    'Ddrd = &B00000000       **************??? Pullup ????? =&B11111111
    'sensor rechts
    Ls1 Alias Pind.2
    'Sensor mitte
    Ls2 Alias Pind.3
    'Sensor links
    Ls3 Alias Pind.4
    ' Hauptprogrammschleife
    Do
    ' sensor 1 und 3 auf schwarzer Linie --> vor
    If Ls1 = 0 And Ls3 = 0 Then
      'Portb = &B00000000
      Portb = &B00101011
    End If
    ' Sensor 1 Auf Schwarzer Linie --> Links
    If Ls1 = 0 And Ls3 = 1 Then
       'Portb = &B00000000
       Portb = &B00101000
    End If
    ' sensor 3 auf schwarzer Linie --> rechts
    If Ls3 = 0 And Ls1 = 1 Then
       'Portb = &B00000000
       Portb = &B00000011
    End If
    'kein sensor auf linie --> stop
    If Ls1 = 1 And Ls3 = 1 Then
     Portb = &B00000000
    End If
    
    'Waitms 100
    Loop
    End
    PortB= &B00000000 habe ich auskommentiert Du wuerdest immer alles Abschalten und es müßte neu gestartet werden wenn ich es richtig verstanden habe.
    Problem Sensor Pullup eventuell einschalten ?
    Gruß raggy

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.03.2006
    Ort
    Pfaffenhofen a.d. Roth
    Alter
    49
    Beiträge
    35
    Also ersmal vielen Dank für die Antworten.

    @sauerbruch:
    Die Sub's schalten nur die Motoren ( oder heißt es Motore?), pro Motor 3Ports, evtl. wird der Enable-Eingang noch gepulst, aber jetzt muss das Teil erstmal funktionieren.
    Wenn der Sensor logisch 0 liefert, ist er auf der Linie. Somit muss bei Logisch 1 vom rechten Sensor die Fuhre nach rechts geschwenkt werden.

    @raggy
    Den Pullup habe ich danach probiert, leider kein Erfolg.
    Die und-Verknüpfung hatte ich auch schon drin, war auch Ich melde mich wenn ich durch bin, wird aber wahrscheinlich heute nichts mehr.
    Grüsse Nechegris
    Das Leben ist schön, man muss sich nur daran beteiligen!

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Wenn der Sensor logisch 0 liefert, ist er auf der Linie. Somit muss bei Logisch 1 vom rechten Sensor die Fuhre nach rechts geschwenkt werden.
    Aber so kommt er doch nur noch weiter nach rechts, oder??
    Bis der linke Sensor auch nach rechts über die Linie verschwunden ist - und dann bleibt er stehen. Könnte das sein?

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    09.03.2006
    Ort
    Pfaffenhofen a.d. Roth
    Alter
    49
    Beiträge
    35
    ja klar, sollte meinen, dass das rechte Rad angetrieben wird, damit die Nase nach links schwenkt.
    Grüsse Nechegris
    Das Leben ist schön, man muss sich nur daran beteiligen!

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    09.03.2006
    Ort
    Pfaffenhofen a.d. Roth
    Alter
    49
    Beiträge
    35
    Es funzt, der Fehler lag, wie so oft zwischen den Kopfhörern.
    Nachdem ich Held in die Sub 'vor' verzweigt bin, kann das Teil natürlich nicht das Teil natürlich nicht das rechte Rad antreiben. [-X
    Grüsse Nechegris
    Das Leben ist schön, man muss sich nur daran beteiligen!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •