Final Edit

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

Fork of 4180Lab_4 by Rahul Maran

main.cpp

Committer:
Priunsh_N
Date:
2016-11-02
Revision:
3:6714b95437b0
Parent:
2:c7779da25bdb

File content as of revision 3:6714b95437b0:

#include "mbed.h"
#include "uLCD_4DGL.h"
#include "Webpage.h"
#include "LSM9DS1.h"
#include "playSound.h"
#include "SDFileSystem.h"
#include "wave_player.h"
#define PI 3.14159
#define DECLINATION -4.94 // Declination (degrees) in Atlanta,GA.

//DigitalIn pb1(p29);
//DigitalIn pb2(p30);
float TOL = 0.10;
int AWAKE_TOL = 4;
int MAX_AWAKE = 20;

Serial pc(USBTX, USBRX);
PwmOut red(p22);
PwmOut green(p23);
PwmOut blue(p24);
uLCD_4DGL uLCD(p28, p27, p30);
SDFileSystem sd(p11, p12, p13, p14, "sd");
Webpage page(p28, p27);
LSM9DS1 IMU(p9, p10, 0xD6, 0x3C);
AnalogOut DACout(p18);                  
wave_player player(&DACout); 

bool awake; 
bool isMoving;
int awakeLevel;
float prevAccx, prevAccy, prevAccz;
void initMain();


//playSound("/sd/wavfiles/BUZZER.wav");

int main() {
    page.init();
    initMain();
    
    IMU.begin();  
    initMain();
    
    while(1) {
        while(!IMU.accelAvailable());
        IMU.readAccel();
        //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);
        isMoving = (abs(IMU.calcAccel(IMU.ax)- prevAccx) > TOL) 
                || (abs(IMU.calcAccel(IMU.ay) - prevAccy) > TOL) 
                || (abs(IMU.calcAccel(IMU.az) - prevAccz) > TOL);
            
        if (isMoving) {
            if (awakeLevel < MAX_AWAKE) {
                awakeLevel++;
            }
        } else {
            if (awakeLevel > 0) {
                awakeLevel--;
            }
        }
        
        pc.printf("Moving = %d\n", isMoving);
        pc.printf("Awake = %d\n", awake);
        pc.printf("Activity = %d\n", awakeLevel);
        
        if (awakeLevel > AWAKE_TOL) {
            if (!awake) page.updateOutput(9001);
            awake = true;
            pc.printf("A\n");
        } else { 
            if (awake) page.updateOutput(0);
            pc.printf("B\n");
            awake = false;
        }
            
        prevAccx = IMU.calcAccel(IMU.ax);
        prevAccy = IMU.calcAccel(IMU.ay);
        prevAccz = IMU.calcAccel(IMU.az);
        
        page.update();
        if (page.getPlay()) playSound("/sd/Sleep.wav");
        
        wait(0.8);
        //pc.printf("mag:   %9f %9f %9f in gauss\n\r", IMU.calcAccel(IMU.ax), IMU.calcAccel(IMU.ay), IMU.calcAccel(IMU.az));
    }
}

void initMain() {
    awake = false;
    isMoving = false; 
    awakeLevel = 0;
    if (!IMU.begin()) {
        pc.printf("Failed to communicate with LSM9DS1.\n");
    }
    IMU.calibrate(1);
    while(!IMU.gyroAvailable());
    IMU.readGyro();
    prevAccx = IMU.calcAccel(IMU.ax);
    prevAccy = IMU.calcAccel(IMU.ay);
    prevAccz = IMU.calcAccel(IMU.az);
}