Robot's source code

Dependencies:   mbed

Asservissement/Motor.h

Committer:
Near32
Date:
2015-03-08
Revision:
36:54f86bc6fd80
Child:
40:83ce8d1072ef

File content as of revision 36:54f86bc6fd80:

#include "mbed.h"

/** Motor
 *  Classe permettant de controler un moteur
 */
class Motor
{
    private:
        PwmOut* pwm;
        DigitalOut* dir;
        bool inverse;
        float speed;
        
    public:
        /** Création d'un moteur
         *
         * @param pwm Pin sur laquelle sort la PWM
         * @param dir Pin sur laquelle sort le bit de direction
         */
        Motor(PwmOut* pwm, DigitalOut* dir)
        {
            this->pwm = pwm;
            this->dir = dir;
            inverse = false;
            speed = 0.0f;
            this->pwm->period_us(10);    
            
        }
        virtual ~Motor();

        /** Fixe la vitesse du moteur
         *
         * @param s Vitesse du moteur entre -1 et 1
         */
        void setSpeed(float s)
        {
            if(s<= 1.0f && s >=-1.0f)
            {
                speed = fabs_(s);   
                inverse = (s <= 0.0f);
            }
            else
            {
                speed = 0.0f;
                inverse = false;
            }    
        }

        /** Retourne la vitesse théorique du moteur
         *
         * @return Vitesse du moteur entre -1 et 1
         */
        float getSpeed(){return speed;}

        /** Fixe l'invesrion de polarité
         *
         * Exemple :
         * @code
         * moteur.setSpeed(1); // le moteur tourne à pleine vitesse dans le sens trigo
         * moteur.setInverse(true); // le moteur tourne à pleine vitesse dans le sens anti-trigo
         * moteur.setSpeed(-1); // le moteur tourne à pleine vitesse dans le sens trigo
         * @endcode
         *
         * @param i Inversion de polarité
         */
        void setInverse(bool i)
        {
            inverse = i;
        }

        /** Retourne l'état d'inversion de polarité
         *
         * @return True ou False
         */
        bool setInverse(){return inverse;}    
        
        void update(float s)
        {
            this->setSpeed(s);
            
            if(inverse)
                dir->write(1);
            else
                dir->write(0);
                
            pwm->write(speed);   
        }
};