init

Dependencies:   DS1820 PID max6675 mbed-STM32F103C8T6 mbed-rtos mbed millis

main.cpp

Committer:
sandrosole
Date:
2017-10-16
Revision:
1:922b74c260d9
Parent:
0:d1510e5f71f1

File content as of revision 1:922b74c260d9:

#include "mbed.h"
#include "rtos.h"

//----

#include "millis.h"

//----
#include "DS1820.h"

//--- Thread
Thread tTempCtrl;
Thread tMainCtrl;

//--- Function
void TempController();
void MainController();

//---
#define TEMP 1
#define LICHT 2

typedef struct checkedUnion {
    int type;
    union sensor_u {
        float  temperature;
        float  licht;
    } sensor;

    uint32_t counter;   /* A counter value               */
} message_t;

//---
Serial serial(USBTX, USBRX);
DS1820 ds1820(PA_9);

//---
MemoryPool<message_t, 8> mpool;
Queue<message_t, 8> queue;

//---
int main()
{
    serial.baud(19200);
    
    tTempCtrl.start(TempController);
    tMainCtrl.start(MainController);

    Thread::wait(osWaitForever);
}

void MainController()
{
    float  temperature;
    float  licht;
    
    while (true) {
        osEvent evt = queue.get();
        if (evt.status == osEventMessage) {
            message_t *message = (message_t*)evt.value.p;
            switch ( message->type ) {
                case TEMP:
                    printf("\Temperature: %.2f C\n\r", message->sensor.temperature);
                    temperature = message->sensor.temperature;
                    break;
                case LICHT:
                    printf("\Licht: %.2f C\n\r", message->sensor.licht);
                    licht = message->sensor.temperature;
                    break;
            }
            printf("Number of cycles: %u\n\r", message->counter);

            mpool.free(message);
        }
        
        Thread::wait(1);
    }
}

void TempController()
{
    uint32_t i = 0;

    while (true) {
        if(ds1820.begin()) {
            ds1820.startConversion();
            Thread::wait(500);
            while(true) {
                // read temperature
                serial.printf("temp = %3.1f\r\n", ds1820.read());
                ds1820.startConversion();  // start temperature conversion

                i++; // fake data update
                message_t *message = mpool.alloc();
                message->type = TEMP;
                message->sensor.temperature = ds1820.read();
                message->counter = i;
                
                queue.put(message);

                Thread::wait(250);         // let DS1820 complete the temperature conversion
            }
        } else
            serial.printf("No DS1820 sensor found!\r\n");

        Thread::wait(1000);
    }
}