Pinky and the Brain / Mbed OS Clock

Dependencies:   SPI_TFT_ILI9341 TFT_fonts Adafruit_RTCLib RTC-DS1307 TSI

Files at this revision

API Documentation at this revision

Comitter:
sfaghihi
Date:
Fri May 26 11:14:53 2017 +0000
Parent:
19:450dbcda696e
Commit message:
sfsdfd

Changed in this revision

DS1307.lib Show annotated file Show diff for this revision Revisions of this file
Display.cpp Show annotated file Show diff for this revision Revisions of this file
RTC-DS1307.lib Show annotated file Show diff for this revision Revisions of this file
Wifi.cpp Show annotated file Show diff for this revision Revisions of this file
Wifi.h 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
utility.cpp Show annotated file Show diff for this revision Revisions of this file
utility.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DS1307.lib	Fri May 26 11:14:53 2017 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/harrypowers/code/DS1307/#c3e4da8feb10
--- a/Display.cpp	Thu May 25 21:56:06 2017 +0000
+++ b/Display.cpp	Fri May 26 11:14:53 2017 +0000
@@ -749,16 +749,16 @@
         myTFT.foreground(Red);
     myTFT.set_font((unsigned char*)Arial24x23);
     if (set_alarm_state == 1)
-        myTFT.fillrect(155, 195, 175, myTFT.height(), Black);
+        myTFT.fillrect(145, 195, 185, myTFT.height(), Black);
     else if (set_alarm_state == 2)
-         myTFT.fillrect(175, 195, 195, myTFT.height(), Black);
+         myTFT.fillrect(200, 195, 245, myTFT.height(), Black);
     else if (set_alarm_state == 3)
-        myTFT.fillrect(195, 195, 230, myTFT.height(), Black);
-    wait(1);
+        myTFT.fillrect(245, 195, 310, myTFT.height(), Black);
+    wait(0.5);
     char buf[15];
     sprintf(buf, "%02d:%02d %s\n", alarmTime->hour == 12 ? 12 : alarmTime->hour%12, alarmTime->minute, alarmTime->hour>=12 ? "p.m." : "a.m.");
-    myTFT.locate(160,200);
-    text(160, 200, buf);
+    myTFT.locate(150,200);
+    text(150, 200, buf);
     myTFT.set_font((unsigned char*)Arial12x12);
     myTFT.foreground(White);
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RTC-DS1307.lib	Fri May 26 11:14:53 2017 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/sjj698/code/RTC-DS1307/#08a857b18432
--- a/Wifi.cpp	Thu May 25 21:56:06 2017 +0000
+++ b/Wifi.cpp	Fri May 26 11:14:53 2017 +0000
@@ -28,13 +28,21 @@
 
 char *Wifi::getTimeDate()
 {
+    int id = 0;
     LOG("IN HERE\r\n");
-    socket.open(&esp);
+    esp._esp.open("TCP", id, TD_HOST, TD_PORT);
     LOG("Socket opened\r\n");
     socket.connect(TD_HOST, TD_PORT);
     LOG("Socket connected\r\n");
-    socket.send("time\r\n", 6);
+    char buf[] = "GET / HTTP/1.1\r\nHost: time.jsontest.com\r\n\r\n";
+    esp._esp.send(id, buf, sizeof(buf));
+    LOG("SENT\r\n");
     char *data = (char *)calloc(23, 1);
+    while (1)
+    {
+        if (esp._esp._serial.readable())
+            pc_io.putc(esp._esp._serial.getc());
+    }
     socket.recv(data, 22);
     LOG("Data: %s\r\n", data);
     socket.close();
--- a/Wifi.h	Thu May 25 21:56:06 2017 +0000
+++ b/Wifi.h	Fri May 26 11:14:53 2017 +0000
@@ -5,8 +5,8 @@
 #define ESP_TX PTE22
 #define ESP_RX PTE23
 #define ESP_RST PTC16
-#define TD_HOST "67.205.147.133"
-#define TD_PORT 5005
+#define TD_HOST "172.217.23.19"
+#define TD_PORT 80
 
 const int time_out = 30;
 
--- a/main.cpp	Thu May 25 21:56:06 2017 +0000
+++ b/main.cpp	Fri May 26 11:14:53 2017 +0000
@@ -4,11 +4,15 @@
 #include "TSISensor.h"
 #include "DS1307.h"
 
+
+
 // Hardware abstractions
 RawSerial pc_io(USBTX, USBRX, 115200);
 Display screen;
 Wifi wifi(WIFI_SSID, WIFI_PASS);
 TSISensor tsi;
+InterruptIn set_a(SET_A_PIN);
+
 bool wifi_con = false;
 bool alarm_dup = false;
 int set_alarm_state = 0;
@@ -22,6 +26,8 @@
 TimeClass *programAlarm = NULL;
 DateClass *programDate = NULL;
 WeatherClass *programWeather = NULL;
+Thread setAlarmThread;
+Thread playAlarmThread;
 
 // Timer Interrupt objects
 Ticker clockTimer;
@@ -32,10 +38,13 @@
 void init_state_hw()
 {
     //pc_io.baud(115200);
-    if (wifi.connect())
+    /*if (wifi.connect()) {
+        char *data = NULL;
+        data = wifi.getTimeDate();
         wifi_con = true;
-    else
-        LOG("NO");
+        LOG("Data: %s\r\n", data);
+    } else
+        LOG("NO");*/
     programTime = new TimeClass(11, 0, 0);
     programPrevTime = new TimeClass(11, 0, 0);
     programDate = new DateClass(11, 11, 1918, 1);
@@ -72,6 +81,27 @@
     }
 }
 
+void serial_test()
+{
+    char c = pc_io.getc();
+    pc_io.putc(c);
+    if (c == 'x')
+    {
+         set_alarm_state = (set_alarm_state + 1)%4;
+        if (set_alarm_state == 1) {
+            set_alarm_state = 4;
+        }
+    }
+}
+
+void set_a_fnc()
+{
+    set_alarm_state = (set_alarm_state + 1)%4;
+        if (set_alarm_state == 1) {
+            set_alarm_state = 4;
+        }
+}
+
 void refresh_and_inc()
 {
     //led1 = !led1;
@@ -87,7 +117,7 @@
         if (!alarm_dup) {
             alarm_dup = true;
             programState->duringAlarm = true;
-            playAlarmSound(programState);
+            playAlarmThread.start(&playAlarmSound);
         }
     } else
         alarm_dup = false;
@@ -97,12 +127,12 @@
             programState->duringAlarm = false;
         else {
             held_hand_time ++;
-            if (!dist_dup && held_hand_time >= CHANGE_SET_ALARM_TIME) {
+            /*if (!dist_dup && held_hand_time >= CHANGE_SET_ALARM_TIME) {
                 dist_dup = true;
                 set_alarm_state = (set_alarm_state + 1)%4;
                 if (set_alarm_state == 1)
-                    setAlarmTime();
-            }
+                    set_alarm_state = 4;
+            }*/
         }
     } else {
         dist_dup = false;
@@ -197,8 +227,11 @@
 int main() 
 {
     init_state_hw();
+    pc_io.attach(&serial_test);
+    //update_rtc(programState);
     read_rtc(programState);
     fetch_data();
+    set_a.rise(&set_a_fnc);
     //LOG("AFTER\r\n");
     //printf("OI OI");
     
@@ -208,6 +241,7 @@
     // Timer initializations
     
     clockTimer.attach(&refresh_and_inc, REFRESH_PERIOD);
+    
     fetchTimer.attach(&fetch_data, FETCH_PERIOD);
     //alarmTimer.attach(&stopAlarm, 40);
     
@@ -215,6 +249,11 @@
     //LOG("YAY\r\n");
     // Infinite loop
     while (true) {
+        if (set_alarm_state == 4) {
+            set_alarm_state = 1;
+            setAlarmThread.start(&setAlarmTime);
+        }
+            
     }
 }
 
--- a/utility.cpp	Thu May 25 21:56:06 2017 +0000
+++ b/utility.cpp	Fri May 26 11:14:53 2017 +0000
@@ -33,10 +33,12 @@
     :   time(t), prevTime(p), weather(w), date(d), alarm(a), screenState(0), screenActive(true), duringAlarm(false) {}
 
 
-void playAlarmSound(StateClass *ps)
+extern StateClass *programState;
+
+void playAlarmSound()
 {
     PwmOut speaker(ALARM_PIN);      // alarm sound of regular beeps
-    while (ps->duringAlarm) {
+    while (programState->duringAlarm) {
         speaker.period(1.0/150.0);  // 150hz period
         speaker =0.0125;
         wait(0.5);
@@ -54,35 +56,48 @@
     cs = 1;
     wait_us(30);
     adc = ain.read();           // read analog as a float
-    volts = adc * 4.5;          // convert to volts
-    inches = volts / 0.0095;
+    volts = adc * 3.3;          // convert to volts
+    inches = volts / 0.0064;
     cs = 0;
     return inches <= RANGE_THRESHOLD;
 }
 
-I2C master(RTC_SDA, RTC_SCL);
-RtcDs1307 rtc(master);
+//I2C master(RTC_SDA, RTC_SCL);
+Rtc_Ds1307 rtc(RTC_SDA, RTC_SCL);
 void read_rtc(StateClass *ps)
 {
+    Rtc_Ds1307::Time_rtc data;
+    //rtc.twentyfour_hour();
     LOG("IN RTC\r\n");
-    DateTime data = rtc.now();
-    LOG("%d:%d:%d", data.hour(), data.minute(), data.second());
-    if (!rtc.isRunning())
-        return;
-    ps->time->hour = data.hour();
-    ps->prevTime->hour = data.hour();
-    ps->time->minute = data.minute();
-    ps->prevTime->minute = data.minute();
-    ps->time->second = data.second();
-    ps->prevTime->second = data.second();
-    ps->date->year = data.year();
-    ps->date->day = data.day();
-    ps->date->month = data.month();
-    ps->date->dow = data.dayOfWeek();
+    int s = 0, m = 0, h = 0, dow = 0, d = 0, mo = 0, y = 0;
+    //rtc.gettime(&s, &m, &h, &dow, &d, &mo, &y);
+    rtc.getTime(data);
+    h = data.hour;
+    m = data.min;
+    s = data.sec;
+    dow = data.wday - 1;
+    d = data.date;
+    mo = data.mon;
+    y = data.year;
+    LOG("%d:%d:%d", h, m, s);
+    //if (!rtc.isRunning())
+    //    return;
+    ps->time->hour = h;
+    ps->prevTime->hour = h;
+    ps->time->minute = m;
+    ps->prevTime->minute = m;
+    ps->time->second = s;
+    ps->prevTime->second = s;
+    ps->date->year = y;
+    ps->date->day = d;
+    ps->date->month = mo;
+    ps->date->dow = dow-1;
 }
 
 void update_rtc(StateClass *ps)
 {
+    /*
     DateTime data(ps->date->year, ps->date->month, ps->date->day, ps->time->hour, ps->time->minute, ps->time->second);
-    rtc.adjust(data);
+    rtc.adjust(data);*/
+    //rtc.settime(ps->time->second, ps->time->minute, ps->time->hour, ps->date->dow, ps->date->day, ps->date->month, ps->date->year);
 }
\ No newline at end of file
--- a/utility.h	Thu May 25 21:56:06 2017 +0000
+++ b/utility.h	Fri May 26 11:14:53 2017 +0000
@@ -7,7 +7,7 @@
 #include "math.h"
 #include "string"
 #include "string.h"
-#include "DS1307.h"
+#include "Rtc_Ds1307.h"
 
 // Some macros
 extern RawSerial pc_io;
@@ -15,14 +15,15 @@
 #define M_PI  3.14159265358979323846  /* pi */
 #define REFRESH_PERIOD 1  // (s)
 #define FETCH_PERIOD 3600
-#define RANGE_THRESHOLD 9.0 // (inches)
+#define RANGE_THRESHOLD 12.0 // (inches)
 #define CHANGE_SCREEN_TIME 1
 #define CHANGE_SET_ALARM_TIME 3
 
 // THe pin macros
 #define ALARM_PIN PTD4
-#define RTC_SDA PTC11 //PTC2
-#define RTC_SCL PTC10 //PTC1
+#define RTC_SDA PTC2 //PTC2
+#define RTC_SCL PTC1 //PTC1
+#define SET_A_PIN D0
 #define RANGE_AN PTB1
 #define RANGE_CS PTA5
 
@@ -74,7 +75,7 @@
         StateClass(TimeClass *t, TimeClass *p, WeatherClass *w, DateClass *d, TimeClass *a);
 };
 
-void playAlarmSound(StateClass *ps);
+void playAlarmSound();
 bool getDistance();
 void read_rtc(StateClass *ps);
 void update_rtc(StateClass *ps);