source: software/BristleBot/BristleBot.cpp @ 28

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