#ifndef motor_h #define motor_h // motor.h // buzz - Programme du robot Efrei Robotique I1-I2 2003 // Copyright (C) 2003 Nicolas Schodet #include "serial/serial.h" class Motor { Serial m_serial; // Buffer d'entrée. char m_recv_buf[64]; int m_recv_n; // Paramètre vitesse/acceleration. int m_accel, m_speed; int m_raccel, m_rspeed; int m_inf_accel, m_inf_speed; int m_inf_raccel, m_inf_rspeed; // Paramètres géométriques. int m_ed2; double m_factor, m_rfactor; // Operations en cours. bool m_running; char m_last_com; int m_last_a1, m_last_a2, m_last_a3; // Calcul de position. double m_x, m_y, m_dir; // Capteurs. char m_capteurs; bool m_capteursFetch; // Servo. bool m_servoFinnish; // Distance effectuée. int m_doneG, m_doneD; int m_doneGs, m_doneDs; // Instance unique. static Motor *m_instance; public: // Constructeur. Motor (void); // Destructeur. ~Motor (void); // Change la position courante. void setPos (double x, double y); // Change la position courante. void setPos (double x, double y, double dir); // Récupère la position courante. TODO: valider avec une date. void getPos (double &x, double &y, double &dir); // Retourne une référence vers l'instance unique. static Motor &getInstance (void) { return *m_instance; } // Avance d'une distance d, à la vitesse s. void goDistance (int d, int s = -1); // Tourne d'un angle d, à la vitesse s. void turnAngle (int d, int s = -1); // Avance indéfiniment à la vitesse s. void go (int s = 0); // Avance indéfiniment à la vitesse sg et sd, respectivement pour le // moteur gauche et droit. void go (int sg, int sd); // Tourne indéfiniment à la vitesse s. void turn (int s = 0); // Avance indéfiniment en tournant à la vitesse max s, de rayon r. void goTurn (int s, int r); // Stoppe. void stop (void); // Stop progressif. void stopp (void); // Reset. void reset (void); // Retourne true si la commande est terminée. bool finnish (void) { readMsg (); return !m_running; } // Traite les message entrants. void readMsg (void); // Traite l'information de bouclage. void readTicks (int g, int d); // Demande les infos capteurs. void fetchCapteurs (void); // Retourne les infos capteurs. int getCapteurs (void); // Gère les servos. void setServo (int s); // Attend le top départ. void waitRound (void); // Récupère la distance parcouru. int getDone (void); // Mémorise la distance parcourue pour le moment. void setDone (void); private: // Envoie une commande. void send (char com, int a1 = -1, int a2 = -1, int a3 = -1); // Traite des éventuels retours, retourne true si commande finie. bool recv (void); }; #endif // motor_h