Dependencies:   LCD_i2c_GSOE

Committer:
jack1930
Date:
Fri Jan 07 16:31:24 2022 +0000
Revision:
3:aafd73c67be1
Parent:
2:ce1e2d72919d
Angepasst an Musteraufgabe

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jack1930 0:763fd05f2a27 1 /* mbed Microcontroller Library
jack1930 0:763fd05f2a27 2 * Copyright (c) 2019 ARM Limited
jack1930 0:763fd05f2a27 3 * SPDX-License-Identifier: Apache-2.0
jack1930 0:763fd05f2a27 4 */
jack1930 0:763fd05f2a27 5
jack1930 0:763fd05f2a27 6 #include "mbed.h"
jack1930 0:763fd05f2a27 7 #include "platform/mbed_thread.h"
jack1930 0:763fd05f2a27 8 #include "LCD.h"
jack1930 0:763fd05f2a27 9 #include <string>
jack1930 0:763fd05f2a27 10
jack1930 0:763fd05f2a27 11
jack1930 0:763fd05f2a27 12 // Blinking rate in milliseconds
jack1930 0:763fd05f2a27 13 #define BLINKING_RATE_MS 500
jack1930 0:763fd05f2a27 14
jack1930 0:763fd05f2a27 15 #define Init 0
jack1930 1:73315e249185 16 #define Geschlossen 1
jack1930 0:763fd05f2a27 17 #define Oeffnen 2
jack1930 0:763fd05f2a27 18 #define Offen 3
jack1930 0:763fd05f2a27 19 #define Schliessen 4
jack1930 0:763fd05f2a27 20 #define Gestoppt 5
jack1930 0:763fd05f2a27 21 lcd mylcd;
jack1930 2:ce1e2d72919d 22 DigitalIn TorOeffnen(PA_1);
jack1930 2:ce1e2d72919d 23 DigitalIn TorSchliessen(PA_6);
jack1930 2:ce1e2d72919d 24 InterruptIn Lichtschranke(PA_10);
jack1930 0:763fd05f2a27 25 DigitalIn EndschalterOffen(PB_0);
jack1930 0:763fd05f2a27 26 DigitalIn EndschalterZu(PB_3);
jack1930 2:ce1e2d72919d 27 PwmOut heben(PC_6);
jack1930 2:ce1e2d72919d 28 PwmOut senken(PC_7);
jack1930 3:aafd73c67be1 29 AnalogIn Geschwindigkeit(PA_0);
jack1930 3:aafd73c67be1 30 DigitalOut Warnleuchte(PC_0);
jack1930 0:763fd05f2a27 31
jack1930 1:73315e249185 32 int zustand=Init;
jack1930 1:73315e249185 33 float tastgrad;
jack1930 2:ce1e2d72919d 34 string meldung[]={"Tor-offen","Tor-zu","Tor-gestoppt","Tor-faehrt"};
jack1930 0:763fd05f2a27 35
jack1930 0:763fd05f2a27 36 void blinkenEin()
jack1930 0:763fd05f2a27 37 {
jack1930 0:763fd05f2a27 38 TIM6->CR1=1;
jack1930 0:763fd05f2a27 39 }
jack1930 0:763fd05f2a27 40
jack1930 0:763fd05f2a27 41 void blinkenAus()
jack1930 0:763fd05f2a27 42 {
jack1930 0:763fd05f2a27 43 TIM6->CR1=0;
jack1930 3:aafd73c67be1 44 Warnleuchte=0;
jack1930 0:763fd05f2a27 45 }
jack1930 0:763fd05f2a27 46
jack1930 3:aafd73c67be1 47 void isrTimer()
jack1930 0:763fd05f2a27 48 {
jack1930 0:763fd05f2a27 49 TIM6->SR=0;
jack1930 3:aafd73c67be1 50 Warnleuchte=!Warnleuchte;
jack1930 0:763fd05f2a27 51 }
jack1930 0:763fd05f2a27 52
jack1930 3:aafd73c67be1 53 void initTimer()
jack1930 0:763fd05f2a27 54 {
jack1930 0:763fd05f2a27 55 RCC->APB1ENR |= 0b10000; //TIM6
jack1930 0:763fd05f2a27 56 TIM6->PSC=31999; //1ms
jack1930 0:763fd05f2a27 57 TIM6->ARR=499; //500ms
jack1930 0:763fd05f2a27 58 TIM6->CNT=0; //Counter startet bei 0
jack1930 0:763fd05f2a27 59 TIM6->SR=0; //UIF =0
jack1930 0:763fd05f2a27 60 TIM6->DIER=1; //Interrupt Freigabe
jack1930 3:aafd73c67be1 61 NVIC_SetVector(TIM6_IRQn,(uint32_t)&isrTimer);
jack1930 0:763fd05f2a27 62 HAL_NVIC_EnableIRQ(TIM6_IRQn);
jack1930 0:763fd05f2a27 63 __enable_irq();
jack1930 0:763fd05f2a27 64 }
jack1930 0:763fd05f2a27 65
jack1930 2:ce1e2d72919d 66 void oeffnen()
jack1930 0:763fd05f2a27 67 {
jack1930 2:ce1e2d72919d 68 senken=0;
jack1930 3:aafd73c67be1 69 heben=Geschwindigkeit;
jack1930 0:763fd05f2a27 70 }
jack1930 0:763fd05f2a27 71
jack1930 2:ce1e2d72919d 72 void schliessen()
jack1930 0:763fd05f2a27 73 {
jack1930 2:ce1e2d72919d 74 heben=0;
jack1930 3:aafd73c67be1 75 senken=Geschwindigkeit;
jack1930 0:763fd05f2a27 76 }
jack1930 0:763fd05f2a27 77
jack1930 1:73315e249185 78 void lcdOut(int nr)
jack1930 0:763fd05f2a27 79 {
jack1930 0:763fd05f2a27 80 mylcd.clear();
jack1930 0:763fd05f2a27 81 mylcd.cursorpos(0);
jack1930 0:763fd05f2a27 82 mylcd.printf("%s",meldung[nr].c_str());
jack1930 0:763fd05f2a27 83 }
jack1930 0:763fd05f2a27 84
jack1930 0:763fd05f2a27 85 void motorstop()
jack1930 0:763fd05f2a27 86 {
jack1930 2:ce1e2d72919d 87 heben=0;
jack1930 2:ce1e2d72919d 88 senken=0;
jack1930 0:763fd05f2a27 89 }
jack1930 0:763fd05f2a27 90
jack1930 0:763fd05f2a27 91 void normaleFrequenz()
jack1930 0:763fd05f2a27 92 {
jack1930 0:763fd05f2a27 93 TIM6->ARR=499; //500ms
jack1930 0:763fd05f2a27 94 }
jack1930 0:763fd05f2a27 95
jack1930 0:763fd05f2a27 96 void doppelteFrequenz()
jack1930 0:763fd05f2a27 97 {
jack1930 0:763fd05f2a27 98 TIM6->CNT=0; //Counter startet bei 0
jack1930 0:763fd05f2a27 99 TIM6->ARR=249; //250ms
jack1930 0:763fd05f2a27 100
jack1930 0:763fd05f2a27 101 }
jack1930 1:73315e249185 102 void schnellstop()
jack1930 0:763fd05f2a27 103 {
jack1930 1:73315e249185 104 if (zustand==Schliessen || zustand==Oeffnen)
jack1930 0:763fd05f2a27 105 {
jack1930 1:73315e249185 106 zustand=Gestoppt;
jack1930 1:73315e249185 107 lcdOut(2);
jack1930 0:763fd05f2a27 108 doppelteFrequenz();
jack1930 0:763fd05f2a27 109 }
jack1930 0:763fd05f2a27 110 }
jack1930 0:763fd05f2a27 111
jack1930 0:763fd05f2a27 112 void init()
jack1930 0:763fd05f2a27 113 {
jack1930 2:ce1e2d72919d 114 TorOeffnen.mode(PullDown);
jack1930 2:ce1e2d72919d 115 TorSchliessen.mode(PullDown);
jack1930 2:ce1e2d72919d 116 Lichtschranke.mode(PullDown);
jack1930 0:763fd05f2a27 117 EndschalterOffen.mode(PullDown);
jack1930 0:763fd05f2a27 118 EndschalterZu.mode(PullDown);
jack1930 2:ce1e2d72919d 119 Lichtschranke.fall(&schnellstop);
jack1930 2:ce1e2d72919d 120 Lichtschranke.enable_irq();
jack1930 3:aafd73c67be1 121 __enable_irq();
jack1930 2:ce1e2d72919d 122 heben.period_us(100);
jack1930 2:ce1e2d72919d 123 senken.period_us(100);
jack1930 3:aafd73c67be1 124 initTimer();
jack1930 1:73315e249185 125
jack1930 0:763fd05f2a27 126 }
jack1930 0:763fd05f2a27 127
jack1930 0:763fd05f2a27 128
jack1930 0:763fd05f2a27 129 int main()
jack1930 0:763fd05f2a27 130 {
jack1930 0:763fd05f2a27 131 while (true) {
jack1930 1:73315e249185 132 switch(zustand)
jack1930 0:763fd05f2a27 133 {
jack1930 3:aafd73c67be1 134 case Init:
jack1930 3:aafd73c67be1 135 init();
jack1930 3:aafd73c67be1 136 zustand=Geschlossen;
jack1930 3:aafd73c67be1 137 motorstop();
jack1930 3:aafd73c67be1 138 lcdOut(1);
jack1930 3:aafd73c67be1 139 break;
jack1930 2:ce1e2d72919d 140 case Geschlossen: if (TorOeffnen==1)
jack1930 1:73315e249185 141 {
jack1930 1:73315e249185 142 zustand=Oeffnen;
jack1930 0:763fd05f2a27 143 blinkenEin();
jack1930 1:73315e249185 144 lcdOut(3);
jack1930 0:763fd05f2a27 145 }
jack1930 0:763fd05f2a27 146 break;
jack1930 0:763fd05f2a27 147 case Oeffnen:
jack1930 2:ce1e2d72919d 148 oeffnen();
jack1930 0:763fd05f2a27 149 if (EndschalterOffen==1)
jack1930 0:763fd05f2a27 150 {
jack1930 0:763fd05f2a27 151 blinkenAus();
jack1930 1:73315e249185 152 zustand=Offen;
jack1930 0:763fd05f2a27 153 motorstop();
jack1930 1:73315e249185 154 lcdOut(0);
jack1930 0:763fd05f2a27 155 }
jack1930 0:763fd05f2a27 156 break;
jack1930 2:ce1e2d72919d 157 case Offen: if (TorSchliessen==1)
jack1930 0:763fd05f2a27 158 {
jack1930 1:73315e249185 159 zustand=Schliessen;
jack1930 0:763fd05f2a27 160 blinkenEin();
jack1930 1:73315e249185 161 lcdOut(3);
jack1930 0:763fd05f2a27 162 }
jack1930 0:763fd05f2a27 163 break;
jack1930 0:763fd05f2a27 164 case Schliessen:
jack1930 2:ce1e2d72919d 165 schliessen();
jack1930 0:763fd05f2a27 166 if (EndschalterZu==1)
jack1930 0:763fd05f2a27 167 {
jack1930 1:73315e249185 168 zustand=Geschlossen;
jack1930 1:73315e249185 169 lcdOut(1);
jack1930 0:763fd05f2a27 170 motorstop();
jack1930 0:763fd05f2a27 171 blinkenAus();
jack1930 0:763fd05f2a27 172 }
jack1930 0:763fd05f2a27 173 break;
jack1930 0:763fd05f2a27 174 case Gestoppt:
jack1930 1:73315e249185 175 motorstop();
jack1930 2:ce1e2d72919d 176 if (TorOeffnen==1)
jack1930 0:763fd05f2a27 177 {
jack1930 1:73315e249185 178 lcdOut(3);
jack1930 1:73315e249185 179 zustand=Oeffnen;
jack1930 0:763fd05f2a27 180 blinkenEin();
jack1930 0:763fd05f2a27 181 normaleFrequenz();
jack1930 0:763fd05f2a27 182 }
jack1930 2:ce1e2d72919d 183 if (TorSchliessen==1)
jack1930 0:763fd05f2a27 184 {
jack1930 1:73315e249185 185 lcdOut(3);
jack1930 1:73315e249185 186 zustand=Schliessen;
jack1930 0:763fd05f2a27 187 blinkenEin();
jack1930 0:763fd05f2a27 188 normaleFrequenz();
jack1930 0:763fd05f2a27 189 }
jack1930 0:763fd05f2a27 190 break;
jack1930 0:763fd05f2a27 191 }
jack1930 1:73315e249185 192 HAL_Delay(20);
jack1930 0:763fd05f2a27 193 }
jack1930 0:763fd05f2a27 194 }