Driving

Dependencies:   FSR LIS3DH USBDevice mbed

Fork of MMA8452_Demo by Ivan Rush

Committer:
darrenalilim
Date:
Tue Jun 27 00:59:52 2017 +0000
Revision:
9:cbce87f4f21f
Parent:
8:46eab8a51f91
Publishing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashleymills 0:0c17274c3b7c 1 #include "mbed.h"
darrenalilim 9:cbce87f4f21f 2 #include "LIS3DH.h"
darrenalilim 9:cbce87f4f21f 3 #include "FSR.h"
darrenalilim 9:cbce87f4f21f 4 #include "USBMouseKeyboard.h"
darrenalilim 9:cbce87f4f21f 5 #include <string>
darrenalilim 9:cbce87f4f21f 6 #include <math.h>
Ivannrush 8:46eab8a51f91 7 //Using MMA8452 accelerometer. SDA on 28, SCL on 27. Writes gravities to the screen.
Ivannrush 8:46eab8a51f91 8 //Also brightens/dims LEDs 1-3 based on whether or not they are 'level'( 0 Gs)
ashleymills 0:0c17274c3b7c 9
ashleymills 0:0c17274c3b7c 10 Serial pc(USBTX,USBRX);
darrenalilim 9:cbce87f4f21f 11 USBMouseKeyboard controller;
darrenalilim 9:cbce87f4f21f 12
darrenalilim 9:cbce87f4f21f 13 LIS3DH acc(D7, D6, LIS3DH_G_CHIP_ADDR);
darrenalilim 9:cbce87f4f21f 14 FSR fsr(PTB3, 100);
darrenalilim 9:cbce87f4f21f 15
darrenalilim 9:cbce87f4f21f 16 DigitalIn d8(D8);
darrenalilim 9:cbce87f4f21f 17 DigitalIn d9(D9);
darrenalilim 9:cbce87f4f21f 18
darrenalilim 9:cbce87f4f21f 19 PwmOut red(LED1);
darrenalilim 9:cbce87f4f21f 20 PwmOut blue(LED3);
darrenalilim 9:cbce87f4f21f 21
darrenalilim 9:cbce87f4f21f 22 float data[3];
darrenalilim 9:cbce87f4f21f 23 double x, y, z;
darrenalilim 9:cbce87f4f21f 24 static const float Width = (float)(X_MAX_ABS - X_MIN_ABS);
darrenalilim 9:cbce87f4f21f 25 #ifndef M_PI
darrenalilim 9:cbce87f4f21f 26 #define M_PI 3.14159265358979323846
darrenalilim 9:cbce87f4f21f 27 #endif
darrenalilim 9:cbce87f4f21f 28
darrenalilim 9:cbce87f4f21f 29 string translate(double x, double y, double z) {
darrenalilim 9:cbce87f4f21f 30 double val = atan(x/y);
darrenalilim 9:cbce87f4f21f 31 if (x < 0 && abs(val) >= 0.6) return "Hard Left";
darrenalilim 9:cbce87f4f21f 32 else if (x < 0 && val < 0.6 && val > 0.2) return "Soft Left";
darrenalilim 9:cbce87f4f21f 33 else if (x > 0 && abs(val) >= 0.6) return "Hard Right";
darrenalilim 9:cbce87f4f21f 34 else if (x > 0 && val > -0.6 && val < -0.2) return "Soft Right";
darrenalilim 9:cbce87f4f21f 35 else return "Straight";
darrenalilim 9:cbce87f4f21f 36 }
darrenalilim 9:cbce87f4f21f 37
darrenalilim 9:cbce87f4f21f 38 int16_t calculate_mouse_x(double x, double y) {
darrenalilim 9:cbce87f4f21f 39 double val = atan(x/y);
darrenalilim 9:cbce87f4f21f 40 if (abs(val) < 0.2) return 0;
darrenalilim 9:cbce87f4f21f 41 if (x < 0) {
darrenalilim 9:cbce87f4f21f 42 return Width * (-abs(val)/M_PI)/256;
darrenalilim 9:cbce87f4f21f 43 } else {
darrenalilim 9:cbce87f4f21f 44 return Width * (abs(val)/M_PI)/256;
darrenalilim 9:cbce87f4f21f 45 }
darrenalilim 9:cbce87f4f21f 46 }
ashleymills 1:e9981919b524 47
darrenalilim 9:cbce87f4f21f 48 void holdA() {
darrenalilim 9:cbce87f4f21f 49 int i = (int) floor(fsr.readRaw()*100) ;
darrenalilim 9:cbce87f4f21f 50 while (i > 0) {
darrenalilim 9:cbce87f4f21f 51 controller.keyCode('a', 0);
darrenalilim 9:cbce87f4f21f 52 i--;
darrenalilim 9:cbce87f4f21f 53 }
darrenalilim 9:cbce87f4f21f 54 }
ashleymills 6:e3100f66ed6a 55
darrenalilim 9:cbce87f4f21f 56 int main() {
darrenalilim 9:cbce87f4f21f 57 pc.printf("Starting program...\r\n");
darrenalilim 9:cbce87f4f21f 58 while(1) {
darrenalilim 9:cbce87f4f21f 59 acc.read_data(data);
darrenalilim 9:cbce87f4f21f 60 x = data[0]; y = data[1]; z = data[2];
darrenalilim 9:cbce87f4f21f 61 //pc.printf("x:%lf y:%lf z:%lf\r\n",x,y,z);
darrenalilim 9:cbce87f4f21f 62 //pc.printf("Detect as: %s \r\n", translate(x, y, z));
darrenalilim 9:cbce87f4f21f 63 //pc.printf("dX:%d \r\n", calculate_mouse_x(x, y));
darrenalilim 9:cbce87f4f21f 64 /*
darrenalilim 9:cbce87f4f21f 65 if (!d8) {
darrenalilim 9:cbce87f4f21f 66 controller.keyCode('a', 0);
darrenalilim 9:cbce87f4f21f 67 controller.keyCode('a', 0);
darrenalilim 9:cbce87f4f21f 68 controller.keyCode('a', 0);
darrenalilim 9:cbce87f4f21f 69 }
darrenalilim 9:cbce87f4f21f 70 */
darrenalilim 9:cbce87f4f21f 71 if (!d9) controller.move(calculate_mouse_x(x, y), 0);
darrenalilim 9:cbce87f4f21f 72 /*
darrenalilim 9:cbce87f4f21f 73 if (!d8) {
darrenalilim 9:cbce87f4f21f 74 controller.keyCode('a', 0);
darrenalilim 9:cbce87f4f21f 75 controller.keyCode('a', 0);
darrenalilim 9:cbce87f4f21f 76 controller.keyCode('a', 0);
darrenalilim 9:cbce87f4f21f 77 }
darrenalilim 9:cbce87f4f21f 78 */
darrenalilim 9:cbce87f4f21f 79
darrenalilim 9:cbce87f4f21f 80 holdA();
darrenalilim 9:cbce87f4f21f 81
darrenalilim 9:cbce87f4f21f 82 //wait(0.01f);
darrenalilim 9:cbce87f4f21f 83 //wait(2);
darrenalilim 9:cbce87f4f21f 84 }
Ivannrush 8:46eab8a51f91 85 }