first compiled version

Dependencies:   mbed-rtos mbed C12832_lcd LM75B

main.cpp

Committer:
nleoni
Date:
2014-03-04
Revision:
3:0945093f48ec
Parent:
1:83bc9f91d154
Child:
4:6c17983d6192

File content as of revision 3:0945093f48ec:

//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 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 = potReadingBuffer.alloc();
        *queue = pot1; 
        potReadingQueue.put(queue,1200);
     
    Thread::wait(10000);
    }
    
}



void readTemp(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);       
        
    }
}