first compiled version
Dependencies: mbed-rtos mbed C12832_lcd LM75B
Diff: main.cpp
- 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); + } }