Demonstrates the use of the LPC1114_Deep_Power_Down library with the NOKIA_5110 library

Dependencies:   LPC1114_Deep_Power_Down NOKIA_5110 mbed

Revision:
1:118bef2666a8
Parent:
0:5459444bb4f0
Child:
2:f925ff712f53
diff -r 5459444bb4f0 -r 118bef2666a8 main.cpp
--- a/main.cpp	Sat Jan 03 17:33:30 2015 +0000
+++ b/main.cpp	Tue Jan 13 04:33:15 2015 +0000
@@ -3,7 +3,7 @@
  *
  *  Created on: Dec 26, 2014
  *      Author: bundgus
- *	
+ *
  *	Demonstrates the use of the LPC1114_Deep_Power_Down library with the NOKIA_5110 library
  */
 
@@ -12,89 +12,127 @@
 #include "NOKIA_5110.h"
 #include <string>
 
-#define startup_countdown 5
+#define startup_countdown 10
 
 // high-level hardware interfaces
 DeepPowerDown pd;
-LcdPins myLcdPins = { dp2, NC, dp6, dp4, dp5, dp1 };  // mosi, miso, sclk, dc, sce, rst
+LcdPins myLcdPins = { dp2, NC, dp6, dp26, dp25, dp24 };  // mosi, miso, sclk, dc, sce, rst
 NokiaLcd myLcd( myLcdPins );
 DigitalOut backlight(dp14);
+AnalogIn vref(dp9);
+AnalogIn vbat(dp10);
+DigitalIn personPIR(dp11);
 
-void startup(){
-	// Turn on LCD Backlight
+void startup()
+{
+    // Turn on LCD Backlight
     backlight = 1;
-    
+
     // Start the LCD
     myLcd.InitLcd();
-	myLcd.ClearLcdMem();
+    myLcd.ClearLcdMem();
+}
+
+void shutdown()
+{
+    myLcd.ShutdownLcd();
+    backlight = 0;
+    pd.powerDown();
 }
 
-void shutdown(){
-	myLcd.ShutdownLcd();
-	backlight = 0;
-	pd.powerDown();
+void s_firstRun()
+{
+    pd.setGPREG3(1); // set next startup state to motionWake
+    myLcd.SetXY(0,2);
+    myLcd.DrawString("   Arming in  ");
+
+    char cd_c[14];
+
+    for (int cd = startup_countdown; cd>0 ; cd--) {
+        myLcd.SetXY(0,3);
+        myLcd.DrawString("      ");
+        if (cd < 10) {
+            myLcd.DrawString("0");
+        }
+        sprintf (cd_c, "%ld", cd);
+        myLcd.DrawString(cd_c);
+        myLcd.SetXY(0,4);
+        myLcd.DrawString("   seconds    ");
+        wait_ms(1000);
+    }
 }
 
-void s_firstRun(){
-	pd.setGPREG4(1); // set next startup state to motionWake
-	myLcd.SetXY(0,2);
-	myLcd.DrawString("   Arming in  ");
-	
-	char cd_c[14];
-	
-	for (int cd = startup_countdown; cd>0 ; cd--){
-		myLcd.SetXY(0,3);
-		myLcd.DrawString("      ");
-		if (cd < 10){
-			myLcd.DrawString("0");
-			}
-		sprintf (cd_c, "%ld", cd);
-		myLcd.DrawString(cd_c);
-		myLcd.SetXY(0,4);
-		myLcd.DrawString("   seconds    ");
-		wait_ms(1000);
-	}
-}
+void s_motionWake()
+{
+
+    // check a few times to make sure there isn't a delay with the person PIR after the dog PIR is triggered
+    int persondetected = 3;
+    while (persondetected > 0) {
+        if (personPIR.read() == 1) {
+            break;
+        }
+        wait_ms(500);
+        persondetected --;
+    }
+
+    myLcd.SetXY(0,0);
+    if (persondetected > 0) {
+        myLcd.DrawString("    PERSON");
+        pd.setGPREG1(pd.getGPREG1() + 1);
+    } else {
+        myLcd.DrawString("     DOG");
+        pd.setGPREG0(pd.getGPREG0() + 1);
+    }
+
+    unsigned int dogct = pd.getGPREG0();
+    unsigned int personct = pd.getGPREG1();
 
-void s_motionWake(){
-	myLcd.SetXY(0,0);
-	myLcd.DrawString("    MOTION    ");
-	myLcd.DrawString("   DETECTED   ");
-	// buffer for gpr 0-4 register string values - 84 columns / 6 columns per char = 14
-	char gpreg0_c[14];  
-	
-	unsigned int gpreg0_i = pd.getGPREG0();
-	
-	sprintf (gpreg0_c, "%ld", gpreg0_i);   
-	
-	myLcd.SetXY(42-((int)log10((float)gpreg0_i) + 1)*3,2);
-	myLcd.DrawString(gpreg0_c);
-	
-	myLcd.SetXY(0,3);
-	myLcd.DrawString("    TIMES     ");
-	
-	wait_ms(20000);
-	pd.setGPREG0(gpreg0_i + 1);
+    myLcd.SetXY(0,1);
+    myLcd.DrawString("   DETECTED   ");
+    // buffer for gpr 0-4 register string values - 84 columns / 6 columns per char = 14
+    char gpreg0_c[14];
+
+    sprintf (gpreg0_c, "%ld", dogct);
+    //myLcd.SetXY(42-((int)log10((float)dogct) + 1)*3,2);
+    myLcd.SetXY(0,2);
+    myLcd.DrawString("dog: ");
+    myLcd.DrawString(gpreg0_c);
+
+    sprintf (gpreg0_c, "%ld", personct);
+    myLcd.SetXY(0,3);
+    myLcd.DrawString("person: ");
+    myLcd.DrawString(gpreg0_c);
+
+    // analog reading for voltage reference
+    sprintf (gpreg0_c, "%1.2f", 1.235/vref.read());
+    myLcd.SetXY(0,5);
+    myLcd.DrawString("battery: ");
+    myLcd.DrawString(gpreg0_c);
+    myLcd.DrawString("v");
+
+    wait_ms(10000);
+
 
 }
 
-int main(void) {
-	unsigned int gpreg4_i = pd.getGPREG4();  // gpreg4 = next application start state
-	
-	startup();
-	
-	switch(gpreg4_i){
-    case 0 :
-       s_firstRun();
-       break;
-    case 1 :
-       s_motionWake();
-       break;
-    default : /* Optional */
-       break;// unknown state
-	}
-	
-	shutdown();
+int main(void)
+{
+    unsigned int GPREG3_i = pd.getGPREG3();  // GPREG3 = next application start state
+
+    startup();
+
+    switch(GPREG3_i) {
+        case 0 :
+            s_firstRun();
+            break;
+        case 1 :
+            s_motionWake();
+            break;
+        default : /* Optional */
+            break;// unknown state
+    }
+
+    shutdown();
 }