first compiled version

Dependencies:   mbed-rtos mbed C12832_lcd LM75B

Revision:
3:0945093f48ec
Parent:
1:83bc9f91d154
Child:
4:6c17983d6192
--- a/main.cpp	Wed Feb 26 05:34:37 2014 +0000
+++ b/main.cpp	Tue Mar 04 08:48:41 2014 +0000
@@ -1,49 +1,107 @@
-//Rob in the house
+//Rob I updated the LCD update and read pot thread and they are working
+//One key issues was adding timeout for the put and get methods of the queue
+//Maybe you can work on the TOD thread and MUTEX (you'll need to add it to the 
+//LCD thread and I will finish the scan thread, sounds like Plan?? :-)
+//In the end I had to add the memory pool combined with the queue as otherwise
+//the queues just keep pointers to data and being that the putting and getting of
+//the pot values in the queue is asynchronous you need a buffer to keep the values
+//and this is provided by the MemoryPool.
+
 
 #include "mbed.h"
 #include "rtos.h"
+#include "C12832_lcd.h"
+#include <string>
+
+#define BUFFER 17
+#define COOKIEQUEUE 30
+
+C12832_LCD lcd;
+Serial pc(USBTX, USBRX); // tx, rx
 
 AnalogIn pot1(p19);
+MemoryPool<float, 10> potReadingBuffer;
 Queue<float,10> potReadingQueue;
 
+MemoryPool<char[BUFFER], COOKIEQUEUE> cookieReadingBuffer;
+Queue<char[BUFFER],COOKIEQUEUE> cookieReadingQueue;
+
 void lcdUpdate(void const*){
 while(1){
-       osEvent evt = potReadingQueue.get();
-        if (evt.status == osEventMail) {
-            float *queue = (float*)evt.value.p;
-            printf("\nVoltage: %.2f V\n\r"   , *queue);
-      
-            Thread::wait(1000);
+       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);      
         }
+       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);      
+        }
+        Thread::wait(1000);
     }
 }
 
 void readPOT(void const*){    
 while(1){
-        float *queue;
+        float *queue = potReadingBuffer.alloc();
         *queue = pot1; 
-        potReadingQueue.put(queue);
+        potReadingQueue.put(queue,1200);
      
     Thread::wait(10000);
     }
     
 }
 
+
+
 void readTemp(void const*){
     
 }
 
-void threadCookie(void const*){
-    
+void readCookie(void const*){
+    pc.printf(">Enter your fortune cookie\n>");
+    char (*ptrBuffer)[BUFFER] = cookieReadingBuffer.alloc();
+    char *ptrChar;
+    ptrChar=*ptrBuffer;
+    while(1){
+        if(pc.readable()){
+            *ptrChar=pc.getc();
+            pc.putc(*ptrChar);
+            if((*ptrChar=='\n') || ((ptrChar-*ptrBuffer)>=(BUFFER-1)) ){
+                   if((ptrChar-*ptrBuffer)>=(BUFFER-1)) *++ptrChar='\n';
+                   while((ptrChar-*ptrBuffer)<=(BUFFER-1)){
+                       *ptrChar++=' ';
+                    }
+                   *ptrChar='\0';
+                   cookieReadingQueue.put(ptrBuffer,500);
+                   pc.printf(">Enter your fortune cookie\n>");
+                   ptrChar=*ptrBuffer;
+            } else {
+                ptrChar++;
+            }
+        }
+    Thread::wait(10);
+    }
 }
 
 DigitalOut myled(LED1);
 
 int main() {
+lcd.cls();
+
 Thread threadLCD(lcdUpdate);
 Thread threadPOT(readPOT);
 Thread threadTemp(readTemp);
+Thread threadCookie(readCookie);
 
     while(1) {
+        Thread::wait(250);       
+        
     }
 }