/* * c't-Sim - Robotersimulator fuer den 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 motor.h * @brief High-Level Routinen fuer die Motorsteuerung des c't-Bots * @author Benjamin Benz (bbe@heise.de) * @date 15.01.05 */ #ifndef motor_H_ #define motor_H_ #include "global.h" #include "ct-Bot.h" #define BOT_SPEED_IGNORE 1000 /*!< Wert ausserhalb von -BOT_SPEED_MAX und BOT_SPEED_MAX wird verwendet um einen Eintrag zu ignorieren */ #define BOT_SPEED_STOP 0 /*!< Motor aus */ #define BOT_SPEED_SLOW 49 /*!< langsame Fahrt in mm/s */ #define BOT_SPEED_FOLLOW 72 /*!< vorsichtige Fahrt, fuer Folgeverhalten in mm/s */ #define BOT_SPEED_MEDIUM 99 /*!< mittlere Fahrt in mm/s */ #define BOT_SPEED_NORMAL 144 /*!< normale Fahrt in mm/s */ #define BOT_SPEED_FAST 297 /*!< schnelle Fahrt in mm/s */ #define BOT_SPEED_MAX 450 /*!< maximale Fahrt in mm/s */ #define DIRECTION_FORWARD 0 /*!< Drehrichtung vorwaerts */ #define DIRECTION_BACKWARD 1 /*!< Drehrichtung rueckwaerts */ #define DOOR_CLOSE 7 /*!< Rechter Anschlag des Servos */ #define DOOR_OPEN 14 /*!< Linker Anschlag des Servos */ #define SERVO_OFF 0 /*!< Servo wird zum stromsparen deaktiviert */ #define SERVO1 1 /*!< Servo1 */ #define SERVO2 2 /*!< Servo1 */ extern int16 speed_l; /*!< Geschwindigkeit des linken Motors */ extern int16 speed_r; /*!< Geschwindigkeit des rechten Motors */ extern int16 motor_left; /*!< zuletzt gestellter Wert linker Motor */ extern int16 motor_right; /*!< zuletzt gestellter Wert rechter Motor */ /*! In diesem Typ steht die Drehrichtung, auch wenn die Speed-Variablen bereits wieder auf Null sind */ typedef struct { uint8 left:1; uint8 right:1; #ifndef DOXYGEN } __attribute__ ((packed)) direction_t; #else } direction_t; #endif extern direction_t direction; /*!< Drehrichtung der Motoren, auch wenn die Speed-Variablen bereits wieder auf Null sind */ /*! * Initialisiere den Motorkrams */ void motor_init(void); /*! * Direkter Zugriff auf den Motor * @param left Geschwindigkeit fuer den linken Motor * @param right Geschwindigkeit fuer den linken Motor * zwischen -255 und +255; * 0 bedeutet Stillstand, 255 volle Kraft voraus, -255 volle Kraft zurueck * Sinnvoll ist die Verwendung der Konstanten: BOT_SPEED_XXX, * also z.B. motor_set(BOT_SPEED_LOW,-BOT_SPEED_LOW); * fuer eine langsame Drehung */ void motor_set(int16 left, int16 right); /*! * Stellt die Servos * Sinnvolle Werte liegen zwischen 8 und 16 * @param servo Nummer des Servos * @param servo Zielwert */ void servo_set(uint8 servo, uint8 pos); #endif