Final Edit

Dependencies:   4DGL-uLCD-SE LSM9DS1_Library_cal SDFileSystem mbed wave_player

Fork of 4180Lab_4 by Rahul Maran

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?

UserRevisionLine numberNew 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