/* * 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