Project 1 Self-powered Health & Security Monitoring System USB device
Dependencies: C12832_lcd LM75B MMA7660 USBDevice mbed
Revision 2:07c9334e3088, committed 2014-03-28
- Comitter:
- wane
- Date:
- Fri Mar 28 19:11:47 2014 +0000
- Parent:
- 1:930838234048
- Commit message:
- Updated comments.
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 930838234048 -r 07c9334e3088 main.cpp --- a/main.cpp Fri Mar 28 18:19:54 2014 +0000 +++ b/main.cpp Fri Mar 28 19:11:47 2014 +0000 @@ -22,45 +22,63 @@ // terminal. Motion alarm will continue to be on until the passcode // is entered. // -// An external buzzer is used and connected at P21 and ground. +// Set-up: +// - An external buzzer is used and connected at P21 and ground. +// - To be connected to debug serial terminal +// - Connect to a host as device // // Controls: -// Joystick DOWN - Switch between Test and Operational mode -// Joystick LEFT - Turn Temperature monitoring on and off -// Joystick UP - Turn Motion monitoring on. Increase sensitivity -// level as further push. S1-Low S2-Medium S3-High -// Joystick RIGHT- Lock and unlock USB device. Enter passcode -// at first locking device. -// Pot1 - Lower bound temerature (for debugging) -// Pot2 - Higher bound temperature (for debugging) -// Fire - Input a simulated air temperature (for debugging) +// Joystick DOWN - Switch between Test and Operational mode +// Joystick LEFT - Turn Temperature monitoring on and off +// Joystick UP - Turn Motion monitoring on. Increase sensitivity +// level as further push. S1-Low S2-Medium S3-High +// Joystick RIGHT- Lock and unlock USB device. Enter passcode +// at first locking device. +// Pot1 - Lower bound temerature (for debugging) +// Pot2 - Higher bound temperature (for debugging) +// Fire - Input a simulated air temperature (for debugging) // // Output: -// LED1 - USB Connection -// LED2 - Lock Status (On-Lock Off-Unlocked) -// LED3 - Alarm Status - Temperature -// LED4 - Alarm Status - Motion -// Buzzer - Temperature alarm beeps in lower frequency +// LED1 - USB Connection +// LED2 - Lock Status (On-Lock Off-Unlocked) +// LED3 - Alarm Status - Temperature +// LED4 - Alarm Status - Motion +// Buzzer - Temperature alarm beeps in lower frequency // Motion alarm beeps in relatively higher frequency -// -// History -/* 241: Added temp alarm - 251: Added motion alarm, sensitivity level - Validated alarm status handling - 252: Added lock, passcode control, mode (T-Testing; O-Operational) - 261: Added non-blocking serial entry +// LCD Key: +// Now - Current temperature +// L - Lower bound temperature +// U - Upper bound temperature +// Mode: T-Test mode O-Operational mode +// H-Temperature Monitoring +// S1 - Security (Low sensitivity) +// S2 - Security (Mid sensitivity) +// S3 - Security (High sensitivity) +// Status: +// L - Device in locked (Unlocked if disappeared) +// A - Alarm on (No alarm if disappeared) +/* +History: + Version 1.0 + 241: Added temp alarm + 251: Added motion alarm, sensitivity level + Validated alarm status handling + 252: Added lock, passcode control, mode (T-Testing; O-Operational) + 261: Added non-blocking serial entry TO-FIX: - 1. To complete USB connection detection. Currently, system stalls - or fails to respond when detached from a USB host. + 1. To set up a standalone device. Currently, device is not in + operation until connected to a host + 2. To complete USB connection detection. Currently, system stalls + or fails to respond when detached from a USB host. TO-DO: - 1. Add menu display with LCD - 2. Add data entry with LCD (without using serial) - 3. Add file system that there can record events and save into files - 4. Add capability to report to user remotely - 5. Add to record and report sound once security is breached. - 6. Add to record GPS data and report back + 1. Add menu display with LCD + 2. Add data entry with LCD (without using serial) + 3. Add file system that there can record events and save into files + 4. Add capability to report to user remotely + 5. Add to record and report sound once security is breached. + 6. Add to record GPS data and report back */ @@ -103,7 +121,6 @@ InterruptIn IRQJoyDown(p12); InterruptIn IRQJoyLeft(p13); InterruptIn IRQJoyRight(p16); -//DigitalIn fire(p14); InterruptIn IRQFire(p14); Serial pc(USBTX, USBRX); // tx, rx @@ -113,35 +130,23 @@ MMA7660 MMA(p28, p27); DigitalOut connectionLed(LED1); DigitalOut lockLed(LED2); -//PwmOut Xaxis_p(LED2); //BusOut leds(LED3,LED4); //DigitalOut ledTAlarm(LED3); //DigitalOut ledSAlarm(LED4); +PwmOut ledTAlarm(LED3); PwmOut ledSAlarm(LED4); -PwmOut ledTAlarm(LED3); + -// Gobal parameters -float setUpperTemp; // Upper bound of temperature monitoring range -float setLowerTemp; // Lower bound of temperature monitoring range -bool sAlarmOn; // State of alarm -int statusAlarm; // Status indicating whether health or/and security alarm is triggered +// Global backend variables +float setUpperTemp; // Upper bound of temperature monitoring range +float setLowerTemp; // Lower bound of temperature monitoring range +bool sAlarmOn; // State of alarm +int statusAlarm; // Status indicating whether health or/and security alarm is triggered bool sHealthFeatureActive; // State indicating temperature monitoring is activated bool sSecurityFeatureActive; // State indicating motion monitoring is activated -bool sLockActive; // State indicating lock is active -char sState; // security setting state -char gState; // Global state -int buzzPattern; -float buzzPeriod; -Ticker timer1; -Ticker timer3; -Ticker timer4; -Timer timer2; -Ticker ticAlarm; -bool first; -int count; -bool activated; // for debounce fire -time_t yet; -time_t now; +bool sLockActive; // State indicating lock is active +char sState; // security setting state +char gState; // Global state int alarmType; // 0 - Health; 1 - Security char senLevel; // Sensitivity level of motion alarm int mode; // Operation mode: @@ -149,26 +154,41 @@ // 1 = Lock mode (lock and unlock device) int passcode; // 4-digit passcode for lock and unlock bool sPCOK; // state indicating a valid passcode is existing +float lowerTempBase; // Simulated lower bound temperature +float upperTempBase; // Simulated upper bound temperature +float temp; // Current temperature + +// Global frontend variables +int buzzPattern; +float buzzPeriod; +Ticker timer1; // For LCD display +Ticker timer3; // For debouncer +Ticker timer4; // TBU +Timer timer2; // For tracking temperature alarm +bool activated; // for debounce fire +time_t yet; // For debounce time tracking +time_t now; // For debounce time tracking bool updateCurTempDisplay; bool updateJoyDisplay; bool tempOverride; -float lowerTempBase; // For simulated lower bound temperature -float upperTempBase; // For simulated upper bound temperature -float temp; bool entryReady; // For tracking if user input is comlete unsigned char entryState; // State tracking input entry char inBuf[128]; // Input buffer char pos; // Gobal buffer index - +int tol; // Tolerance float timeElapsed; time_t seconds; - float potBase1; float potBase2; +#ifdef C +#define deg 'C' +#else +#define deg 'F' +#endif typedef struct { bool active; @@ -225,9 +245,8 @@ if (!activated && now > yet) { tempOverride = !tempOverride; - //EnterTemp(); if (tempOverride) - gState = 3; + gState = 3; // EnterTemp yet = now + 1; activated = true; } @@ -236,6 +255,8 @@ // ISR for joystick up direction +// Turn on motion detection feature. Continue to push to increase motion +// detection sensitivity. void ISRJoyUp() { now = time(NULL); @@ -251,6 +272,7 @@ } // ISR for joystick down direction +// Switch mode between Test and Operational void ISRJoyDown() { now = time(NULL); @@ -263,6 +285,7 @@ } // ISR for joystick left direction +// Turn temperature monitoring feature on and off void ISRJoyLeft() { now = time(NULL); @@ -275,6 +298,7 @@ } // ISR for joystick right direction +// Lock and unlock device void ISRJoyRight() { now = time(NULL); @@ -282,9 +306,9 @@ if (mode == 1) { if (!sLockActive) - gState = 1; + gState = 1; // SetPasscode else - gState = 2; + gState = 2; // UnlockPasscode } yet = now + 1; activated = true; @@ -324,7 +348,7 @@ } } -// Turn on led in different patterns +// Turn on LEDs and operate in different frequency void ledOn(int type, float period) { switch (type) { @@ -361,6 +385,7 @@ // For testing buzzer. void buzzTest() { + int count = 0; sAlarmOn = OFF; timer1.attach(&debounce, 1); @@ -388,7 +413,7 @@ } -// Set date and time +// Set date and time at LCD display // Input: Year, month, date, hour, minute, second void SetTime(int year, int month, int date, int hour, int min, int sec) { @@ -422,50 +447,6 @@ } -// Non-blockingly innput a simulated temperature -// Input: None -bool EnterTemp() -{ - int i; - bool done = false; - - switch (entryState) - { - case 0: - break; - case 1: - pc.printf("\n\rEnter a simulated temperature: "); - entryReady = false; - entryState = 2; - break; - case 2: - peepEntry(); - if (!entryReady) - break; - else - entryState = 3; - case 3: - sscanf(inBuf, "%d", &i); - if (i < 0 || i >= 100) { - printf("\n\rEnter a temperature between 0F and 100F: "); - entryReady = false; - entryState = 2; - break; - } else { - temp = i; - printf("Current temperature is now %dF.\n\r", i); - updateCurTempDisplay = true; - entryState = 1; - done = true; - calibratePot(); - break; - } - - - } - return done; - -} // Peep uart buffer if serial data is available for read // Return the entry when hit ENTER button @@ -607,6 +588,51 @@ return done; } +// Non-blockingly innput a simulated temperature +// Input: None +bool EnterTemp() +{ + int i; + bool done = false; + + switch (entryState) + { + case 0: + break; + case 1: + pc.printf("\n\rEnter a simulated temperature: "); + entryReady = false; + entryState = 2; + break; + case 2: + peepEntry(); + if (!entryReady) + break; + else + entryState = 3; + case 3: + sscanf(inBuf, "%d", &i); + if (i < 0 || i >= 100) { + printf("\n\rEnter a temperature between 0F and 100F: "); + entryReady = false; + entryState = 2; + break; + } else { + temp = i; + printf("Current temperature is now %dF.\n\r", i); + updateCurTempDisplay = true; + entryState = 1; + done = true; + calibratePot(); + break; + } + + + } + return done; + +} + // Check if USB is connected // To read lock status: bit0=NUM_LOCK bit1=CAP_LOCK bit2=SCROLL_LOCK // To check, either check if keyCode returns OK or status led is signaled. @@ -615,7 +641,6 @@ void USBConnCheck() { char status = 0; - char result; //if (!(statusAlarm & 0x80000000)) //{ @@ -629,15 +654,12 @@ if (!(statusAlarm & 0x80000000) && (status & 0x2)) { statusAlarm |= 0x80000000; - result = true; } else if ((statusAlarm & 0x80000000) && !(status & 0x2)) { statusAlarm &= 0x7FFFFFFF; - result = false; } //printf("2: lockStatus = 0x%x statusAlarm = 0x%x\n\r", status, statusAlarm); - //return result; } @@ -793,7 +815,7 @@ } -// Initialize settings +// Initialize settings void Init(void) { SetTime(YEAR, MONTH, DATE, HOUR, MIN, 0);