Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed-rtos mbed VodafoneUSBModem_bleedingedge
Diff: main.cpp.orig
- Revision:
- 14:9ee94196b75d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp.orig Tue Sep 25 14:57:07 2012 +0000
@@ -0,0 +1,177 @@
+/* net_sms_test.cpp */
+/*
+Copyright (C) 2012 ARM Limited.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#define __DEBUG__ 4 //Maximum verbosity
+#ifndef __MODULE__
+#define __MODULE__ "main.cpp"
+#endif
+
+#define MY_PHONE_NUMBER "+447717275049"
+
+#include "core/fwk.h"
+#include "mbed.h"
+#include "rtos.h"
+#include "VodafoneUSBModem.h"
+
+#include <string>
+
+extern "C" void HardFault_Handler() {
+ error("Hard Fault!\n");
+}
+
+DigitalOut led1(LED1); // LED 1 is used to show the state of the door. ON is door open, and OFF is door close.
+DigitalOut led2(LED2);
+DigitalOut led3(LED3); // LED 3 is use to indicate if the relay is being switched on to open the door
+DigitalOut led4(LED4);
+DigitalOut doorContactorRelay(p5); // create a digital pin object to control the door contactor relay
+DigitalIn doorProximitySwitch(p6); // create a digital pin object to sense door position proximity switch, this works in reverse
+ // the switch senses positive when the door is closed - need to be sure when it's closed! :-)
+bool openTheDoor = false; // create a state variable which is set to indicate the mbed should open the door
+ // this variable will be used hold the latch open until it knows the door has been open.
+int read_digital(void) {
+ DigitalIn mydigital(p6);
+ return(mydigital.read());
+}
+
+void test(void const*) {
+ VodafoneUSBModem connectionManager; // create a connection manager object
+
+ DBG("Hello world and Vodafone K3770 test program!");
+
+ connectionManager.sendSM(MY_PHONE_NUMBER, "Hello from mbed door controller:)");
+
+ char num[17]; // create a buffer to hold the telephone number in
+ char msg[160]; // create a buffer to hold the text message in
+ size_t count;
+
+ while(true)
+ {
+
+ // if this state variable has been set I need to keep the doorContactor on until the door is open
+ if ((openTheDoor) || (doorProximitySwitch.read() == 0))
+ {
+
+ doorContactorRelay = 0; // door must be open now so switch relay off.
+ openTheDoor = false; // the door is open now so set it to false.
+ led3 = 0; // switch the LED light off to indicate I'm switching the relay off
+
+ }
+
+ // check the state of the door and switch the LED light to 'ON' for door open and 'OFF' for door closed.
+ //if (doorProximitySwitch.read() == 0)
+ if (read_digital() == 0)
+ {
+ DBG("The door proximity switch is: %d so I think it's open", doorProximitySwitch.read() );
+ led1 = 1;
+ }
+ else
+ {
+ DBG("The door proximity switch is: %d so I think it's closed", doorProximitySwitch.read() );
+ led1 = 0;
+ }
+
+
+
+ int ret = connectionManager.getSMCount(&count); // check to see if there is an incoming SMS message
+ if(ret)
+ {
+ WARN("getSMCount returned %d", ret);
+ Thread::wait(125);
+ continue;
+ }
+
+ DBG("The SMS count is now at: %d for this modem", count);
+ if( count > 0) // if there are messages in the mailbox start pulling them off the queue
+ {
+ DBG("%d SMS to read", count);
+ ret = connectionManager.getSM(num, msg, 160);
+
+ if(ret)
+ {
+ WARN("getSM returned %d", ret);
+ Thread::wait(125);
+ continue;
+ }
+
+ DBG("The message is from number: %s and the message is: \"%s\"", num, msg);
+
+ if (strcmp (msg, "open") ==0)
+ {
+ DBG("The SMS message indicates I should open the door");
+
+ // check the door is not already open if it is do nothing and send a warning back to the sender
+ // for this door the switch 'true' then its closed - we have to have an active signal to show it's securely closed
+
+ if ( doorProximitySwitch.read() == 0)
+ {
+ DBG("The door is already open - so I'll do nothing");
+ connectionManager.sendSM(num, " WARNING - The door is already open sir! ");
+ }
+ else
+ {
+ doorContactorRelay = 1;
+ openTheDoor = true; // set the state vairable to let the door contoller know it needs to open the door
+ led3 = 1;
+ DBG("The relay has been activated to open the door");
+ connectionManager.sendSM(num, " Door open sir... Welcome home! " );
+ }
+ }
+ else
+ {
+ DBG("The SMS message is not recognized");
+ connectionManager.sendSM(num, " Wrong password sir... Try 'open' and I'll open! ;-) ");
+ }
+
+
+
+ }
+ Thread::wait(500);
+ }
+
+}
+
+void keepAlive(void const*) {
+ while(1)
+ {
+ led2=!led2;
+ Thread::wait(500);
+ }
+}
+
+void tick()
+{
+ led4=!led4;
+}
+
+int main() {
+ Ticker t;
+ t.attach(tick,1);
+ DBG_INIT();
+ DBG_SET_SPEED(115200);
+
+ Thread testTask(test, NULL, osPriorityNormal, 1024*5);
+ keepAlive(NULL);
+
+
+ return 0;
+}

