source: software/BristleBot/BristleBot.h @ 26

Last change on this file since 26 was 26, checked in by Jürgen Berwein, 15 years ago
File size: 8.9 KB
Line 
1#ifndef BristleBot_h
2#define BristleBot_h
3
4#include <inttypes.h>
5#include <wiring.h>
6
7#define LINKS -1
8#define RECHTS 1
9#define BEIDE 0
10#define WENN if
11#define SONST else
12#define IST ==
13#define LOS loop
14#define FERTIG setup
15#define UND &&
16#define SCHALTE switch
17#define FALLS case
18#define AN true
19#define AUS false
20
21
22// Klasse des Roboters. Hier werden alle Funktionen und Variablen bestimmt.
23class BristleBot
24{
25
26public:
27
28    //===================================================================
29    //Hier werden die Variablen definiert.
30    //===================================================================
31    //Wert fuer eingeschalteten Motor Wert. Muss zwischen 0 und 255 liegen. (Darf nicht mehr als 3 Volt sein!!!
32    //Bei 5 Volt Stromversorgung darf der Wert nicht hoeher als 180 betragen, sonst brutzeln die Motoren durch)
33    int motOn;
34
35    //Differenz zwischen beiden Sensoren, um einen hell/dunkel Uebergang zu erkennen.
36    int sensibility;
37   
38    //Variable des Pins fuer linkes Licht vorn.
39    int leftLight;
40
41    //Variable des Pins fuer rechtes Licht vorn.
42    int rightLight;
43
44    //Variable des Pins fuer rechtes Licht hinten.
45    int backLightRight;
46
47    //Variable des Pins fuer linkes Licht hinten.
48    int backLightLeft;
49
50    //Variable des Pins fuer blaue LED vorn.
51    int ledBlue;
52
53    //Variable des Pins fuer rechten Sensor.
54    int sensorRight;
55
56    //Variable des Pins fuer linkes Sensor.
57    int sensorLeft;
58
59    //Variable des Pins fuer rechten Motor (muss PWN Pin sein!!!).
60    int motorRight;
61
62    //Variable des Pins fuer linken Motor (muss PWN Pin sein!!!).
63    int motorLeft;
64
65    //===================================================================
66    //Hier werden die Funktionen definiert.
67    //===================================================================
68
69    //Konstruktor des Roboters. Ein neuer Roboter wird erzeugt.
70    BristleBot()
71    {
72        //Pin fuer linkes Licht vorn.
73        leftLight      = 3;
74        //Pin fuer rechtes Licht vorn.
75        rightLight     = 7 ;
76        //Pin fuer rechtes Licht hinten.
77        backLightRight = 8 ;
78        //Pin fuer linkes Licht hinten.
79        backLightLeft  = 2 ;
80        //Pin fuer blaue LED vorn.
81        ledBlue        = 9;
82        //Pin fuer linken Sensor.
83        sensorLeft     = 3 ;
84        //Pin fuer rechten Sensor.
85        sensorRight    = 2 ;
86        //Pin fuer rechten Motor (muss PWN Pin sein!!!).
87        motorRight     = 10;
88        //Pin fuer linken Motor (muss PWN Pin sein!!!).
89        motorLeft      = 11;
90    }
91
92    //===================================================================
93    //Stopt beide Motoren.
94    //===================================================================
95    void stop()
96    {
97        //Setze rechten Motor auf 0 Volt
98        analogWrite( motorRight, 0 );
99        //Setze linken Motor auf 0 Volt
100        analogWrite( motorLeft, 0 );
101    }
102
103    //===================================================================
104    //Schaltet beie Motoren an. Der Roboter faehrt nach vorn.
105    //===================================================================
106    void fahreGerade()
107    {
108        //Setze rechten Motor auf maximal Volt (Darf nicht mehr als 3 Volt sein!!!)
109        analogWrite( motorRight, motOn  );
110        //Setze linken Motor auf maximal Volt (Darf nicht mehr als 3 Volt sein!!!)
111        analogWrite( motorLeft, motOn  );
112    }
113
114    //===================================================================
115    //Schaltet rechten Motor an, um eine Linkskurve zu fahren.
116    //===================================================================
117    void fahreLinks()
118    {
119        //Setze linken Motor auf 0 Volt
120        analogWrite( motorLeft, 0 );
121        //Setze rechten Motor auf maximal Volt (Darf nicht mehr als 3 Volt sein!!!)
122        analogWrite( motorRight, motOn  );
123    }
124
125    //===================================================================
126    //Schaltet linken Motor an, um eine Rechtskurve zu fahren.
127    //===================================================================
128    void fahreRechts()
129    {
130        analogWrite( motorRight, 0 );
131        analogWrite( motorLeft, motOn );
132
133    }
134
135    //===================================================================
136    //Schalte Ruecklicht an oder aus. Wenn das Ruecklicht angeschaltet werden soll, muss fuer "an" true
137    //uebergeben werden. Wenn das Licht ausgeschaltet werden soll, muss fuer "an" false uebergeben werden.
138    //===================================================================
139    void ruecklicht(bool an)
140    {
141        //Schalte rechtes Ruecklicht an oder aus.
142        digitalWrite(backLightRight, !an);
143        //Schalte linkes Ruecklicht an oder aus.
144        digitalWrite(backLightLeft, !an);
145    }
146
147    //===================================================================
148    //Schalte linkes Licht an oder aus. Wenn das linke Licht angeschaltet werden soll, muss fuer "an" true
149    //uebergeben werden. Wenn das Licht ausgeschaltet werden soll, muss fuer "an" false uebergeben werden.
150    //===================================================================
151    void linkesLicht(bool an)
152    {
153        //Schalte linkes Licht an oder aus.
154        digitalWrite(leftLight, !an);
155    }
156
157    //===================================================================
158    //Schalte Ruecklicht an oder aus. Wenn das Ruecklicht angeschaltet werden soll, muss fuer "an" true
159    //uebergeben werden. Wenn das Licht ausgeschaltet werden soll, muss fuer "an" false uebergeben werden.
160    //===================================================================
161    void rechtesLicht(bool an)
162    {
163        //Schalte rechtes Licht an oder aus.
164        digitalWrite(rightLight, !an);
165    }
166
167    //===================================================================
168    //Lese beide Sensorwerte aus und bestimme, welcher der beiden Sensoren mehr Licht
169    //emfaengt bzw. beide Sensoren gleich viel Licht.
170    //===================================================================
171    int  leseSensor()
172    {
173        //Lese rechten Sensorwert ( Wert ist zwischen 0 (kein Licht) und 1024 (ganz hell).
174        int lightRight = analogRead( sensorRight );
175        //Lese linken Sensorwert ( Wert ist zwischen 0 (kein Licht) und 1024 (ganz hell).
176        int lightLeft = analogRead( sensorLeft );
177
178        //Entscheide, ob rechter Sensor viel mehr Licht empfaengt als linker Sensor.
179        if( ( lightLeft - lightRight ) <  -sensibility )
180        {
181            return RECHTS;
182        } //Entscheide, ob linker Sensor viel mehr Licht empfaengt als rechter Sensor.
183        else if  (( lightLeft - lightRight ) >  sensibility )
184        {
185            return LINKS;
186        } //Ansonsten sind beide Sensorwerte FAST gleich.
187        else
188        {
189            return BEIDE;
190        }
191   
192    }
193
194    //===================================================================
195    //Aktiviere Roboter und fuere einige Tests durch
196    //===================================================================
197    void init(int _on, int _sens )
198    {
199        //Setze Wert fuer eingeschalteten Motor Wert. Muss zwischen 0 und 255 liegen. (Darf nicht mehr als 3 Volt sein!!!
200        //Bei 5 Volt Stromversorgung darf der Wert nicht hoeher als 180 betragen, sonst brutzeln die Motoren durch)
201        motOn = _on;
202        //Differenz zwischen beiden Sensoren, um einen hell/dunkel Uebergang zu erkennen.
203        sensibility = _sens;
204
205        //Aktiviere Eingangs/Ausgangs Pins des Microcontrollers
206        pinMode(leftLight, OUTPUT);
207        pinMode(rightLight, OUTPUT);
208        pinMode(backLightRight, OUTPUT);
209        pinMode(backLightLeft, OUTPUT);
210        pinMode(ledBlue, OUTPUT );
211        //Schalte blaue LED an
212        digitalWrite(ledBlue, LOW);
213
214        //Schalte rechtes Licht an.
215        rechtesLicht(AN);
216        //Schalte linkes Licht aus.
217        linkesLicht(AUS);
218        //Schalte Ruecklicht aus.
219        ruecklicht(AUS);
220        //Warte eine halbe Sekunde.
221        delay(500);
222
223        //Schalte rechtes Licht aus.
224        rechtesLicht(AUS);
225        //Schalte linkes Licht an.
226        linkesLicht(AN);
227        //Schalte Ruecklicht aus.
228        ruecklicht(AUS);
229        //Warte eine halbe Sekunde.
230        delay(500);
231
232        //Schalte rechtes Licht aus.
233        rechtesLicht(AUS);
234        //Schalte linkes Licht aus.
235        linkesLicht(AUS);
236        //Schalte Ruecklicht an.
237        ruecklicht(AN);
238        //Warte eine halbe Sekunde.
239        delay(500);
240
241        //Schalte rechtes Licht aus.
242        rechtesLicht(AUS);
243        //Schalte linkes Licht aus.
244        linkesLicht(AUS);
245        //Schalte Ruecklicht aus.
246        ruecklicht(AUS);
247        //Warte eine halbe Sekunde.
248        delay(500);
249
250        //Fahre Rechtskurve.
251        fahreRechts();
252        //Fahre drei Sekunden lang.
253        delay(3000);
254        //Fahre Linksskurve.
255        fahreLinks();
256        //Warte drei Sekunden.
257        delay(3000);
258        //Fahre Linksskurve.
259        fahreLinks();
260        //Fahre drei Sekunden lang.
261        delay(3000);
262    }
263
264};
265
266#endif
267 
Note: See TracBrowser for help on using the repository browser.