Wirtek Robotics Workshop / RWR_Utils
Committer:
steliansaracut
Date:
Sun Jun 27 12:20:30 2021 +0000
Revision:
0:3960679bf525
Child:
1:755da47160cb
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
steliansaracut 0:3960679bf525 1 #pragma once
steliansaracut 0:3960679bf525 2
steliansaracut 0:3960679bf525 3 #include "mbed.h"
steliansaracut 0:3960679bf525 4
steliansaracut 0:3960679bf525 5 // pin assignment
steliansaracut 0:3960679bf525 6 #define ESP_RX PA_9
steliansaracut 0:3960679bf525 7 #define ESP_TX PA_10
steliansaracut 0:3960679bf525 8 #define ESP_RESET PA_12
steliansaracut 0:3960679bf525 9 #define QTR_13 PB_0
steliansaracut 0:3960679bf525 10 #define ESP_CHPD PB_7
steliansaracut 0:3960679bf525 11 #define DRV_BENBL PB_6
steliansaracut 0:3960679bf525 12 #define QTR_11 PB_1
steliansaracut 0:3960679bf525 13 #define DRV_BPHASE PF_0
steliansaracut 0:3960679bf525 14 #define QTR_CTL PF_1
steliansaracut 0:3960679bf525 15 #define ESP_GPIO0 PA_8
steliansaracut 0:3960679bf525 16 #define DRV_APHASE PA_11
steliansaracut 0:3960679bf525 17 #define QTR_9 PA_7
steliansaracut 0:3960679bf525 18 #define DRV_AENBL PA_4
steliansaracut 0:3960679bf525 19 #define QTR_7 PA_3
steliansaracut 0:3960679bf525 20 #define QTR_5 PA_1
steliansaracut 0:3960679bf525 21 #define QTR_3 PA_0
steliansaracut 0:3960679bf525 22
steliansaracut 0:3960679bf525 23 // motor driver PWM frequency
steliansaracut 0:3960679bf525 24 #define PWM_FREQUENCY 32.0e3f
steliansaracut 0:3960679bf525 25 #define PWM_PERIOD 1.0f / PWM_FREQUENCY
steliansaracut 0:3960679bf525 26
steliansaracut 0:3960679bf525 27 // number of sensors on QTR module
steliansaracut 0:3960679bf525 28 #define SENSORS_BAR_SIZE 6
steliansaracut 0:3960679bf525 29
steliansaracut 0:3960679bf525 30 // hysteresis thresholds for analog sensors
steliansaracut 0:3960679bf525 31 #define QTR_THRESHOLD_HIGH (uint32_t) 5000U
steliansaracut 0:3960679bf525 32 #define QTR_THRESHOLD_LOW (uint32_t) 20000U
steliansaracut 0:3960679bf525 33
steliansaracut 0:3960679bf525 34 // PID parameters
steliansaracut 0:3960679bf525 35 #define PID_SETPOINT 0.0f
steliansaracut 0:3960679bf525 36 #define PID_KP 0.3f
steliansaracut 0:3960679bf525 37 #define PID_KD 0.0f
steliansaracut 0:3960679bf525 38 #define PID_KI 0.0001f
steliansaracut 0:3960679bf525 39
steliansaracut 0:3960679bf525 40 class Motor
steliansaracut 0:3960679bf525 41 {
steliansaracut 0:3960679bf525 42 public:
steliansaracut 0:3960679bf525 43 Motor(const PinName &_in1Pin, const PinName &_in2Pin, const bool _brake = false);
steliansaracut 0:3960679bf525 44 void setSpeed(const float speed);
steliansaracut 0:3960679bf525 45 void setBrake(const bool _brake);
steliansaracut 0:3960679bf525 46
steliansaracut 0:3960679bf525 47 private:
steliansaracut 0:3960679bf525 48 PwmOut in1PWM;
steliansaracut 0:3960679bf525 49 PwmOut in2PWM;
steliansaracut 0:3960679bf525 50 bool brake;
steliansaracut 0:3960679bf525 51 };
steliansaracut 0:3960679bf525 52
steliansaracut 0:3960679bf525 53 class QTR
steliansaracut 0:3960679bf525 54 {
steliansaracut 0:3960679bf525 55 public:
steliansaracut 0:3960679bf525 56 // QTR CTL pin, array of analog inputs connected to sensor bar, number of pulses applied to CTL pin
steliansaracut 0:3960679bf525 57 QTR(DigitalOut &_ctl, AnalogIn (&_sensors)[SENSORS_BAR_SIZE], const uint32_t dimPulses = 0);
steliansaracut 0:3960679bf525 58
steliansaracut 0:3960679bf525 59 // dim sensors by applying pulses on CTL pin
steliansaracut 0:3960679bf525 60 void dim(const uint32_t pulses);
steliansaracut 0:3960679bf525 61
steliansaracut 0:3960679bf525 62 // returns digitized sensor values as bits of an uint32_t
steliansaracut 0:3960679bf525 63 // a bit of 0 means that the corresponding sensor detects a reflective surface
steliansaracut 0:3960679bf525 64 // index 0 in sensors array corresponds to LSB in returned value
steliansaracut 0:3960679bf525 65 // uses hysteresis to reduce noise
steliansaracut 0:3960679bf525 66 uint32_t readSensorsAsDigital();
steliansaracut 0:3960679bf525 67
steliansaracut 0:3960679bf525 68 // return line position as a float between -1.0 (left) and 1.0 (right)
steliansaracut 0:3960679bf525 69 float readSensorsAsFloat();
steliansaracut 0:3960679bf525 70
steliansaracut 0:3960679bf525 71 private:
steliansaracut 0:3960679bf525 72 DigitalOut &ctl;
steliansaracut 0:3960679bf525 73 AnalogIn (&sensors)[SENSORS_BAR_SIZE];
steliansaracut 0:3960679bf525 74 uint32_t lastSensorState;
steliansaracut 0:3960679bf525 75 };