summaryrefslogtreecommitdiffstats
path: root/source/ct-Bot/bot-logic/behaviour_simple.c
blob: 5c897e96965bf79df348e2643ac5f5b4f5fd2b00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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