/* * 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_servo.c * @brief kontrolliert die Servos * * @author Benjamin Benz (bbe@heise.de) * @date 07.12.06 */ #include "bot-logic/bot-logik.h" #ifdef BEHAVIOUR_SERVO_AVAILABLE #include "motor.h" #include "timer.h" /*! Uebergabevariable fuer Servo-Verhalten */ static uint16 servo_time; static uint8 servo_nr; static uint8 servo_pos; uint8 servo_active = 0; /*!< 0, wenn kein Servo aktiv, sonst Bit der gerade aktiven Servos gesetzt */ /*! * Dieses Verhalten fuehrt ein Servo-Kommando aus und schaltet danach den Servo wieder ab * * @param *data der Verhaltensdatensatz */ void bot_servo_behaviour(Behaviour_t *data){ /* Servo ausschalten, falls Klappe zu oder Countdown abgelaufen */ if ( (servo_pos == DOOR_CLOSE && sensDoor == 0) || (TIMER_GET_TICKCOUNT_16 - servo_time > MS_TO_TICKS(1000L)) ){ servo_set(servo_nr, SERVO_OFF); // Servo aus servo_active &= ~servo_nr; return_from_behaviour(data); // und Verhalten auch aus } } /*! * Fahre den Servo an eine Position * @param servo Nummer des Servos * @param pos Zielposition des Servos */ void bot_servo(Behaviour_t * caller, uint8 servo, uint8 pos){ servo_active |= servo; servo_set(servo, pos); // Servo-PWM einstellen servo_pos = pos; // Zielposition merken servo_nr = servo; // Servo-Nr speichern servo_time = TIMER_GET_TICKCOUNT_16; // Der Count down verschafft dem Servo etwas Zeit switch_to_behaviour(caller,bot_servo_behaviour,OVERRIDE); // Warte-Verahlten an } #endif