Door controller and proximity switch detection.

Dependencies:   mbed-rtos mbed VodafoneUSBModem_bleedingedge

This program takes in a digital input - which is a reed switch for a door - and an output to a relay. The door is open with a simple 'text' to the modem on the USB bus (i used k3770 vodafone dongle).

The door will send an alarm message to your nominated numbers at the start of the program if the door is open without a command being sent.

Very simple - and just meant as a demonstration of how to incorporate GSM/3G functionality to a evice.

Committer:
nherriot
Date:
Sun Sep 16 10:53:33 2012 +0000
Revision:
7:316c2dac06a5
Parent:
6:5a892c3d738e
Child:
8:1b4e84f4c451
changing door controller to sense it's state using the proximity switch

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nherriot 0:5136cdfaebd0 1 /* net_sms_test.cpp */
nherriot 0:5136cdfaebd0 2 /*
nherriot 0:5136cdfaebd0 3 Copyright (C) 2012 ARM Limited.
nherriot 0:5136cdfaebd0 4
nherriot 0:5136cdfaebd0 5 Permission is hereby granted, free of charge, to any person obtaining a copy of
nherriot 0:5136cdfaebd0 6 this software and associated documentation files (the "Software"), to deal in
nherriot 0:5136cdfaebd0 7 the Software without restriction, including without limitation the rights to
nherriot 0:5136cdfaebd0 8 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
nherriot 0:5136cdfaebd0 9 of the Software, and to permit persons to whom the Software is furnished to do
nherriot 0:5136cdfaebd0 10 so, subject to the following conditions:
nherriot 0:5136cdfaebd0 11
nherriot 0:5136cdfaebd0 12 The above copyright notice and this permission notice shall be included in all
nherriot 0:5136cdfaebd0 13 copies or substantial portions of the Software.
nherriot 0:5136cdfaebd0 14
nherriot 0:5136cdfaebd0 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
nherriot 0:5136cdfaebd0 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
nherriot 0:5136cdfaebd0 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
nherriot 0:5136cdfaebd0 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
nherriot 0:5136cdfaebd0 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
nherriot 0:5136cdfaebd0 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
nherriot 0:5136cdfaebd0 21 SOFTWARE.
nherriot 0:5136cdfaebd0 22 */
nherriot 0:5136cdfaebd0 23
nherriot 0:5136cdfaebd0 24 #define __DEBUG__ 4 //Maximum verbosity
nherriot 0:5136cdfaebd0 25 #ifndef __MODULE__
nherriot 6:5a892c3d738e 26 // #define __MODULE__ "net_voda_k3770_test.cpp"
nherriot 0:5136cdfaebd0 27 #endif
nherriot 0:5136cdfaebd0 28
nherriot 0:5136cdfaebd0 29 #define MY_PHONE_NUMBER "+447717275049"
nherriot 0:5136cdfaebd0 30
nherriot 0:5136cdfaebd0 31 #include "core/fwk.h"
nherriot 0:5136cdfaebd0 32 #include "mbed.h"
nherriot 0:5136cdfaebd0 33 #include "rtos.h"
nherriot 6:5a892c3d738e 34 #include "VodafoneK3770.h"
nherriot 0:5136cdfaebd0 35
nherriot 2:bcc9256ecaab 36 #include <string>
nherriot 2:bcc9256ecaab 37
nherriot 0:5136cdfaebd0 38 extern "C" void HardFault_Handler() {
nherriot 0:5136cdfaebd0 39 error("Hard Fault!\n");
nherriot 0:5136cdfaebd0 40 }
nherriot 0:5136cdfaebd0 41
nherriot 7:316c2dac06a5 42 DigitalOut led1(LED1);
nherriot 7:316c2dac06a5 43 DigitalOut led2(LED2);
nherriot 7:316c2dac06a5 44 DigitalOut led3(LED3);
nherriot 7:316c2dac06a5 45 DigitalOut led4(LED4);
nherriot 7:316c2dac06a5 46 DigitalOut doorContactorRelay(p5); // create a digital pin object to control the door contactor relay
nherriot 7:316c2dac06a5 47 DigitalIn doorProximitySwitch(p20); // create a digital pin object to sense door position proximity switch
nherriot 3:0a8eebcb0acf 48
nherriot 0:5136cdfaebd0 49
nherriot 0:5136cdfaebd0 50 void test(void const*) {
nherriot 7:316c2dac06a5 51 VodafoneK3770 connectionManager; // create a connection manager object
nherriot 0:5136cdfaebd0 52
nherriot 1:3c9d0c9dffa4 53 DBG("Hello world and Vodafone K3770 test program!");
nherriot 0:5136cdfaebd0 54
nherriot 7:316c2dac06a5 55 connectionManager.sendSM(MY_PHONE_NUMBER, "Hello from mbed door controller:)");
nherriot 0:5136cdfaebd0 56
nherriot 0:5136cdfaebd0 57 while(true)
nherriot 0:5136cdfaebd0 58 {
nherriot 0:5136cdfaebd0 59 char num[17];
nherriot 7:316c2dac06a5 60 char msg[160];
nherriot 0:5136cdfaebd0 61 size_t count;
nherriot 3:0a8eebcb0acf 62 if (doorOpen)
nherriot 3:0a8eebcb0acf 63 {
nherriot 3:0a8eebcb0acf 64 doorOpen = 0;
nherriot 4:99bbdfe42ae0 65 led3=0;
nherriot 3:0a8eebcb0acf 66
nherriot 3:0a8eebcb0acf 67 }
nherriot 7:316c2dac06a5 68 int ret = connectionManager.getSMCount(&count); // check to see if there is an incoming SMS message
nherriot 0:5136cdfaebd0 69 if(ret)
nherriot 0:5136cdfaebd0 70 {
nherriot 0:5136cdfaebd0 71 WARN("getSMCount returned %d", ret);
nherriot 0:5136cdfaebd0 72 Thread::wait(3000);
nherriot 0:5136cdfaebd0 73 continue;
nherriot 0:5136cdfaebd0 74 }
nherriot 7:316c2dac06a5 75 if( count > 0) // if there are messages in the mailbox start pulling them off the queue
nherriot 0:5136cdfaebd0 76 {
nherriot 0:5136cdfaebd0 77 DBG("%d SMS to read", count);
nherriot 7:316c2dac06a5 78 ret = connectionManager.getSM(num, msg, 64);
nherriot 0:5136cdfaebd0 79 if(ret)
nherriot 0:5136cdfaebd0 80 {
nherriot 0:5136cdfaebd0 81 WARN("getSM returned %d", ret);
nherriot 0:5136cdfaebd0 82 Thread::wait(3000);
nherriot 0:5136cdfaebd0 83 continue;
nherriot 0:5136cdfaebd0 84 }
nherriot 0:5136cdfaebd0 85
nherriot 6:5a892c3d738e 86 DBG("The message is from number: %s and the message is: \"%s\"", num, msg);
nherriot 6:5a892c3d738e 87
nherriot 6:5a892c3d738e 88 if (strcmp (msg, "open") ==0) {
nherriot 2:bcc9256ecaab 89 DBG("The SMS message indicates I should open the door");
nherriot 7:316c2dac06a5 90
nherriot 7:316c2dac06a5 91 // check the door is not already open if it is do nothing and send a warning back to the sender
nherriot 7:316c2dac06a5 92 // for this door the switch 'true' then its closed - we have to have an active signal to show it's securely closed
nherriot 7:316c2dac06a5 93 if ( doorProximitySwitch.read() == 0)
nherriot 7:316c2dac06a5 94 {
nherriot 7:316c2dac06a5 95 DBG("The door is already open - so I'll do nothing");
nherriot 7:316c2dac06a5 96 connectionManager.sendsm(num, " WARNING - The door is already open sir! ");
nherriot 7:316c2dac06a5 97 }
nherriot 7:316c2dac06a5 98 else
nherriot 7:316c2dac06a5 99 {
nherriot 7:316c2dac06a5 100 doorContactorRelay = 1;
nherriot 7:316c2dac06a5 101 led3 = 1;
nherriot 7:316c2dac06a5 102 DBG("The relay has been activated to open the door");
nherriot 7:316c2dac06a5 103 connectionManager.sendsm(num, " Door open sir... Welcome home! " );
nherriot 6:5a892c3d738e 104 } else {
nherriot 2:bcc9256ecaab 105 DBG("The SMS message is not recognized");
nherriot 7:316c2dac06a5 106 connectionManager.sendSM(num, " Wrong password sir... Try 'open' and I'll open! ;-) ");
nherriot 2:bcc9256ecaab 107 }
nherriot 2:bcc9256ecaab 108
nherriot 2:bcc9256ecaab 109
nherriot 2:bcc9256ecaab 110
nherriot 0:5136cdfaebd0 111 }
nherriot 6:5a892c3d738e 112 Thread::wait(500);
nherriot 0:5136cdfaebd0 113 }
nherriot 0:5136cdfaebd0 114
nherriot 0:5136cdfaebd0 115 }
nherriot 0:5136cdfaebd0 116
nherriot 0:5136cdfaebd0 117 void keepAlive(void const*) {
nherriot 0:5136cdfaebd0 118 while(1)
nherriot 0:5136cdfaebd0 119 {
nherriot 0:5136cdfaebd0 120 led1=!led1;
nherriot 0:5136cdfaebd0 121 Thread::wait(500);
nherriot 0:5136cdfaebd0 122 }
nherriot 0:5136cdfaebd0 123 }
nherriot 0:5136cdfaebd0 124
nherriot 0:5136cdfaebd0 125 void tick()
nherriot 0:5136cdfaebd0 126 {
nherriot 0:5136cdfaebd0 127 led4=!led4;
nherriot 0:5136cdfaebd0 128 }
nherriot 0:5136cdfaebd0 129
nherriot 0:5136cdfaebd0 130 int main() {
nherriot 0:5136cdfaebd0 131 Ticker t;
nherriot 0:5136cdfaebd0 132 t.attach(tick,1);
nherriot 0:5136cdfaebd0 133 DBG_INIT();
nherriot 0:5136cdfaebd0 134
nherriot 0:5136cdfaebd0 135 Thread testTask(test, NULL, osPriorityNormal, 1024*4);
nherriot 6:5a892c3d738e 136 // keepAlive(NULL);
nherriot 0:5136cdfaebd0 137
nherriot 0:5136cdfaebd0 138
nherriot 0:5136cdfaebd0 139 return 0;
nherriot 0:5136cdfaebd0 140 }