Demonstrates the use of the LPC1114_Deep_Power_Down library with the NOKIA_5110 library
Dependencies: LPC1114_Deep_Power_Down NOKIA_5110 mbed
main.cpp@1:118bef2666a8, 2015-01-13 (annotated)
- 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?
User | Revision | Line number | New 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 |