first compiled version

Dependencies:   mbed-rtos mbed C12832_lcd LM75B

Files at this revision

API Documentation at this revision

Comitter:
robertwharrell
Date:
Mon Mar 10 20:32:26 2014 +0000
Parent:
5:d40a563e2c3b
Child:
8:4fcba095bdf0
Commit message:
Added basics for TOD, TEMP, & lcd Mutex

Changed in this revision

LM75B.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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LM75B.lib	Mon Mar 10 20:32:26 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/chris/code/LM75B/#6a70c9303bbe
--- a/main.cpp	Tue Mar 04 09:04:44 2014 +0000
+++ b/main.cpp	Mon Mar 10 20:32:26 2014 +0000
@@ -13,6 +13,7 @@
 #include "mbed.h"
 #include "rtos.h"
 #include "C12832_lcd.h"
+#include "LM75B.h"
 #include <string>
 
 #define BUFFER 17
@@ -21,14 +22,21 @@
 C12832_LCD lcd;
 Serial pc(USBTX, USBRX);   //To differentiate from LCD functions
 
+Mutex lcdMutex;
+
 AnalogIn pot1(p19);
 MemoryPool<float, 10> potReadingBuffer;
 Queue<float,10> potReadingQueue;
 
+//Temperature Sensor
+LM75B      tmp(p28,p27);
+Queue<float,10> tempReadingQueue;
 
 MemoryPool<char[BUFFER], COOKIEQUEUE> cookieReadingBuffer;
 Queue<char[BUFFER],COOKIEQUEUE> cookieReadingQueue;
 
+DigitalIn   center(p14);    //Initiate RTC clock setup
+
 /******************************************************************
 *
 *An LCD thread that updates the LCD based on information 
@@ -41,21 +49,31 @@
 *******************************************************************/
 void lcdUpdate(void const*){
 while(1){
-       osEvent evtPot = potReadingQueue.get(1200);
-        if (evtPot.status == osEventMessage) {
-            float *queuePot = (float*)evtPot.value.p;
-            lcd.locate(0,3);
-            lcd.printf("Voltage: %.2f V", *queuePot);
-            potReadingBuffer.free(queuePot);      
+        osStatus lcdStatus = lcdMutex.lock(1200);
+        if(lcdStatus == osOK){
+            osEvent evtPot = potReadingQueue.get(1200);
+            if (evtPot.status == osEventMessage) {
+                float *queuePot = (float*)evtPot.value.p;
+                lcd.locate(0,0);
+                lcd.printf("Voltage: %.2f V", *queuePot);
+                potReadingBuffer.free(queuePot);      
+            }
+            osEvent evtTemp = tempReadingQueue.get(1200);
+            if (evtPot.status == osEventMessage) {
+                float *queueTemp = (float*)evtTemp.value.p;
+                lcd.locate(0,8);
+                lcd.printf("Temp: %.2f F", *queueTemp);      
+            }
+            osEvent evtCookie = cookieReadingQueue.get(1200);
+            if (evtCookie.status == osEventMessage) {
+                char (*queueCookie)[BUFFER] = (char (*)[BUFFER])evtCookie.value.p;
+                lcd.locate(0,16);
+                string str(*queueCookie);
+                lcd.printf("F.Cookie: %s", str);    
+                cookieReadingBuffer.free(queueCookie);      
+            }
         }
-       osEvent evtCookie = cookieReadingQueue.get(1200);
-        if (evtCookie.status == osEventMessage) {
-            char (*queueCookie)[BUFFER] = (char (*)[BUFFER])evtCookie.value.p;
-            lcd.locate(0,15);
-            string str(*queueCookie);
-            lcd.printf("F.Cookie: %s", str);    
-            cookieReadingBuffer.free(queueCookie);      
-        }
+        lcdMutex.unlock();
         Thread::wait(1000);
     }
 }
@@ -85,9 +103,15 @@
 *******************************************************************/
 
 void readTemp(void const*){
+    float temp = 0.0;
+    float *temp_ptr;
+    
     while(1){
         //pc.printf("TEMP read");
-        Thread::wait(60000);
+        temp = tmp.read()*9/5+32;
+        temp_ptr = &temp;
+        tempReadingQueue.put(temp_ptr);
+        Thread::wait(5000);
     }
     
 }
@@ -133,22 +157,66 @@
 *using mutual exclusion
 *
 *******************************************************************/
-void threadTOD(void const*){
-        while(1){
-            pc.printf("TOD updated");
-            Thread::wait(60000);
+void readTOD(void const*){
+    struct tm   dt, *dtp;
+    time_t      t;
+    char        s[ 30 ];
+    dtp = &dt;
+    
+    while(1){
+        osStatus lcdStatus = lcdMutex.lock(1200);
+        if(lcdStatus == osOK){
+            //pc.printf("TOD updated");
+            t       = time( NULL );
+            dtp     = localtime( &t );
+
+            strftime( s, 20, "%b %d, %Y", dtp );
+            lcd.locate( 70, 0 );
+            lcd.printf( "%s", s );
+    
+            strftime( s, 10, "%H:%M", dtp );
+            lcd.locate( 70, 8 );
+            lcd.printf( "%s", s );
+        }
+        lcdMutex.unlock();
+        Thread::wait(60000);
     } 
 }
 
+//Using a terminal, set the RTC to current date and time
+void rtc_setup(void)
+{
+    // get the current time from the terminal
+    struct tm t;
+  
+    lcd.locate( 0, 0 );
+    lcd.printf( "Please set time from serial terminal\n\r" );
+
+    pc.printf("Enter current date and time:\n\r");
+    pc.printf("YYYY MM DD HH MM[enter]\n\r");
+    pc.scanf("%d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday
+              , &t.tm_hour, &t.tm_min);
+
+    // adjust for tm structure required values
+    t.tm_year = t.tm_year - 1900;
+    t.tm_mon = t.tm_mon - 1;
+
+    // set the time
+    set_time(mktime(&t));
+}
+
 DigitalOut myled(LED1);
 
 int main() {
-lcd.cls();
+    //RTC setup if Center Button is held down
+    if (center) {  rtc_setup();   }
+    lcd.cls();
 
-Thread threadLCD(lcdUpdate);
-Thread threadPOT(readPOT);
-Thread threadTemp(readTemp);
-Thread threadCookie(readCookie);
+    Thread threadLCD(lcdUpdate);
+    Thread threadPOT(readPOT);
+    Thread threadTemp(readTemp);
+    Thread threadCookie(readCookie);
+    Thread threadTOD(readTOD);
 
     while(1) {
         Thread::wait(250);