留守の見張り番プログラムです。

Dependencies:   NetServices TextLCD mbed IniFileLib

Files at this revision

API Documentation at this revision

Comitter:
jksoft
Date:
Thu Jun 21 10:44:19 2012 +0000
Commit message:

Changed in this revision

IniFileLib.lib Show annotated file Show diff for this revision Revisions of this file
NetServices.lib Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 7bc1d7c88b16 IniFileLib.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IniFileLib.lib	Thu Jun 21 10:44:19 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/rinosh2/code/IniFileLib/#995403221573
diff -r 000000000000 -r 7bc1d7c88b16 NetServices.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/NetServices.lib	Thu Jun 21 10:44:19 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/segundo/code/NetServices/#4e2468d7d5cb
diff -r 000000000000 -r 7bc1d7c88b16 TextLCD.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TextLCD.lib	Thu Jun 21 10:44:19 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/simon/code/TextLCD/#a53b3e2d6f1e
diff -r 000000000000 -r 7bc1d7c88b16 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Jun 21 10:44:19 2012 +0000
@@ -0,0 +1,239 @@
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "NTPClient.h"
+#include "SMTPClient.h"
+#include "IniFile.h"
+#include "TextLCD.h"
+
+#define HOSTNAME "mbedSE"
+
+#define READ_BUF_SIZE 128
+
+EthernetNetIf eth(HOSTNAME);
+DigitalOut led1(LED1, "led1");
+DigitalIn sensor(p5);
+DigitalIn sw[] = { p13,p14,p9 };
+TextLCD lcd(p11, p12, p27, p28, p29, p30);  // rs, e, d4-d7
+LocalFileSystem local("local");
+Ticker flipper;
+IniFile ini("/local/setting.ini");
+
+extern "C" void mbed_reset();
+
+char password[4] = { 1,2,4,1 };
+int timecount = 0;
+
+void TimeCount()
+{
+    if(timecount != 0)    timecount--;
+}
+
+int SendMail()
+{
+    int ini_port;
+    char ini_server[READ_BUF_SIZE];
+    char ini_domain[READ_BUF_SIZE];
+    char ini_user[READ_BUF_SIZE];
+    char ini_password[READ_BUF_SIZE];
+    
+    ini.get("PORT",        ini_port);
+    ini.get("SERVER",    ini_server , READ_BUF_SIZE);
+    ini.get("DOMAIN",    ini_domain , READ_BUF_SIZE);
+    ini.get("USER",        ini_user , READ_BUF_SIZE);
+    ini.get("PASSWORD",    ini_password , READ_BUF_SIZE);
+    
+    Host host(IpAddr(), ini_port, ini_server);
+    SMTPClient smtp(host, ini_domain, ini_user, ini_password, SMTP_AUTH_PLAIN);
+    
+    char ini_from_addr[READ_BUF_SIZE];
+    char ini_to_addr[READ_BUF_SIZE];
+    char ini_msg[READ_BUF_SIZE];
+    
+    ini.get("FROM_ADDRESS",    ini_from_addr , READ_BUF_SIZE);
+    ini.get("TO_ADDRESS",    ini_to_addr , READ_BUF_SIZE);
+    ini.get("MSG",            ini_msg , READ_BUF_SIZE);
+    
+    time_t ctTime = time(NULL) + 32400;
+    
+    EmailMessage msg;
+    msg.setFrom(ini_from_addr);
+    msg.addTo(ini_to_addr);
+    msg.printf("Subject: Mail %s", ctime(&ctTime));
+    msg.printf("%s",ini_msg);
+
+    printf("Send result %d\n", smtp.send(&msg));
+    printf("Last response | %s", smtp.getLastResponse().c_str());
+    
+    smtp.clearAuth();
+
+    return(0);
+}
+
+int CheckInputSw()
+{
+    static int BeforeSw[3] = { 0,0,0 };
+    int NowSw[3];
+    int ret = 0;
+    
+    for(int i=0;i<3;i++)
+    {
+        NowSw[i] = sw[i];
+        
+        if((BeforeSw[i])&&(NowSw[i]==0))
+        {
+            ret |= 0x01 << i;
+        }
+        
+        BeforeSw[i] = NowSw[i];
+    }
+    
+    if(ret != 0)
+    {
+        wait(0.2);
+        
+    }
+    
+    return(ret);
+}
+
+bool password_mode()
+{
+    int input_num = 0;
+    char input_button[4] = { 0,0,0,0 };
+    
+    lcd.locate(0,1);
+    lcd.printf("Password? ");
+    
+    timecount = 5;
+    flipper.attach(&TimeCount, 1.0);
+    
+    while((input_num < 4)&&(timecount!=0))
+    {
+        lcd.locate(10,0);
+        lcd.printf("%dsec",timecount);
+        int in = CheckInputSw();
+        
+        if( in )
+        {
+            input_button[input_num] = in;
+            input_num++;
+            lcd.locate(10+input_num,1);
+            lcd.printf("*");
+        }
+    }
+    flipper.detach();
+    
+    if(memcmp( &input_button[0] , &password[0],4) == 0)
+    {
+        lcd.locate(10,1);
+        lcd.printf("  OK  ");
+        return(true);
+    }
+    else
+    {
+        lcd.locate(10,1);
+        lcd.printf("  NG  ");
+        return(false);
+    }
+    
+    return(false);
+}
+
+int main() {
+    
+    sensor.mode(PullDown);
+    sw[0].mode(PullUp);
+    sw[1].mode(PullUp);
+    sw[2].mode(PullUp);
+    
+    lcd.cls();
+    lcd.locate(0,0);
+    lcd.printf("EtherSetting..");
+    
+    EthernetErr ethErr;
+    
+    do {
+        ethErr = eth.setup();
+        if (ethErr) printf("Timeout\n", ethErr);
+    } while (ethErr != ETH_OK);
+    
+    
+#if 0
+    printf("Connected OK\n");
+    const char* hwAddr = eth.getHwAddr();
+    printf("HW address : %02x:%02x:%02x:%02x:%02x:%02x\n",
+           hwAddr[0], hwAddr[1], hwAddr[2],
+           hwAddr[3], hwAddr[4], hwAddr[5]);
+
+    IpAddr ethIp = eth.getIp();
+    printf("IP address : %d.%d.%d.%d\n", ethIp[0], ethIp[1], ethIp[2], ethIp[3]);
+#endif
+    
+    // Get time
+    NTPClient ntp;
+    //printf("NTP setTime...\n");
+    Host server(IpAddr(), 123, "pool.ntp.org");
+    ntp.setTime(server);
+    time_t ctTime = time(NULL) + 32400;
+    //printf("\nTime is now (UTC): %d %s\n", ctTime, ctime(&ctTime));
+
+    Timer tm;
+    tm.start();
+    
+    bool checking = false;
+
+    while (true) {
+        
+        time_t ctTime = time(NULL) + 32400;
+        struct tm *timeObject = localtime(&ctTime);
+        lcd.locate(0,1);
+        lcd.printf("%02d/%02d %02d:%02d:%02d", timeObject->tm_mon,timeObject->tm_mday,timeObject->tm_hour,timeObject->tm_min,timeObject->tm_sec);
+        
+        if( checking )
+        {
+            lcd.locate(0,0);
+            lcd.printf("Watching Mode");
+            if (tm.read() > 0.5) {
+                led1 = !led1;
+                
+                if(sensor)
+//                if(CheckInputSw() == 0x04)
+                {
+                    lcd.cls();
+                    lcd.locate(0,0);
+                    lcd.printf("Alert On!");
+                    if(password_mode())
+                    {     
+                        wait(0.5);
+                    }
+                    else
+                    {
+                        lcd.locate(0,0);
+                        lcd.printf("Send Alert Mail!");
+                        SendMail();
+                        
+                        mbed_reset();
+                    }
+                    checking = false;
+                    lcd.cls();
+                }
+                tm.start();
+            }
+        }
+        else
+        {
+            lcd.locate(0,0);
+            lcd.printf("Free Mode");
+            
+            if( CheckInputSw() == 0x01 )
+            {
+                lcd.locate(0,0);
+                lcd.printf("Mode Change...");
+                checking = true;
+                wait(5);
+                lcd.cls();
+            }
+        }
+        Net::poll();
+    }
+}
\ No newline at end of file
diff -r 000000000000 -r 7bc1d7c88b16 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Jun 21 10:44:19 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912