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

Committer:
rogerzuber
Date:
Fri Sep 24 09:50:16 2021 +0000
Revision:
1:12451c43fd61
Parent:
0:680471563758
Schritt 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rogerzuber 0:680471563758 1 /* mbed Microcontroller Library
rogerzuber 0:680471563758 2 * Copyright (c) 2019 ARM Limited
rogerzuber 0:680471563758 3 * SPDX-License-Identifier: Apache-2.0
rogerzuber 0:680471563758 4 */
rogerzuber 0:680471563758 5
rogerzuber 0:680471563758 6 #include "mbed.h"
rogerzuber 0:680471563758 7 #include "platform/mbed_thread.h"
rogerzuber 0:680471563758 8 #include "ShiftOut.h"
rogerzuber 0:680471563758 9
rogerzuber 0:680471563758 10 // Blinking rate in milliseconds
rogerzuber 0:680471563758 11 #define BLINKING_RATE_MS 500
rogerzuber 0:680471563758 12
rogerzuber 0:680471563758 13 ShiftOut Seg7(D8, D7, D4, D13, D12);
rogerzuber 0:680471563758 14
rogerzuber 1:12451c43fd61 15 const char SEGMENT_MAP[] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0xFF,0x63};
rogerzuber 0:680471563758 16 const char SEGMENT_SELECT[] = {0x8F,0x4F,0x2F,0x1F};
rogerzuber 0:680471563758 17
rogerzuber 0:680471563758 18 Thread Thread1;
rogerzuber 1:12451c43fd61 19 Thread Thread2;
rogerzuber 0:680471563758 20
rogerzuber 1:12451c43fd61 21 AnalogIn adc_temp(A4);
rogerzuber 1:12451c43fd61 22
rogerzuber 1:12451c43fd61 23 int TempMittelwert = 200;
rogerzuber 0:680471563758 24
rogerzuber 0:680471563758 25 void Anzeige_Thread(void)
rogerzuber 0:680471563758 26 {
rogerzuber 0:680471563758 27 while (1)
rogerzuber 0:680471563758 28 {
rogerzuber 1:12451c43fd61 29 Seg7.write2Byte(SEGMENT_MAP[TempMittelwert/100] + (SEGMENT_SELECT[0]<<8));
rogerzuber 1:12451c43fd61 30 ThisThread::sleep_for(1);
rogerzuber 1:12451c43fd61 31 Seg7.write2Byte(SEGMENT_MAP[TempMittelwert%100/10] + (SEGMENT_SELECT[1]<<8)& 0xFFFE);
rogerzuber 1:12451c43fd61 32 ThisThread::sleep_for(1);
rogerzuber 1:12451c43fd61 33 Seg7.write2Byte(SEGMENT_MAP[TempMittelwert%10] + (SEGMENT_SELECT[2]<<8));
rogerzuber 1:12451c43fd61 34 ThisThread::sleep_for(1);
rogerzuber 1:12451c43fd61 35 Seg7.write2Byte(SEGMENT_MAP[11] + (SEGMENT_SELECT[3]<<8));
rogerzuber 0:680471563758 36 ThisThread::sleep_for(1);
rogerzuber 0:680471563758 37 }
rogerzuber 0:680471563758 38 }
rogerzuber 0:680471563758 39
rogerzuber 1:12451c43fd61 40 void Messung_Thread(void)
rogerzuber 1:12451c43fd61 41 {
rogerzuber 1:12451c43fd61 42 float Temperatur;
rogerzuber 1:12451c43fd61 43 while (1)
rogerzuber 1:12451c43fd61 44 {
rogerzuber 1:12451c43fd61 45 Temperatur = (float)(3300 * adc_temp.read() - 2637) / -13.6;
rogerzuber 1:12451c43fd61 46 TempMittelwert = (int)(Temperatur - 20) * 10;
rogerzuber 1:12451c43fd61 47 ThisThread::sleep_for(10);
rogerzuber 1:12451c43fd61 48 }
rogerzuber 1:12451c43fd61 49 }
rogerzuber 1:12451c43fd61 50
rogerzuber 0:680471563758 51 int main()
rogerzuber 0:680471563758 52 {
rogerzuber 0:680471563758 53 // Initialise the digital pin LED1 as an output
rogerzuber 0:680471563758 54 DigitalOut led(LED1);
rogerzuber 0:680471563758 55
rogerzuber 0:680471563758 56 Thread1.start(Anzeige_Thread); // Thread starten
rogerzuber 1:12451c43fd61 57 Thread2.start(Messung_Thread); // Thread starten
rogerzuber 0:680471563758 58
rogerzuber 0:680471563758 59 while (true) {
rogerzuber 0:680471563758 60 led = !led;
rogerzuber 0:680471563758 61 thread_sleep_for(BLINKING_RATE_MS);
rogerzuber 0:680471563758 62 }
rogerzuber 0:680471563758 63 }