GT ECE 4180 Lab Team - Raj Madisetti and Arjun Sonti

Dependencies:   mbed Servo Motordriver X_NUCLEO_53L0A1 HC_SR04_Ultrasonic_Library

Remote Control Car

Georgia Tech ECE 4180 Embedded Systems Design Final Project

Team Members

Raj Madisetti Arjun Sonti

Committer:
rmadisetti3
Date:
Sun Nov 15 23:01:55 2020 +0000
Revision:
1:1c1ad0c1c260
Parent:
0:20a8dfc396cb
Child:
2:5c9526ccb055
Added AdaFruit app functionality and LIDAR sensor functionality;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rmadisetti3 0:20a8dfc396cb 1 #include "mbed.h"
rmadisetti3 0:20a8dfc396cb 2 #include "XNucleo53L0A1.h"
rmadisetti3 0:20a8dfc396cb 3 #include "Servo.h"
rmadisetti3 0:20a8dfc396cb 4 #include "motordriver.h"
rmadisetti3 0:20a8dfc396cb 5 #include <stdio.h>
rmadisetti3 1:1c1ad0c1c260 6 Serial pc(USBTX,USBRX);
rmadisetti3 1:1c1ad0c1c260 7 Serial blue(p28,p27);
rmadisetti3 1:1c1ad0c1c260 8 DigitalOut shdn(p26);
rmadisetti3 0:20a8dfc396cb 9 DigitalOut myled(LED1);
rmadisetti3 0:20a8dfc396cb 10
rmadisetti3 1:1c1ad0c1c260 11 #define VL53L0_I2C_SDA p28
rmadisetti3 1:1c1ad0c1c260 12 #define VL53L0_I2C_SCL p27
rmadisetti3 0:20a8dfc396cb 13
rmadisetti3 1:1c1ad0c1c260 14 static XNucleo53L0A1 *board=NULL;
rmadisetti3 0:20a8dfc396cb 15 Motor M(p21, p22, p23, 1); // pwm, fwd, rev, can brake
rmadisetti3 1:1c1ad0c1c260 16 Servo S(p24);
rmadisetti3 0:20a8dfc396cb 17
rmadisetti3 0:20a8dfc396cb 18
rmadisetti3 0:20a8dfc396cb 19 int main() {
rmadisetti3 1:1c1ad0c1c260 20 int status;
rmadisetti3 1:1c1ad0c1c260 21 uint32_t distance;
rmadisetti3 1:1c1ad0c1c260 22 DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
rmadisetti3 1:1c1ad0c1c260 23 /* creates the 53L0A1 expansion board singleton obj */
rmadisetti3 1:1c1ad0c1c260 24 board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
rmadisetti3 1:1c1ad0c1c260 25 shdn = 0; //must reset sensor for an mbed reset to work
rmadisetti3 1:1c1ad0c1c260 26 wait(0.1);
rmadisetti3 1:1c1ad0c1c260 27 shdn = 1;
rmadisetti3 1:1c1ad0c1c260 28 wait(0.1);
rmadisetti3 1:1c1ad0c1c260 29 /* init the 53L0A1 board with default values */
rmadisetti3 1:1c1ad0c1c260 30 status = board->init_board();
rmadisetti3 1:1c1ad0c1c260 31 while (status) {
rmadisetti3 1:1c1ad0c1c260 32 pc.printf("Failed to init board! \r\n");
rmadisetti3 1:1c1ad0c1c260 33 status = board->init_board();
rmadisetti3 1:1c1ad0c1c260 34 }
rmadisetti3 1:1c1ad0c1c260 35 //loop taking and printing distance
rmadisetti3 1:1c1ad0c1c260 36 while (1) {
rmadisetti3 1:1c1ad0c1c260 37 status = board->sensor_centre->get_distance(&distance);
rmadisetti3 1:1c1ad0c1c260 38 if (status == VL53L0X_ERROR_NONE) {
rmadisetti3 1:1c1ad0c1c260 39 pc.printf("D=%ld mm\r\n", distance);
rmadisetti3 1:1c1ad0c1c260 40 }
rmadisetti3 0:20a8dfc396cb 41 }
rmadisetti3 0:20a8dfc396cb 42
rmadisetti3 1:1c1ad0c1c260 43
rmadisetti3 1:1c1ad0c1c260 44
rmadisetti3 1:1c1ad0c1c260 45 //Logic for AdaFruit App
rmadisetti3 1:1c1ad0c1c260 46 char bnum=0;
rmadisetti3 1:1c1ad0c1c260 47 char bhit=0;
rmadisetti3 1:1c1ad0c1c260 48 while(1) {
rmadisetti3 1:1c1ad0c1c260 49 if (blue.getc()=='!') {
rmadisetti3 1:1c1ad0c1c260 50 if (blue.getc()=='B') { //button data packet
rmadisetti3 1:1c1ad0c1c260 51 bnum = blue.getc(); //button number
rmadisetti3 1:1c1ad0c1c260 52 bhit = blue.getc(); //1=hit, 0=release
rmadisetti3 1:1c1ad0c1c260 53 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
rmadisetti3 1:1c1ad0c1c260 54 myled = bnum - '0'; //current button number will appear on LEDs
rmadisetti3 1:1c1ad0c1c260 55 switch (bnum) {
rmadisetti3 1:1c1ad0c1c260 56 case '1': //AutoPilot Mode
rmadisetti3 1:1c1ad0c1c260 57 if (bhit=='1') {
rmadisetti3 1:1c1ad0c1c260 58 //loop taking and printing distance
rmadisetti3 1:1c1ad0c1c260 59 while (1) {
rmadisetti3 1:1c1ad0c1c260 60 status = board->sensor_centre->get_distance(&distance);
rmadisetti3 1:1c1ad0c1c260 61 if (distance <= 50) {
rmadisetti3 1:1c1ad0c1c260 62 //turn left or right depending on location of sensor
rmadisetti3 1:1c1ad0c1c260 63 }
rmadisetti3 1:1c1ad0c1c260 64 }
rmadisetti3 1:1c1ad0c1c260 65 break;
rmadisetti3 1:1c1ad0c1c260 66 case '5': //forward
rmadisetti3 1:1c1ad0c1c260 67 if (bhit=='1') {
rmadisetti3 1:1c1ad0c1c260 68 M.speed(1.0); //drive forward
rmadisetti3 1:1c1ad0c1c260 69 } else {
rmadisetti3 1:1c1ad0c1c260 70 M.speed(0.0); //stop
rmadisetti3 1:1c1ad0c1c260 71 }
rmadisetti3 1:1c1ad0c1c260 72 break;
rmadisetti3 1:1c1ad0c1c260 73 case '6': //reverse
rmadisetti3 1:1c1ad0c1c260 74 if (bhit=='1') {
rmadisetti3 1:1c1ad0c1c260 75 M.speed(-1.0); //reverse
rmadisetti3 1:1c1ad0c1c260 76 } else {
rmadisetti3 1:1c1ad0c1c260 77 M.speed(0.0); //stop
rmadisetti3 1:1c1ad0c1c260 78 }
rmadisetti3 1:1c1ad0c1c260 79 break;
rmadisetti3 1:1c1ad0c1c260 80 case '7': //left
rmadisetti3 1:1c1ad0c1c260 81 if (bhit=='1') {
rmadisetti3 1:1c1ad0c1c260 82 S = S - 0.5; //turn left
rmadisetti3 1:1c1ad0c1c260 83 }
rmadisetti3 1:1c1ad0c1c260 84 break;
rmadisetti3 1:1c1ad0c1c260 85 case '8': //right
rmadisetti3 1:1c1ad0c1c260 86 if (bhit=='1') {
rmadisetti3 1:1c1ad0c1c260 87 S = S + 0.5; //turn right
rmadisetti3 1:1c1ad0c1c260 88 }
rmadisetti3 1:1c1ad0c1c260 89 break;
rmadisetti3 0:20a8dfc396cb 90 }