Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
RWR_Utils.hxx
- Committer:
- steliansaracut
- Date:
- 2021-07-23
- Revision:
- 3:2ae8e437d637
- Parent:
- 2:821ffc555d49
- Child:
- 4:44f4d1cdd544
File content as of revision 3:2ae8e437d637:
#pragma once
#include "mbed.h"
// pin assignment
#define ESP_RX PA_9
#define ESP_TX PA_10
#define ESP_RESET PA_12
#define QTR_13 PB_0
#define ESP_CHPD PB_7
#define DRV_BENBL PB_6
#define QTR_11 PB_1
#define DRV_BPHASE PF_0
#define QTR_CTL PF_1
#define ESP_GPIO0 PA_8
#define DRV_APHASE PA_11
#define QTR_9 PA_7
#define DRV_AENBL PA_4
#define QTR_7 PA_3
#define QTR_5 PA_1
#define QTR_3 PA_0
// motor driver PWM frequency
#define PWM_FREQUENCY 32.0e3f
#define PWM_PERIOD 1.0f / PWM_FREQUENCY
// number of sensors on QTR module
#define SENSORS_BAR_SIZE 6
// sensors reading when no line is detected
#define SENSORS_ALL_ONES ((1 << SENSORS_BAR_SIZE) - 1U)
// hysteresis thresholds for analog sensors
#define QTR_THRESHOLD_HIGH (uint32_t) 5000U
#define QTR_THRESHOLD_LOW (uint32_t) 20000U
// PID parameters
#define PID_SETPOINT 0.0f
#define PID_KP 0.6f
// #define PID_KP 0.25f
#define PID_KI 0.0f
#define PID_KD 0.0f
#define NO_LINE_SPEED_MOTOR_A 0.0f
#define NO_LINE_SPEED_MOTOR_B 1.0f
// web interface parameters
#define WEB_ESP_BAUD 115200
#define WEB_RECEIVE_BUFFER_SIZE 2048
#define WEB_SEND_BUFFER_SIZE 2048
#define WEB_RECEIVE_TIMEOUT 1000
#define WEB_ESP_INIT_ATTEMPTS 10
#define WEB_IPD_HEADER_MIN_SIZE 9
#define WEB_SSID "RWR_1"
#define WEB_PASSWORD "RWRWRWRW"
#define WEB_CHANNEL "1"
#define WEB_ECN "3"
#define WEB_MAX_CONNECTIONS "1"
#define WEB_HIDDEN "0"
#define WEB_AP_IP "192.168.0.1"
#define WEB_AP_GATEWAY "192.168.0.1"
#define WEB_AP_NETMASK "255.255.255.0"
#define WEB_AP_PORT "80"
class Motor
{
public:
Motor(const PinName &_in1Pin, const PinName &_in2Pin, const bool _brake = false);
void setSpeed(const float speed);
void setBrake(const bool _brake);
private:
PwmOut in1PWM;
PwmOut in2PWM;
bool brake;
};
class QTR
{
public:
// QTR CTL pin, array of analog inputs connected to sensor bar, number of pulses applied to CTL pin
QTR(DigitalOut &_ctl, AnalogIn (&_sensors)[SENSORS_BAR_SIZE], const uint32_t dimPulses = 0);
// dim sensors by applying pulses on CTL pin
void dim(const uint32_t pulses);
// returns digitized sensor values as bits of an uint32_t
// a bit of 0 means that the corresponding sensor detects a reflective surface
// index 0 in sensors array corresponds to LSB in returned value
// uses hysteresis to reduce noise
uint32_t readSensorsAsDigital();
// return line position as a float between -1.0 (left) and 1.0 (right)
float readSensorsAsFloat();
// convert digitized sensor values to float
float digitizedSensorsToFloat(uint32_t digitizedSensors);
private:
DigitalOut &ctl;
AnalogIn (&sensors)[SENSORS_BAR_SIZE];
uint32_t lastSensorState;
};