Final Edit
Dependencies: 4DGL-uLCD-SE LSM9DS1_Library_cal SDFileSystem mbed wave_player
Fork of 4180Lab_4 by
main.cpp@3:6714b95437b0, 2016-11-02 (annotated)
- Committer:
- Priunsh_N
- Date:
- Wed Nov 02 21:50:44 2016 +0000
- Revision:
- 3:6714b95437b0
- Parent:
- 2:c7779da25bdb
Final Edit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rmaran6 | 0:2b0c527942db | 1 | #include "mbed.h" |
Priunsh_N | 2:c7779da25bdb | 2 | #include "uLCD_4DGL.h" |
Priunsh_N | 1:bbd83a3a8372 | 3 | #include "Webpage.h" |
rmaran6 | 0:2b0c527942db | 4 | #include "LSM9DS1.h" |
rmaran6 | 0:2b0c527942db | 5 | #include "playSound.h" |
rmaran6 | 0:2b0c527942db | 6 | #include "SDFileSystem.h" |
rmaran6 | 0:2b0c527942db | 7 | #include "wave_player.h" |
rmaran6 | 0:2b0c527942db | 8 | #define PI 3.14159 |
rmaran6 | 0:2b0c527942db | 9 | #define DECLINATION -4.94 // Declination (degrees) in Atlanta,GA. |
Priunsh_N | 2:c7779da25bdb | 10 | |
rmaran6 | 0:2b0c527942db | 11 | //DigitalIn pb1(p29); |
rmaran6 | 0:2b0c527942db | 12 | //DigitalIn pb2(p30); |
Priunsh_N | 2:c7779da25bdb | 13 | float TOL = 0.10; |
Priunsh_N | 2:c7779da25bdb | 14 | int AWAKE_TOL = 4; |
Priunsh_N | 2:c7779da25bdb | 15 | int MAX_AWAKE = 20; |
rmaran6 | 0:2b0c527942db | 16 | |
rmaran6 | 0:2b0c527942db | 17 | Serial pc(USBTX, USBRX); |
rmaran6 | 0:2b0c527942db | 18 | PwmOut red(p22); |
rmaran6 | 0:2b0c527942db | 19 | PwmOut green(p23); |
rmaran6 | 0:2b0c527942db | 20 | PwmOut blue(p24); |
Priunsh_N | 2:c7779da25bdb | 21 | uLCD_4DGL uLCD(p28, p27, p30); |
Priunsh_N | 2:c7779da25bdb | 22 | SDFileSystem sd(p11, p12, p13, p14, "sd"); |
Priunsh_N | 2:c7779da25bdb | 23 | Webpage page(p28, p27); |
rmaran6 | 0:2b0c527942db | 24 | LSM9DS1 IMU(p9, p10, 0xD6, 0x3C); |
rmaran6 | 0:2b0c527942db | 25 | AnalogOut DACout(p18); |
rmaran6 | 0:2b0c527942db | 26 | wave_player player(&DACout); |
Priunsh_N | 2:c7779da25bdb | 27 | |
Priunsh_N | 2:c7779da25bdb | 28 | bool awake; |
Priunsh_N | 2:c7779da25bdb | 29 | bool isMoving; |
Priunsh_N | 2:c7779da25bdb | 30 | int awakeLevel; |
Priunsh_N | 2:c7779da25bdb | 31 | float prevAccx, prevAccy, prevAccz; |
Priunsh_N | 2:c7779da25bdb | 32 | void initMain(); |
Priunsh_N | 2:c7779da25bdb | 33 | |
Priunsh_N | 2:c7779da25bdb | 34 | |
rmaran6 | 0:2b0c527942db | 35 | //playSound("/sd/wavfiles/BUZZER.wav"); |
rmaran6 | 0:2b0c527942db | 36 | |
rmaran6 | 0:2b0c527942db | 37 | int main() { |
Priunsh_N | 2:c7779da25bdb | 38 | page.init(); |
Priunsh_N | 2:c7779da25bdb | 39 | initMain(); |
Priunsh_N | 2:c7779da25bdb | 40 | |
Priunsh_N | 2:c7779da25bdb | 41 | IMU.begin(); |
Priunsh_N | 2:c7779da25bdb | 42 | initMain(); |
Priunsh_N | 2:c7779da25bdb | 43 | |
Priunsh_N | 2:c7779da25bdb | 44 | while(1) { |
Priunsh_N | 2:c7779da25bdb | 45 | while(!IMU.accelAvailable()); |
Priunsh_N | 2:c7779da25bdb | 46 | IMU.readAccel(); |
Priunsh_N | 2:c7779da25bdb | 47 | //pc.printf("accel: %9f %9f %9f in gs\n\r", IMU.calcAccel(IMU.ax) - prevAccx, IMU.calcAccel(IMU.ay)- prevAccy, IMU.calcAccel(IMU.az)- prevAccz); |
Priunsh_N | 2:c7779da25bdb | 48 | isMoving = (abs(IMU.calcAccel(IMU.ax)- prevAccx) > TOL) |
Priunsh_N | 2:c7779da25bdb | 49 | || (abs(IMU.calcAccel(IMU.ay) - prevAccy) > TOL) |
Priunsh_N | 2:c7779da25bdb | 50 | || (abs(IMU.calcAccel(IMU.az) - prevAccz) > TOL); |
Priunsh_N | 2:c7779da25bdb | 51 | |
Priunsh_N | 2:c7779da25bdb | 52 | if (isMoving) { |
Priunsh_N | 2:c7779da25bdb | 53 | if (awakeLevel < MAX_AWAKE) { |
Priunsh_N | 2:c7779da25bdb | 54 | awakeLevel++; |
Priunsh_N | 2:c7779da25bdb | 55 | } |
Priunsh_N | 2:c7779da25bdb | 56 | } else { |
Priunsh_N | 2:c7779da25bdb | 57 | if (awakeLevel > 0) { |
Priunsh_N | 2:c7779da25bdb | 58 | awakeLevel--; |
Priunsh_N | 2:c7779da25bdb | 59 | } |
Priunsh_N | 2:c7779da25bdb | 60 | } |
Priunsh_N | 2:c7779da25bdb | 61 | |
Priunsh_N | 2:c7779da25bdb | 62 | pc.printf("Moving = %d\n", isMoving); |
Priunsh_N | 2:c7779da25bdb | 63 | pc.printf("Awake = %d\n", awake); |
Priunsh_N | 2:c7779da25bdb | 64 | pc.printf("Activity = %d\n", awakeLevel); |
Priunsh_N | 2:c7779da25bdb | 65 | |
Priunsh_N | 2:c7779da25bdb | 66 | if (awakeLevel > AWAKE_TOL) { |
Priunsh_N | 2:c7779da25bdb | 67 | if (!awake) page.updateOutput(9001); |
Priunsh_N | 2:c7779da25bdb | 68 | awake = true; |
Priunsh_N | 2:c7779da25bdb | 69 | pc.printf("A\n"); |
Priunsh_N | 2:c7779da25bdb | 70 | } else { |
Priunsh_N | 2:c7779da25bdb | 71 | if (awake) page.updateOutput(0); |
Priunsh_N | 2:c7779da25bdb | 72 | pc.printf("B\n"); |
Priunsh_N | 2:c7779da25bdb | 73 | awake = false; |
Priunsh_N | 2:c7779da25bdb | 74 | } |
Priunsh_N | 2:c7779da25bdb | 75 | |
Priunsh_N | 2:c7779da25bdb | 76 | prevAccx = IMU.calcAccel(IMU.ax); |
Priunsh_N | 2:c7779da25bdb | 77 | prevAccy = IMU.calcAccel(IMU.ay); |
Priunsh_N | 2:c7779da25bdb | 78 | prevAccz = IMU.calcAccel(IMU.az); |
Priunsh_N | 2:c7779da25bdb | 79 | |
Priunsh_N | 2:c7779da25bdb | 80 | page.update(); |
Priunsh_N | 2:c7779da25bdb | 81 | if (page.getPlay()) playSound("/sd/Sleep.wav"); |
Priunsh_N | 2:c7779da25bdb | 82 | |
Priunsh_N | 2:c7779da25bdb | 83 | wait(0.8); |
Priunsh_N | 2:c7779da25bdb | 84 | //pc.printf("mag: %9f %9f %9f in gauss\n\r", IMU.calcAccel(IMU.ax), IMU.calcAccel(IMU.ay), IMU.calcAccel(IMU.az)); |
Priunsh_N | 2:c7779da25bdb | 85 | } |
Priunsh_N | 2:c7779da25bdb | 86 | } |
Priunsh_N | 2:c7779da25bdb | 87 | |
Priunsh_N | 2:c7779da25bdb | 88 | void initMain() { |
Priunsh_N | 2:c7779da25bdb | 89 | awake = false; |
Priunsh_N | 2:c7779da25bdb | 90 | isMoving = false; |
Priunsh_N | 2:c7779da25bdb | 91 | awakeLevel = 0; |
rmaran6 | 0:2b0c527942db | 92 | if (!IMU.begin()) { |
rmaran6 | 0:2b0c527942db | 93 | pc.printf("Failed to communicate with LSM9DS1.\n"); |
rmaran6 | 0:2b0c527942db | 94 | } |
rmaran6 | 0:2b0c527942db | 95 | IMU.calibrate(1); |
Priunsh_N | 2:c7779da25bdb | 96 | while(!IMU.gyroAvailable()); |
Priunsh_N | 2:c7779da25bdb | 97 | IMU.readGyro(); |
Priunsh_N | 2:c7779da25bdb | 98 | prevAccx = IMU.calcAccel(IMU.ax); |
Priunsh_N | 2:c7779da25bdb | 99 | prevAccy = IMU.calcAccel(IMU.ay); |
Priunsh_N | 2:c7779da25bdb | 100 | prevAccz = IMU.calcAccel(IMU.az); |
Priunsh_N | 2:c7779da25bdb | 101 | } |
rmaran6 | 0:2b0c527942db | 102 |