init
Dependencies: DS1820 PID max6675 mbed-STM32F103C8T6 mbed-rtos mbed millis
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 }
Generated on Wed Jul 13 2022 13:02:11 by 1.7.2