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
Revision 1:1c1ad0c1c260, committed 2020-11-15
- Comitter:
- rmadisetti3
- Date:
- Sun Nov 15 23:01:55 2020 +0000
- Parent:
- 0:20a8dfc396cb
- Child:
- 2:5c9526ccb055
- Commit message:
- Added AdaFruit app functionality and LIDAR sensor functionality;
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sun Nov 15 22:18:34 2020 +0000
+++ b/main.cpp Sun Nov 15 23:01:55 2020 +0000
@@ -3,48 +3,88 @@
#include "Servo.h"
#include "motordriver.h"
#include <stdio.h>
-//Serial pc(USBTX,USBRX);
-//DigitalOut shdn(p26);
+Serial pc(USBTX,USBRX);
+Serial blue(p28,p27);
+DigitalOut shdn(p26);
DigitalOut myled(LED1);
-//#define VL53L0_I2C_SDA p28
-//#define VL53L0_I2C_SCL p27
+#define VL53L0_I2C_SDA p28
+#define VL53L0_I2C_SCL p27
-//static XNucleo53L0A1 *board=NULL;
+static XNucleo53L0A1 *board=NULL;
Motor M(p21, p22, p23, 1); // pwm, fwd, rev, can brake
-Servo myservo(p24);
+Servo S(p24);
int main() {
-// int status;
-// uint32_t distance;
-// DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
-// /* creates the 53L0A1 expansion board singleton obj */
-// board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
-// shdn = 0; //must reset sensor for an mbed reset to work
-// wait(0.1);
-// shdn = 1;
-// wait(0.1);
-// /* init the 53L0A1 board with default values */
-// status = board->init_board();
-// while (status) {
-// pc.printf("Failed to init board! \r\n");
-// status = board->init_board();
-// }
-// //loop taking and printing distance
-// while (1) {
-// status = board->sensor_centre->get_distance(&distance);
-// if (status == VL53L0X_ERROR_NONE) {
-// pc.printf("D=%ld mm\r\n", distance);
-// }
-// }
- for (float s= -1.0; s < 1.0 ; s += 0.01) {
- M.speed(s);
- wait(0.02);
+ int status;
+ uint32_t distance;
+ DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
+ /* creates the 53L0A1 expansion board singleton obj */
+ board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
+ shdn = 0; //must reset sensor for an mbed reset to work
+ wait(0.1);
+ shdn = 1;
+ wait(0.1);
+ /* init the 53L0A1 board with default values */
+ status = board->init_board();
+ while (status) {
+ pc.printf("Failed to init board! \r\n");
+ status = board->init_board();
+ }
+ //loop taking and printing distance
+ while (1) {
+ status = board->sensor_centre->get_distance(&distance);
+ if (status == VL53L0X_ERROR_NONE) {
+ pc.printf("D=%ld mm\r\n", distance);
+ }
}
- for(float p=0; p<1.0; p += 0.1) {
- myservo = p;
- wait(0.2);
- }
+
+
+ //Logic for AdaFruit App
+ char bnum=0;
+ char bhit=0;
+ while(1) {
+ if (blue.getc()=='!') {
+ if (blue.getc()=='B') { //button data packet
+ bnum = blue.getc(); //button number
+ bhit = blue.getc(); //1=hit, 0=release
+ if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
+ myled = bnum - '0'; //current button number will appear on LEDs
+ switch (bnum) {
+ case '1': //AutoPilot Mode
+ if (bhit=='1') {
+ //loop taking and printing distance
+ while (1) {
+ status = board->sensor_centre->get_distance(&distance);
+ if (distance <= 50) {
+ //turn left or right depending on location of sensor
+ }
+ }
+ break;
+ case '5': //forward
+ if (bhit=='1') {
+ M.speed(1.0); //drive forward
+ } else {
+ M.speed(0.0); //stop
+ }
+ break;
+ case '6': //reverse
+ if (bhit=='1') {
+ M.speed(-1.0); //reverse
+ } else {
+ M.speed(0.0); //stop
+ }
+ break;
+ case '7': //left
+ if (bhit=='1') {
+ S = S - 0.5; //turn left
+ }
+ break;
+ case '8': //right
+ if (bhit=='1') {
+ S = S + 0.5; //turn right
+ }
+ break;
}
