summaryrefslogtreecommitdiffstats
path: root/source/ct-Bot/bot-logic/behaviour_simple.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/ct-Bot/bot-logic/behaviour_simple.c')
-rw-r--r--source/ct-Bot/bot-logic/behaviour_simple.c139
1 files changed, 139 insertions, 0 deletions
diff --git a/source/ct-Bot/bot-logic/behaviour_simple.c b/source/ct-Bot/bot-logic/behaviour_simple.c
new file mode 100644
index 0000000..5c897e9
--- /dev/null
+++ b/source/ct-Bot/bot-logic/behaviour_simple.c
@@ -0,0 +1,139 @@
+/*
+ * c't-Bot
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ * This program is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307, USA.
+ *
+ */
+
+
+/*! @file behaviour_simple.c
+ * @brief ganz einfache Beispielverhalten
+ * Diese Datei sollte der Einstiegspunkt fuer eigene Experimente sein,
+ * den Roboter zu steuern.
+ *
+ * @author Benjamin Benz (bbe@heise.de)
+ * @date 03.11.06
+*/
+
+
+#include "bot-logic/bot-logik.h"
+#ifdef BEHAVIOUR_SIMPLE_AVAILABLE
+
+
+/*!
+ * Ein ganz einfaches Verhalten, es hat maximale Prioritaet
+ * Hier kann man auf ganz einfache Weise die ersten Schritte wagen.
+ * Wer die Moeglichkeiten des ganzen Verhaltensframeworks ausschoepfen will, kann diese Funktion getrost auskommentieren
+ * und findet dann in bot_behave_init() und bot_behave() weitere Hinweise fuer elegante Bot-Programmierung....
+ *
+ * Das Verhalten ist per default abgeschaltet. Daher muss man es erst in bot_behave_init() aktivieren.
+ * Dort steht aber bereits eine auskommentierte Zeile dazu, von der man nur die zwei Kommentarzeichen wegnehmen muss.
+ * Achtung, da bot_simple_behaviour() maximale Prioritaet hat, kommt es vor den anderen Regeln, wie dem Schutz vor Abgruenden, etc. zum Zuge
+ * Das sollte am Anfang nicht stoeren, spaeter sollte man jedoch die Prioritaet herabsetzen.
+ *
+ * @param *data der Verhaltensdatensatz
+ */
+void bot_simple_behaviour(Behaviour_t *data){
+ static uint8 state=0;
+
+ switch (state){
+ case 0:
+ bot_drive_distance(data ,0 , BOT_SPEED_MAX, 14);
+ state++;
+ break;
+ case 1:
+ bot_turn(data , 90);
+ state=0;
+ break;
+ default:
+ state=0;
+ return_from_behaviour(data);
+ break;
+ }
+}
+
+
+/*!
+ * Rufe das Simple-Verhalten auf
+ * @param caller Der obligatorische Verhaltensdatensatz des Aufrufers
+ */
+void bot_simple(Behaviour_t * caller, int16 light){
+ switch_to_behaviour(caller,bot_simple_behaviour,OVERRIDE);
+}
+
+
+/*! Uebergabevariable fuer SIMPLE2 */
+static int16 simple2_light=0;
+
+/*!
+ * Ein ganz einfaches Beispiel fuer ein Hilfsverhalten,
+ * das selbst SpeedWishes aussert und
+ * nach getaner Arbeit die aufrufende Funktion wieder aktiviert
+ * Zudem prueft es, ob eine Uebergabebedingung erfuellt ist.
+ *
+ * Zu diesem Verhalten gehoert die Botenfunktion bot_simple2()
+ *
+ * Hier kann man auf ganz einfache Weise die ersten Schritte wagen.
+ * Wer die Moeglichkeiten des ganzen Verhaltensframeworks ausschoepfen will, kann diese Funktion getrost auskommentieren
+ * und findet dann in bot_behave_init() und bot_behave() weitere Hinweise fuer elegante Bot-Programmierung....
+ *
+ * Das Verhalten ist per default abgeschaltet. Daher muss man es erst in bot_behave_init() aktivieren.
+ * Dort steht aber bereits eine auskommentierte Zeile dazu, von der man nur die zwei Kommentarzeichen wegnehmen muss.
+ * Achtung, da bot_simple2_behaviour() maximale Prioritaet hat, kommt es vor den anderen Regeln, wie dem Schutz vor Abgruenden, etc. zum Zuge
+ * Das sollte am Anfang nicht stoeren, spaeter sollte man jedoch die Prioritaet herabsetzen.
+ *
+ * bot_simple2_behaviour faehrt den Bot solange geradeaus, bis es dunkler als im Uebergabeparameter spezifiziert ist wird
+ *
+ * @param *data der Verhaltensdatensatz
+ */
+void bot_simple2_behaviour(Behaviour_t *data){
+ #define STATE_SIMPLE2_INIT 0
+ #define STATE_SIMPLE2_WORK 1
+ #define STATE_SIMPLE2_DONE 2
+ static uint8 state = 0;
+
+ switch (state) {
+ case STATE_SIMPLE2_INIT:
+ // Nichts zu tun
+ state=STATE_SIMPLE2_WORK;
+ break;
+ case STATE_SIMPLE2_WORK:
+ // Fahre ganz schnell
+ speedWishLeft = BOT_SPEED_FAST;
+ speedWishRight = BOT_SPEED_FAST;
+ if (sensLDRL< simple2_light) // Beispielbedingung
+ // Wenn es dunkler als angegeben wird, dann haben wir unserd Ziel erreicht
+ state=STATE_SIMPLE2_DONE;
+ break;
+
+ case STATE_SIMPLE2_DONE: /* Sind wir fertig, dann Kontrolle zurueck an Aufrufer */
+ state=STATE_SIMPLE2_INIT;
+ return_from_behaviour(data);
+ break;
+ }
+}
+
+/*!
+ * Rufe das Simple2-Verhalten auf und uebergebe light
+ * @param caller Der obligatorische Verhaltensdatensatz des Aufrufers
+ * @param light Uebergabeparameter
+ */
+void bot_simple2(Behaviour_t * caller, int16 light){
+ simple2_light=light;
+
+ // Zielwerte speichern
+ switch_to_behaviour(caller,bot_simple2_behaviour,OVERRIDE);
+}
+#endif