Demonstrates the use of the LPC1114_Deep_Power_Down library with the NOKIA_5110 library

Dependencies:   LPC1114_Deep_Power_Down NOKIA_5110 mbed

Committer:
bundgus
Date:
Tue Jan 13 04:33:15 2015 +0000
Revision:
1:118bef2666a8
Parent:
0:5459444bb4f0
Child:
2:f925ff712f53
changed to use GPRG3 instead of GPRG4 for state

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bundgus 0:5459444bb4f0 1 /*
bundgus 0:5459444bb4f0 2 * LPC1114_5110_PIR
bundgus 0:5459444bb4f0 3 *
bundgus 0:5459444bb4f0 4 * Created on: Dec 26, 2014
bundgus 0:5459444bb4f0 5 * Author: bundgus
bundgus 1:118bef2666a8 6 *
bundgus 0:5459444bb4f0 7 * Demonstrates the use of the LPC1114_Deep_Power_Down library with the NOKIA_5110 library
bundgus 0:5459444bb4f0 8 */
bundgus 0:5459444bb4f0 9
bundgus 0:5459444bb4f0 10 #include "mbed.h"
bundgus 0:5459444bb4f0 11 #include "DeepPowerDown.h"
bundgus 0:5459444bb4f0 12 #include "NOKIA_5110.h"
bundgus 0:5459444bb4f0 13 #include <string>
bundgus 0:5459444bb4f0 14
bundgus 1:118bef2666a8 15 #define startup_countdown 10
bundgus 0:5459444bb4f0 16
bundgus 0:5459444bb4f0 17 // high-level hardware interfaces
bundgus 0:5459444bb4f0 18 DeepPowerDown pd;
bundgus 1:118bef2666a8 19 LcdPins myLcdPins = { dp2, NC, dp6, dp26, dp25, dp24 }; // mosi, miso, sclk, dc, sce, rst
bundgus 0:5459444bb4f0 20 NokiaLcd myLcd( myLcdPins );
bundgus 0:5459444bb4f0 21 DigitalOut backlight(dp14);
bundgus 1:118bef2666a8 22 AnalogIn vref(dp9);
bundgus 1:118bef2666a8 23 AnalogIn vbat(dp10);
bundgus 1:118bef2666a8 24 DigitalIn personPIR(dp11);
bundgus 0:5459444bb4f0 25
bundgus 1:118bef2666a8 26 void startup()
bundgus 1:118bef2666a8 27 {
bundgus 1:118bef2666a8 28 // Turn on LCD Backlight
bundgus 0:5459444bb4f0 29 backlight = 1;
bundgus 1:118bef2666a8 30
bundgus 0:5459444bb4f0 31 // Start the LCD
bundgus 0:5459444bb4f0 32 myLcd.InitLcd();
bundgus 1:118bef2666a8 33 myLcd.ClearLcdMem();
bundgus 1:118bef2666a8 34 }
bundgus 1:118bef2666a8 35
bundgus 1:118bef2666a8 36 void shutdown()
bundgus 1:118bef2666a8 37 {
bundgus 1:118bef2666a8 38 myLcd.ShutdownLcd();
bundgus 1:118bef2666a8 39 backlight = 0;
bundgus 1:118bef2666a8 40 pd.powerDown();
bundgus 0:5459444bb4f0 41 }
bundgus 0:5459444bb4f0 42
bundgus 1:118bef2666a8 43 void s_firstRun()
bundgus 1:118bef2666a8 44 {
bundgus 1:118bef2666a8 45 pd.setGPREG3(1); // set next startup state to motionWake
bundgus 1:118bef2666a8 46 myLcd.SetXY(0,2);
bundgus 1:118bef2666a8 47 myLcd.DrawString(" Arming in ");
bundgus 1:118bef2666a8 48
bundgus 1:118bef2666a8 49 char cd_c[14];
bundgus 1:118bef2666a8 50
bundgus 1:118bef2666a8 51 for (int cd = startup_countdown; cd>0 ; cd--) {
bundgus 1:118bef2666a8 52 myLcd.SetXY(0,3);
bundgus 1:118bef2666a8 53 myLcd.DrawString(" ");
bundgus 1:118bef2666a8 54 if (cd < 10) {
bundgus 1:118bef2666a8 55 myLcd.DrawString("0");
bundgus 1:118bef2666a8 56 }
bundgus 1:118bef2666a8 57 sprintf (cd_c, "%ld", cd);
bundgus 1:118bef2666a8 58 myLcd.DrawString(cd_c);
bundgus 1:118bef2666a8 59 myLcd.SetXY(0,4);
bundgus 1:118bef2666a8 60 myLcd.DrawString(" seconds ");
bundgus 1:118bef2666a8 61 wait_ms(1000);
bundgus 1:118bef2666a8 62 }
bundgus 0:5459444bb4f0 63 }
bundgus 0:5459444bb4f0 64
bundgus 1:118bef2666a8 65 void s_motionWake()
bundgus 1:118bef2666a8 66 {
bundgus 1:118bef2666a8 67
bundgus 1:118bef2666a8 68 // check a few times to make sure there isn't a delay with the person PIR after the dog PIR is triggered
bundgus 1:118bef2666a8 69 int persondetected = 3;
bundgus 1:118bef2666a8 70 while (persondetected > 0) {
bundgus 1:118bef2666a8 71 if (personPIR.read() == 1) {
bundgus 1:118bef2666a8 72 break;
bundgus 1:118bef2666a8 73 }
bundgus 1:118bef2666a8 74 wait_ms(500);
bundgus 1:118bef2666a8 75 persondetected --;
bundgus 1:118bef2666a8 76 }
bundgus 1:118bef2666a8 77
bundgus 1:118bef2666a8 78 myLcd.SetXY(0,0);
bundgus 1:118bef2666a8 79 if (persondetected > 0) {
bundgus 1:118bef2666a8 80 myLcd.DrawString(" PERSON");
bundgus 1:118bef2666a8 81 pd.setGPREG1(pd.getGPREG1() + 1);
bundgus 1:118bef2666a8 82 } else {
bundgus 1:118bef2666a8 83 myLcd.DrawString(" DOG");
bundgus 1:118bef2666a8 84 pd.setGPREG0(pd.getGPREG0() + 1);
bundgus 1:118bef2666a8 85 }
bundgus 1:118bef2666a8 86
bundgus 1:118bef2666a8 87 unsigned int dogct = pd.getGPREG0();
bundgus 1:118bef2666a8 88 unsigned int personct = pd.getGPREG1();
bundgus 0:5459444bb4f0 89
bundgus 1:118bef2666a8 90 myLcd.SetXY(0,1);
bundgus 1:118bef2666a8 91 myLcd.DrawString(" DETECTED ");
bundgus 1:118bef2666a8 92 // buffer for gpr 0-4 register string values - 84 columns / 6 columns per char = 14
bundgus 1:118bef2666a8 93 char gpreg0_c[14];
bundgus 1:118bef2666a8 94
bundgus 1:118bef2666a8 95 sprintf (gpreg0_c, "%ld", dogct);
bundgus 1:118bef2666a8 96 //myLcd.SetXY(42-((int)log10((float)dogct) + 1)*3,2);
bundgus 1:118bef2666a8 97 myLcd.SetXY(0,2);
bundgus 1:118bef2666a8 98 myLcd.DrawString("dog: ");
bundgus 1:118bef2666a8 99 myLcd.DrawString(gpreg0_c);
bundgus 1:118bef2666a8 100
bundgus 1:118bef2666a8 101 sprintf (gpreg0_c, "%ld", personct);
bundgus 1:118bef2666a8 102 myLcd.SetXY(0,3);
bundgus 1:118bef2666a8 103 myLcd.DrawString("person: ");
bundgus 1:118bef2666a8 104 myLcd.DrawString(gpreg0_c);
bundgus 1:118bef2666a8 105
bundgus 1:118bef2666a8 106 // analog reading for voltage reference
bundgus 1:118bef2666a8 107 sprintf (gpreg0_c, "%1.2f", 1.235/vref.read());
bundgus 1:118bef2666a8 108 myLcd.SetXY(0,5);
bundgus 1:118bef2666a8 109 myLcd.DrawString("battery: ");
bundgus 1:118bef2666a8 110 myLcd.DrawString(gpreg0_c);
bundgus 1:118bef2666a8 111 myLcd.DrawString("v");
bundgus 1:118bef2666a8 112
bundgus 1:118bef2666a8 113 wait_ms(10000);
bundgus 1:118bef2666a8 114
bundgus 0:5459444bb4f0 115
bundgus 0:5459444bb4f0 116 }
bundgus 0:5459444bb4f0 117
bundgus 1:118bef2666a8 118 int main(void)
bundgus 1:118bef2666a8 119 {
bundgus 1:118bef2666a8 120 unsigned int GPREG3_i = pd.getGPREG3(); // GPREG3 = next application start state
bundgus 1:118bef2666a8 121
bundgus 1:118bef2666a8 122 startup();
bundgus 1:118bef2666a8 123
bundgus 1:118bef2666a8 124 switch(GPREG3_i) {
bundgus 1:118bef2666a8 125 case 0 :
bundgus 1:118bef2666a8 126 s_firstRun();
bundgus 1:118bef2666a8 127 break;
bundgus 1:118bef2666a8 128 case 1 :
bundgus 1:118bef2666a8 129 s_motionWake();
bundgus 1:118bef2666a8 130 break;
bundgus 1:118bef2666a8 131 default : /* Optional */
bundgus 1:118bef2666a8 132 break;// unknown state
bundgus 1:118bef2666a8 133 }
bundgus 1:118bef2666a8 134
bundgus 1:118bef2666a8 135 shutdown();
bundgus 0:5459444bb4f0 136 }
bundgus 0:5459444bb4f0 137
bundgus 0:5459444bb4f0 138
bundgus 0:5459444bb4f0 139