Multithreading Solution for A13 Temperatur, Servo, Display Roger Zuber, BZTF

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }