Arexx RP6 V2 Build your own robot kit RP6 V2 User Manual

Product codes
RP6 V2
Page of 141
RP6 ROBOT SYSTEM -  4. Programmierung des RP6
4.6.6. ACS – Anti Collision System
Das Anti Collision System wird nicht mehr wie beim RP5, von einem kleineren Co-Pro-
zessor gesteuert, sondern direkt vom MEGA32. Das erfordert nun zwar etwas mehr 
Programmieraufwand auf dem Hauptcontroller, hat aber auch den Vorteil, dass man 
es beliebig verändern und verbessern kann. Beim RP5 war das Programm im Co-Pro-
zessor nicht veränderbar...
Die Reichweite bzw. die Sendeleistung der beiden IR LEDs des ACS, kann man mit fol-
genden Funktionen einstellen: 
void setACSPwrOff(void)  --> ACS IR LEDs aus
void setACSPwrLow(void)  --> Geringe Reichweite
void setACSPwrMed(void)  --> Mittlere Reichweite
void setACSPwrHigh(void) --> Maximale Reichweite
Wenn man das ACS auswerten möchte, muss man ständig aus der Hauptschleife her-
aus die Funktion:
void task_ACS(void)
aufrufen, die das ACS komplett steuert. Der Rest sieht dann ganz ähnlich wie bei den 
Bumpern aus. 
Es gibt zwei Variablen:
obstacle_left und obstacle_right
welche jeweils den Wert true haben, sobald ein Hindernis detektiert wurde. Sind beide 
true, befindet sich das Hindernis mittig vor dem Roboter.
Wenn man möchte, kann man auch hier einen Event Handler erstellen, muss man 
aber nicht – also genau wie bei den Bumpern.
void ACS_setStateChangedHandler(void (*acsHandler)(void))
Mit dieser Funktion registriert man den Event Handler, der folgende Signatur haben 
muss:
 void acsStateChanged(void)
Wie die Funktion genau heisst, ist dabei übrigens fast egal.
Das folgende Beispielprogramm zeigt die Anwendung. Zuerst wird der Event Handler 
registriert   (Zeile   44),   dann   die   Stromversorgung   zum   IR   Empfänger   eingeschaltet 
(Zeile 46 – ohne das funktioniert es nicht!) und die Sendestärke der ACS IR LEDs ein-
gestellt   (Zeile   47).   Unten   in   der  Hauptschleife   wird   dann   die   Funktion   task_ACS() 
ständig aufgerufen.
Der Rest erfolgt automatisch – die acsStateChanged Funktion wird immer aufgerufen, 
wenn sich der Zustand des ACS verändert hat – also wenn z.B. ein Objekt von den 
Sensoren entdeckt wird und wieder verschwindet. Das Programm stellt den aktuellen 
Zustand des ACS als Text im Terminal und mit den LEDs dar.
- 94 -