init

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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 
00004 //----
00005 
00006 #include "millis.h"
00007 
00008 //----
00009 #include "DS1820.h"
00010 
00011 //--- Thread
00012 Thread tTempCtrl;
00013 Thread tMainCtrl;
00014 
00015 //--- Function
00016 void TempController();
00017 void MainController();
00018 
00019 //---
00020 #define TEMP 1
00021 #define LICHT 2
00022 
00023 typedef struct checkedUnion {
00024     int type;
00025     union sensor_u {
00026         float  temperature;
00027         float  licht;
00028     } sensor;
00029 
00030     uint32_t counter;   /* A counter value               */
00031 } message_t;
00032 
00033 //---
00034 Serial serial(USBTX, USBRX);
00035 DS1820 ds1820(PA_9);
00036 
00037 //---
00038 MemoryPool<message_t, 8> mpool;
00039 Queue<message_t, 8> queue;
00040 
00041 //---
00042 int main()
00043 {
00044     serial.baud(19200);
00045     
00046     tTempCtrl.start(TempController);
00047     tMainCtrl.start(MainController);
00048 
00049     Thread::wait(osWaitForever);
00050 }
00051 
00052 void MainController()
00053 {
00054     float  temperature;
00055     float  licht;
00056     
00057     while (true) {
00058         osEvent evt = queue.get();
00059         if (evt.status == osEventMessage) {
00060             message_t *message = (message_t*)evt.value.p;
00061             switch ( message->type ) {
00062                 case TEMP:
00063                     printf("\Temperature: %.2f C\n\r", message->sensor.temperature);
00064                     temperature = message->sensor.temperature;
00065                     break;
00066                 case LICHT:
00067                     printf("\Licht: %.2f C\n\r", message->sensor.licht);
00068                     licht = message->sensor.temperature;
00069                     break;
00070             }
00071             printf("Number of cycles: %u\n\r", message->counter);
00072 
00073             mpool.free(message);
00074         }
00075         
00076         Thread::wait(1);
00077     }
00078 }
00079 
00080 void TempController()
00081 {
00082     uint32_t i = 0;
00083 
00084     while (true) {
00085         if(ds1820.begin()) {
00086             ds1820.startConversion();
00087             Thread::wait(500);
00088             while(true) {
00089                 // read temperature
00090                 serial.printf("temp = %3.1f\r\n", ds1820.read());
00091                 ds1820.startConversion();  // start temperature conversion
00092 
00093                 i++; // fake data update
00094                 message_t *message = mpool.alloc();
00095                 message->type = TEMP;
00096                 message->sensor.temperature = ds1820.read();
00097                 message->counter = i;
00098                 
00099                 queue.put(message);
00100 
00101                 Thread::wait(250);         // let DS1820 complete the temperature conversion
00102             }
00103         } else
00104             serial.printf("No DS1820 sensor found!\r\n");
00105 
00106         Thread::wait(1000);
00107     }
00108 }