A program which uses twin DC motors and a lidar to drive a robot controlled by a gamepad through an mbed.

Dependencies:   mbed Motor

Test

This is a test of the repository

Committer:
lballard9
Date:
Sat Nov 23 20:08:46 2019 +0000
Revision:
15:e012856b3a61
Parent:
14:6f3985a23eeb
Child:
16:73a8f1db6f76
turbo button;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lballard9 12:4f635df5b368 1 // Sweep the motor speed from full-speed reverse (-1.0) to full speed forwards (1.0)
lballard9 12:4f635df5b368 2
johnAlexander 0:ce8359133ae6 3 #include "mbed.h"
lballard9 12:4f635df5b368 4 #include "Motor.h"
Davidroid 10:891e10d3b4a6 5 #include "XNucleo53L0A1.h"
lballard9 12:4f635df5b368 6
lballard9 12:4f635df5b368 7 #define VL53L0_I2C_SDA p28 // To be changed based on Pins
lballard9 12:4f635df5b368 8 #define VL53L0_I2C_SCL p27 // To be changed based on Pins
4180_1 11:5186cc367be0 9 DigitalOut shdn(p26);
johnAlexander 0:ce8359133ae6 10
lballard9 12:4f635df5b368 11 Motor lm(p21, p7, p8); // pwm, fwd, rev
lballard9 12:4f635df5b368 12 Motor rm(p22, p6, p10); // pwm, fwd, rev
lballard9 12:4f635df5b368 13 //BusOut myled(LED1,LED2,LED3,LED4);
lballard9 12:4f635df5b368 14 Serial BT(p13,p14);
lballard9 12:4f635df5b368 15 Serial pc(USBTX,USBRX);
lballard9 14:6f3985a23eeb 16 BusOut led(p15,p16,p19,p18);
johnAlexander 0:ce8359133ae6 17
Davidroid 10:891e10d3b4a6 18 static XNucleo53L0A1 *board=NULL;
lballard9 12:4f635df5b368 19 bool stopMotor = false;
lballard9 13:1b31916de79e 20 bool turbo = false;
johnAlexander 1:3483e701ec59 21
lballard9 12:4f635df5b368 22 float getSpeed(char& value) {
lballard9 12:4f635df5b368 23
lballard9 12:4f635df5b368 24 float ones, tens = 0, hundreds, n2, n3, dot;
lballard9 12:4f635df5b368 25
lballard9 12:4f635df5b368 26 dot = BT.getc();
lballard9 12:4f635df5b368 27 n2 = BT.getc();
lballard9 12:4f635df5b368 28 n3 = BT.getc();
lballard9 12:4f635df5b368 29
lballard9 12:4f635df5b368 30 ones = (float)(value -'0');
lballard9 12:4f635df5b368 31
lballard9 12:4f635df5b368 32 tens = (float)(n2 -'0');
lballard9 12:4f635df5b368 33 tens = tens / 10.00;
lballard9 12:4f635df5b368 34
lballard9 12:4f635df5b368 35 hundreds = (float)(n3 - '0');
lballard9 12:4f635df5b368 36 hundreds = hundreds/100.00;
lballard9 12:4f635df5b368 37
lballard9 12:4f635df5b368 38 return (ones + tens + hundreds);
lballard9 12:4f635df5b368 39 }
lballard9 12:4f635df5b368 40
lballard9 12:4f635df5b368 41 void setMotorSpeed(Motor* motor, float mspeed) {
lballard9 12:4f635df5b368 42 if(mspeed <= 1.0){
lballard9 12:4f635df5b368 43 if(abs(mspeed) > 0.2 && !stopMotor || mspeed > .2){
lballard9 12:4f635df5b368 44 pc.printf("%0.2f is the motor speed\n\r", mspeed);
lballard9 13:1b31916de79e 45 if(turbo)
lballard9 12:4f635df5b368 46 motor->speed(mspeed);
lballard9 13:1b31916de79e 47 if(!turbo)
lballard9 13:1b31916de79e 48 motor->speed(mspeed/1.75);
lballard9 12:4f635df5b368 49 }
lballard9 12:4f635df5b368 50 else
lballard9 12:4f635df5b368 51 motor->speed(0);
lballard9 12:4f635df5b368 52 }
lballard9 12:4f635df5b368 53 }
lballard9 12:4f635df5b368 54 void btMotorUpdate(Motor* motor) {
lballard9 12:4f635df5b368 55
lballard9 12:4f635df5b368 56 char PlusMinus = BT.getc();
lballard9 12:4f635df5b368 57
lballard9 12:4f635df5b368 58 if(PlusMinus == '-'){
lballard9 12:4f635df5b368 59 char n1 = BT.getc();
lballard9 12:4f635df5b368 60 setMotorSpeed(motor, -(getSpeed(n1)));
lballard9 12:4f635df5b368 61
lballard9 12:4f635df5b368 62 } else {
lballard9 12:4f635df5b368 63 setMotorSpeed(motor, getSpeed(PlusMinus));
lballard9 12:4f635df5b368 64
lballard9 12:4f635df5b368 65 }
lballard9 12:4f635df5b368 66 }
lballard9 12:4f635df5b368 67
lballard9 12:4f635df5b368 68 void btSerialInterrupt() {
lballard9 12:4f635df5b368 69
lballard9 12:4f635df5b368 70 char LRABYX = BT.getc();
lballard9 12:4f635df5b368 71
lballard9 12:4f635df5b368 72 if(LRABYX == 'L'){
lballard9 12:4f635df5b368 73 btMotorUpdate(&lm);
lballard9 12:4f635df5b368 74 }
lballard9 12:4f635df5b368 75 if(LRABYX == 'R') {
lballard9 12:4f635df5b368 76 btMotorUpdate(&rm);
lballard9 12:4f635df5b368 77 }
lballard9 13:1b31916de79e 78 if(LRABYX == 'A') {
lballard9 15:e012856b3a61 79 turbo = true;
lballard9 13:1b31916de79e 80 }
lballard9 15:e012856b3a61 81 if(LRABYX == 'B') {
lballard9 15:e012856b3a61 82 turbo = false;
lballard9 15:e012856b3a61 83 }
lballard9 15:e012856b3a61 84
lballard9 12:4f635df5b368 85 }
lballard9 12:4f635df5b368 86
lballard9 12:4f635df5b368 87
lballard9 12:4f635df5b368 88 int main() {
lballard9 12:4f635df5b368 89
lballard9 12:4f635df5b368 90 DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
lballard9 12:4f635df5b368 91 board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
lballard9 12:4f635df5b368 92 uint32_t distance;
lballard9 12:4f635df5b368 93 shdn = 0; //must reset sensor for an mbed reset to work
lballard9 12:4f635df5b368 94 wait(0.1);
lballard9 12:4f635df5b368 95 shdn = 1;
lballard9 12:4f635df5b368 96 wait(0.1);
lballard9 12:4f635df5b368 97
4180_1 11:5186cc367be0 98 /* init the 53L0A1 board with default values */
lballard9 12:4f635df5b368 99 int status = board->init_board();
4180_1 11:5186cc367be0 100 while (status) {
4180_1 11:5186cc367be0 101 status = board->init_board();
johnAlexander 7:c8087e7333b8 102 }
lballard9 12:4f635df5b368 103
lballard9 12:4f635df5b368 104 BT.attach(&btSerialInterrupt);
lballard9 12:4f635df5b368 105 lm.speed(0);
lballard9 12:4f635df5b368 106 rm.speed(0);
lballard9 14:6f3985a23eeb 107 led.write(0);
lballard9 12:4f635df5b368 108
4180_1 11:5186cc367be0 109 while (1) {
johnAlexander 7:c8087e7333b8 110 status = board->sensor_centre->get_distance(&distance);
johnAlexander 9:9733cfdb0a18 111 if (status == VL53L0X_ERROR_NONE) {
lballard9 12:4f635df5b368 112 pc.printf("%d\n\r",distance);
lballard9 12:4f635df5b368 113
lballard9 13:1b31916de79e 114 if (distance < 300) { // Distance might need to be adjusted
lballard9 12:4f635df5b368 115 stopMotor = true;
lballard9 14:6f3985a23eeb 116 led.write(15*!led.read());
lballard9 13:1b31916de79e 117 wait(.1);
lballard9 12:4f635df5b368 118 }
lballard9 12:4f635df5b368 119 else{
lballard9 12:4f635df5b368 120 stopMotor = false;
lballard9 15:e012856b3a61 121
lballard9 14:6f3985a23eeb 122 led.write(0);
lballard9 12:4f635df5b368 123 }
lballard9 12:4f635df5b368 124
lballard9 12:4f635df5b368 125
lballard9 12:4f635df5b368 126 // Any Lighting or Sound Effects for Crash Detection
lballard9 12:4f635df5b368 127
johnAlexander 7:c8087e7333b8 128 }
4180_1 11:5186cc367be0 129 }
lballard9 12:4f635df5b368 130
lballard9 12:4f635df5b368 131 }