Driving
Dependencies: FSR LIS3DH USBDevice mbed
Fork of MMA8452_Demo by
main.cpp@9:cbce87f4f21f, 2017-06-27 (annotated)
- Committer:
- darrenalilim
- Date:
- Tue Jun 27 00:59:52 2017 +0000
- Revision:
- 9:cbce87f4f21f
- Parent:
- 8:46eab8a51f91
Publishing
Who changed what in which revision?
User | Revision | Line number | New 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 | } |