DC motor position control with potentiometer

Dependents:   Ackermann steering baseControl_ackermannCar

LamborSteer.h

Committer:
worasuchad
Date:
2018-11-07
Revision:
0:b20808175db0

File content as of revision 0:b20808175db0:

#ifndef LAMBORSTEER_H
#define LAMBORSTEER_H

#include "mbed.h"

#define MAX_SERVOS 2
#define MIN_POT_VALUE 10   
#define MAX_POT_VALUE 1000  // 800
#define MIN_ANGLE 10
#define MAX_ANGLE 400       // 170

typedef unsigned char uint8_t;

typedef struct {
    int wanted_angle;
    int current_angle;
    uint8_t speed;
} servo_status;

class LamborSteer
{
public:
    LamborSteer(PinName _cw_pin, PinName _ccw_pin, PinName _enablerPin, PinName _sensor_pin, int _offset);
    //void attach();
    void timer_int_routine();  
    void detach();
    void write(int degrees);
    void update();
    servo_status read();

    bool active;
    int index;
private:               
    int offset;
    uint8_t speed;
    int wanted_position;
    int tolerance;
    int constrained_value;
    
    void write_pot_value(int degrees);
    void run_cw();
    void run_ccw();
    void stop();
    int get_position();
    long map(long x, long in_min, long in_max, long out_min, long out_max);
    DigitalOut cw_pin;
    DigitalOut ccw_pin;
    PwmOut enabler_pin;
    AnalogIn sensor_pin;
};

static int s_index;                 // number of registered servo's
static LamborSteer* _m_servos[2];   // array containing registered servo's
#endif