init
Dependencies: DS1820 PID max6675 mbed-STM32F103C8T6 mbed-rtos mbed millis
Diff: main.cpp
- Revision:
- 0:d1510e5f71f1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Oct 16 19:43:34 2017 +0000 @@ -0,0 +1,108 @@ +#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); + } +}