Da die Taster, welche zur Kollisionserkennung vorgesehen sind auch zum Einstellen der Stillstandswerte der Servoansteuerung benutzt werden sollen, müssen sie per Software entprellt werden. BUMPER ist ein Makro der Bibliothek. Es liefert einen Wert je nach gedrücktem Taster (oder Tasterkombination). Ein eifacher Durchschnitt über mehrere Werte hätte evtl. zu grosse Abweichungen gegeben. Daher wird auf drei (fast) gleiche Werte gewartet und wahr zurückgegeben, wenn dieser Wert innerhalb der Werte liegt.
int delta_bumper(int x, int d) { int cur, prev1, prev2; prev1 = prev2 = 0; cur = BUMPER; while( ((prev1<cur-1) || (prev1>cur+1)) || ((prev2<cur-1) || (prev2>cur+1))) { prev2 = prev1; prev1 = cur; cur = BUMPER; } return( (cur>=(x-d)) && (cur<=(x+d)) ); }
Die verschiedenen Taster werden mit den folgenden Makros abgefragt:
#define LEFT_BUMPER delta_bumper(80,5) #define RIGHT_BUMPER delta_bumper(22,5) #define REAR_BUMPER delta_bumper(127,5) #define FRONT_BUMPER delta_bumper(42,5)