Hallo Leute
Habe mir da so einen kleinen Bot gebaut:
https://www.roboternetz.de/phpBB2/ze...ag.php?t=13915
Den habe ich mal so gesteuert:
Noch mit Waits.... aber es funktionierte schonmalCode:'--------Roboter KKL Steuerung -------------------- ' Mit externen 10MHz Quarz $regfile = "m8def.dat" $crystal = 8000000 '---Config Port's-------------------- Config Portd = Input Portd = 255 Config Portb = Output '---Sonstiges------------------------ Dim A As Word Links_vorne Alias Pind.3 Links_hinten Alias Pind.4 Rechts_vorne Alias Pind.1 Rechts_hinten Alias Pind.0 '======================================================================== '========= Hauptprogramm ================================================ '======================================================================== Portb = 0 Gosub Vor Do If Links_vorne = 0 Then Gosub Zurueck Wait 2 Gosub Rechts Wait 2 Gosub Vor End If If Rechts_vorne = 0 Then Gosub Zurueck Wait 2 Gosub Links Wait 2 Gosub Vor End If Loop End '===============UnterProgramme=========================================== Links: Portb.1 = 1 Portb.2 = 1 Portb.3 = 0 Return Rechts: Portb.1 = 1 Portb.2 = 0 Portb.3 = 1 Return Zurueck: Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Return Vor: Portb.1 = 1 Portb.2 = 0 Portb.3 = 0 Return Stopen: Portb.1 = 0 Portb.2 = 0 Portb.3 = 0 Return
Nächster Schritt:
Da verwende ich einen Timer0 als interrupt,.Code:'--------Roboter KKL Steuerung -------------------- ' Mit externen 10MHz Quarz '$sim $regfile = "m8def.dat" $crystal = 8000000 '---Config Port's-------------------- Config Portd = Input Portd = 255 Config Portb = Output '---Config Timer ------------------- Config Timer0 = Timer , Prescale = 64 '---Sonstiges------------------------ Dim Sensor As Byte Links_vorne Alias Pind.0 Rechts_vorne Alias Pind.1 Links_hinten Alias Pind.2 Rechts_hinten Alias Pind.3 On Timer0 Sensoren_auswerten Enable Timer0 Enable Interrupts '======================================================================== '========= Hauptprogramm ================================================ '======================================================================== Portb = 0 Gosub Vor Do If Sensor = 1 Then Gosub Zurueck Wait 2 Gosub Rechts Wait 2 Gosub Vor End If If Sensor = 2 Then Gosub Zurueck Wait 2 Gosub Links Wait 2 Gosub Vor End If If Sensor = 3 Then Gosub Vor Waitms 500 Gosub Links Waitms 500 Gosub Vor End If If Sensor = 4 Then Gosub Vor Waitms 500 Gosub Rechts Waitms 500 Gosub Vor End If Loop End '===============UnterProgramme=========================================== Sensoren_auswerten: 'Timer0 = 0 Sensor = 0 If Links_vorne = 0 Then Sensor = 1 If Rechts_vorne = 0 Then Sensor = 2 If Links_hinten = 0 Then Sensor = 3 If Rechts_hinten = 0 Then Sensor = 4 'Gosub Zurueck Return Links: Portb.1 = 1 Portb.2 = 1 Portb.3 = 0 Return Rechts: Portb.1 = 1 Portb.2 = 0 Portb.3 = 1 Return Zurueck: Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Return Vor: Portb.1 = 1 Portb.2 = 0 Portb.3 = 0 Return Stopen: Portb.1 = 0 Portb.2 = 0 Portb.3 = 0 Return
der Soll mir immer die Sensoren (bei Überlauf)
(derzeit noch 4 Mikroschalter, später vielleicht mehr Sensoren..),
Life auslesen und auch Life reagieren.
Natürlich passen hier die Waits noch nicht, weil er so seinen Ausweichschritt fertig macht und dann erst neu auf Sensoren reagiert.
Habe das mal so probiert, funktioniert aber nicht, weil man aus einem Interrupt wohl nicht verzweigen darf.
Mein Ziel wäre es, dass er z.B.:Code:'--------Roboter KKL Steuerung -------------------- '$sim $regfile = "m8def.dat" $crystal = 8000000 '---Config Port's-------------------- Config Portd = Input Portd = 255 Config Portb = Output '---Config Timer ------------------- Config Timer0 = Timer , Prescale = 64 '---Sonstiges------------------------ Dim Sensor As Byte Links_vorne Alias Pind.0 Rechts_vorne Alias Pind.1 Links_hinten Alias Pind.2 Rechts_hinten Alias Pind.3 On Timer0 Sensoren_auswerten Enable Timer0 Enable Interrupts '======================================================================== '========= Hauptprogramm ================================================ '======================================================================== Portb = 0 Gosub Vor Do Goto Sprung Ausweichen_rechts: Gosub Zurueck Wait 2 Gosub Rechts Wait 2 Gosub Vor Goto Sprung Ausweichen_links: Gosub Zurueck Wait 2 Gosub Links Wait 2 Gosub Vor Goto Sprung R_ausweichen_links: Gosub Vor Waitms 500 Gosub Links Waitms 500 Gosub Vor Goto Sprung R_ausweichen_rechst: Gosub Vor Waitms 500 Gosub Rechts Waitms 500 Gosub Vor Goto Sprung Sprung: Loop End '===============UnterProgramme=========================================== Sensoren_auswerten: 'Timer0 = 0 Sensor = 0 If Links_vorne = 0 Then Goto Ausweichen_rechts If Rechts_vorne = 0 Then Goto Ausweichen_links If Links_hinten = 0 Then Goto R_ausweichen_rechst If Rechts_hinten = 0 Then Goto R_ausweichen_links Return Links: Portb.1 = 1 Portb.2 = 1 Portb.3 = 0 Return Rechts: Portb.1 = 1 Portb.2 = 0 Portb.3 = 1 Return Zurueck: Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Return Vor: Portb.1 = 1 Portb.2 = 0 Portb.3 = 0 Return Stopen: Portb.1 = 0 Portb.2 = 0 Portb.3 = 0 Return
Wenn z.B. der Linke vordere Schalter schaltet, soll er ein Stück rückwärts und dann nach rechts ausweichen.
Während er aber ausweicht, sollte er auf alle anderen Sensoren auch noch reagieren. (z.B. die hinteren. )
Hat jemand eine Idee/Vorschlag wie man das am besten aufbauen kann?!
Es sollte auch Modular sein..
Ich dachte zuerst so:
Der Interrupt fragt immer die Sensoren selbstständig ab, und speichert einen Wert für einen Sensor in einer Variablen namens "Sensor"
z.B. Taster Links_vorne = 1 u.s.w. (wie im vorletzten Beispiel)
Die Variable Sensor, müsste ich dann extra im Hauptprogramm abfragen und dann je nach Wert, in ein Unterprogramm verzweigen... (z.B nach ausweichen_rechts)
Im Unterprogramm selbst,müsste ich auch wieder den Sensorwert auswerten (nach allen möglichkeiten)...um das Unterprogramm abzubrechen, falls sich ein Sensor ändert..
Irgendwie wird das dann alles zu aufgebläht
Geht das irgendwie einfacher ?
Irgendwie sollte das dann auch so funktionieren, dass man im einfach auch was lernen kann... (also nicht nur "fixer" Code..)
Also bestimmte Bedingungen einfach beschreiben kann, auf die er dann reagieren soll...
Irgendwie sehe ich noch keinen rechten Weg, wie es funktionieren könnte...
Vielleicht mit Tabellen ..?!
Vielleicht wisst ihr ja mehr..
l.G. aus Graz![]()







Zitieren

Lesezeichen