Multithreading Solution for A13 Temperatur, Servo, Display Roger Zuber, BZTF
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /* mbed Microcontroller Library 00002 * Copyright (c) 2019 ARM Limited 00003 * SPDX-License-Identifier: Apache-2.0 00004 */ 00005 00006 #include "mbed.h" 00007 #include "platform/mbed_thread.h" 00008 #include "ShiftOut.h" 00009 00010 // Blinking rate in milliseconds 00011 #define BLINKING_RATE_MS 500 00012 00013 ShiftOut Seg7(D8, D7, D4, D13, D12); 00014 00015 const char SEGMENT_MAP[] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0xFF,0x63}; 00016 const char SEGMENT_SELECT[] = {0x8F,0x4F,0x2F,0x1F}; 00017 00018 Thread Thread1; 00019 Thread Thread2; 00020 00021 AnalogIn adc_temp(A4); 00022 00023 int TempMittelwert = 200; 00024 00025 void Anzeige_Thread(void) 00026 { 00027 while (1) 00028 { 00029 Seg7.write2Byte(SEGMENT_MAP[TempMittelwert/100] + (SEGMENT_SELECT[0]<<8)); 00030 ThisThread::sleep_for(1); 00031 Seg7.write2Byte(SEGMENT_MAP[TempMittelwert%100/10] + (SEGMENT_SELECT[1]<<8)& 0xFFFE); 00032 ThisThread::sleep_for(1); 00033 Seg7.write2Byte(SEGMENT_MAP[TempMittelwert%10] + (SEGMENT_SELECT[2]<<8)); 00034 ThisThread::sleep_for(1); 00035 Seg7.write2Byte(SEGMENT_MAP[11] + (SEGMENT_SELECT[3]<<8)); 00036 ThisThread::sleep_for(1); 00037 } 00038 } 00039 00040 void Messung_Thread(void) 00041 { 00042 float Temperatur; 00043 while (1) 00044 { 00045 Temperatur = (float)(3300 * adc_temp.read() - 2637) / -13.6; 00046 TempMittelwert = (int)(Temperatur - 20) * 10; 00047 ThisThread::sleep_for(10); 00048 } 00049 } 00050 00051 int main() 00052 { 00053 // Initialise the digital pin LED1 as an output 00054 DigitalOut led(LED1); 00055 00056 Thread1.start(Anzeige_Thread); // Thread starten 00057 Thread2.start(Messung_Thread); // Thread starten 00058 00059 while (true) { 00060 led = !led; 00061 thread_sleep_for(BLINKING_RATE_MS); 00062 } 00063 }
Generated on Thu Aug 11 2022 00:29:17 by
1.7.2