Lehrer Busch / Mbed OS xxx_Garagentor

Dependencies:   LCD_i2c_GSOE

Committer:
jack1930
Date:
Thu Jul 01 10:11:10 2021 +0000
Revision:
1:73315e249185
Parent:
0:763fd05f2a27
Child:
2:ce1e2d72919d
Anspassung der Bezeichnungen

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 0:763fd05f2a27 22 DigitalIn TorAuf(PA_1);
jack1930 0:763fd05f2a27 23 DigitalIn TorZu(PA_6);
jack1930 0:763fd05f2a27 24 InterruptIn Stop(PA_10);
jack1930 0:763fd05f2a27 25 DigitalIn EndschalterOffen(PB_0);
jack1930 0:763fd05f2a27 26 DigitalIn EndschalterZu(PB_3);
jack1930 0:763fd05f2a27 27 PwmOut CW(PC_6);
jack1930 0:763fd05f2a27 28 PwmOut CCW(PC_7);
jack1930 0:763fd05f2a27 29 AnalogIn Poti(PA_0);
jack1930 0:763fd05f2a27 30 DigitalOut Leuchte(PC_0);
jack1930 0:763fd05f2a27 31
jack1930 1:73315e249185 32 int zustand=Init;
jack1930 1:73315e249185 33 float tastgrad;
jack1930 0:763fd05f2a27 34 string meldung[]={"Tor-auf","Tor-zu","Tor-stop","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 0:763fd05f2a27 44 Leuchte=0;
jack1930 0:763fd05f2a27 45 }
jack1930 0:763fd05f2a27 46
jack1930 0:763fd05f2a27 47 void isr_Timer()
jack1930 0:763fd05f2a27 48 {
jack1930 0:763fd05f2a27 49 Leuchte=!Leuchte;
jack1930 0:763fd05f2a27 50 HAL_NVIC_ClearPendingIRQ(TIM6_IRQn);
jack1930 0:763fd05f2a27 51 TIM6->SR=0;
jack1930 0:763fd05f2a27 52 }
jack1930 0:763fd05f2a27 53
jack1930 0:763fd05f2a27 54 void Timer_init()
jack1930 0:763fd05f2a27 55 {
jack1930 0:763fd05f2a27 56 RCC->APB1ENR |= 0b10000; //TIM6
jack1930 0:763fd05f2a27 57 TIM6->PSC=31999; //1ms
jack1930 0:763fd05f2a27 58 TIM6->ARR=499; //500ms
jack1930 0:763fd05f2a27 59 TIM6->CNT=0; //Counter startet bei 0
jack1930 0:763fd05f2a27 60 TIM6->SR=0; //UIF =0
jack1930 0:763fd05f2a27 61 TIM6->DIER=1; //Interrupt Freigabe
jack1930 0:763fd05f2a27 62 NVIC_SetVector(TIM6_IRQn,(uint32_t)&isr_Timer);
jack1930 0:763fd05f2a27 63 HAL_NVIC_EnableIRQ(TIM6_IRQn);
jack1930 0:763fd05f2a27 64 __enable_irq();
jack1930 0:763fd05f2a27 65 }
jack1930 0:763fd05f2a27 66
jack1930 1:73315e249185 67 void torAufCW()
jack1930 0:763fd05f2a27 68 {
jack1930 0:763fd05f2a27 69 CCW=0;
jack1930 0:763fd05f2a27 70 CW=Poti;
jack1930 0:763fd05f2a27 71 }
jack1930 0:763fd05f2a27 72
jack1930 1:73315e249185 73 void torZuCCW()
jack1930 0:763fd05f2a27 74 {
jack1930 0:763fd05f2a27 75 CW=0;
jack1930 0:763fd05f2a27 76 CCW=Poti;
jack1930 0:763fd05f2a27 77 }
jack1930 0:763fd05f2a27 78
jack1930 1:73315e249185 79 void lcdOut(int nr)
jack1930 0:763fd05f2a27 80 {
jack1930 0:763fd05f2a27 81 mylcd.clear();
jack1930 0:763fd05f2a27 82 mylcd.cursorpos(0);
jack1930 0:763fd05f2a27 83 mylcd.printf("%s",meldung[nr].c_str());
jack1930 0:763fd05f2a27 84 }
jack1930 0:763fd05f2a27 85
jack1930 0:763fd05f2a27 86 void motorstop()
jack1930 0:763fd05f2a27 87 {
jack1930 0:763fd05f2a27 88 CW=0;
jack1930 0:763fd05f2a27 89 CCW=0;
jack1930 0:763fd05f2a27 90 }
jack1930 0:763fd05f2a27 91
jack1930 0:763fd05f2a27 92 void normaleFrequenz()
jack1930 0:763fd05f2a27 93 {
jack1930 0:763fd05f2a27 94 TIM6->ARR=499; //500ms
jack1930 0:763fd05f2a27 95 }
jack1930 0:763fd05f2a27 96
jack1930 0:763fd05f2a27 97 void doppelteFrequenz()
jack1930 0:763fd05f2a27 98 {
jack1930 0:763fd05f2a27 99 TIM6->CNT=0; //Counter startet bei 0
jack1930 0:763fd05f2a27 100 TIM6->ARR=249; //250ms
jack1930 0:763fd05f2a27 101
jack1930 0:763fd05f2a27 102 }
jack1930 1:73315e249185 103 void schnellstop()
jack1930 0:763fd05f2a27 104 {
jack1930 1:73315e249185 105 if (zustand==Schliessen || zustand==Oeffnen)
jack1930 0:763fd05f2a27 106 {
jack1930 1:73315e249185 107 zustand=Gestoppt;
jack1930 1:73315e249185 108 lcdOut(2);
jack1930 0:763fd05f2a27 109 doppelteFrequenz();
jack1930 0:763fd05f2a27 110 }
jack1930 0:763fd05f2a27 111 }
jack1930 0:763fd05f2a27 112
jack1930 0:763fd05f2a27 113 void init()
jack1930 0:763fd05f2a27 114 {
jack1930 0:763fd05f2a27 115 TorAuf.mode(PullDown);
jack1930 0:763fd05f2a27 116 TorZu.mode(PullDown);
jack1930 0:763fd05f2a27 117 Stop.mode(PullDown);
jack1930 0:763fd05f2a27 118 EndschalterOffen.mode(PullDown);
jack1930 0:763fd05f2a27 119 EndschalterZu.mode(PullDown);
jack1930 1:73315e249185 120 Stop.fall(&schnellstop);
jack1930 0:763fd05f2a27 121 Stop.enable_irq();
jack1930 0:763fd05f2a27 122 CW.period_us(100);
jack1930 0:763fd05f2a27 123 CCW.period_us(100);
jack1930 0:763fd05f2a27 124 Timer_init();
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 init();
jack1930 1:73315e249185 132 zustand=Geschlossen;
jack1930 1:73315e249185 133 motorstop();
jack1930 1:73315e249185 134 lcdOut(1);
jack1930 0:763fd05f2a27 135 while (true) {
jack1930 1:73315e249185 136 switch(zustand)
jack1930 0:763fd05f2a27 137 {
jack1930 1:73315e249185 138 case Geschlossen: if (TorAuf==1)
jack1930 1:73315e249185 139 {
jack1930 1:73315e249185 140 zustand=Oeffnen;
jack1930 0:763fd05f2a27 141 blinkenEin();
jack1930 1:73315e249185 142 lcdOut(3);
jack1930 0:763fd05f2a27 143 }
jack1930 0:763fd05f2a27 144 break;
jack1930 0:763fd05f2a27 145 case Oeffnen:
jack1930 1:73315e249185 146 torAufCW();
jack1930 0:763fd05f2a27 147 if (EndschalterOffen==1)
jack1930 0:763fd05f2a27 148 {
jack1930 0:763fd05f2a27 149 blinkenAus();
jack1930 1:73315e249185 150 zustand=Offen;
jack1930 0:763fd05f2a27 151 motorstop();
jack1930 1:73315e249185 152 lcdOut(0);
jack1930 0:763fd05f2a27 153 }
jack1930 0:763fd05f2a27 154 break;
jack1930 0:763fd05f2a27 155 case Offen: if (TorZu==1)
jack1930 0:763fd05f2a27 156 {
jack1930 1:73315e249185 157 zustand=Schliessen;
jack1930 0:763fd05f2a27 158 blinkenEin();
jack1930 1:73315e249185 159 lcdOut(3);
jack1930 0:763fd05f2a27 160 }
jack1930 0:763fd05f2a27 161 break;
jack1930 0:763fd05f2a27 162 case Schliessen:
jack1930 1:73315e249185 163 torZuCCW();
jack1930 0:763fd05f2a27 164 if (EndschalterZu==1)
jack1930 0:763fd05f2a27 165 {
jack1930 1:73315e249185 166 zustand=Geschlossen;
jack1930 1:73315e249185 167 lcdOut(1);
jack1930 0:763fd05f2a27 168 motorstop();
jack1930 0:763fd05f2a27 169 blinkenAus();
jack1930 0:763fd05f2a27 170 }
jack1930 0:763fd05f2a27 171 break;
jack1930 0:763fd05f2a27 172 case Gestoppt:
jack1930 1:73315e249185 173 motorstop();
jack1930 0:763fd05f2a27 174 if (TorAuf==1)
jack1930 0:763fd05f2a27 175 {
jack1930 1:73315e249185 176 lcdOut(3);
jack1930 1:73315e249185 177 zustand=Oeffnen;
jack1930 0:763fd05f2a27 178 blinkenEin();
jack1930 0:763fd05f2a27 179 normaleFrequenz();
jack1930 0:763fd05f2a27 180 }
jack1930 0:763fd05f2a27 181 if (TorZu==1)
jack1930 0:763fd05f2a27 182 {
jack1930 1:73315e249185 183 lcdOut(3);
jack1930 1:73315e249185 184 zustand=Schliessen;
jack1930 0:763fd05f2a27 185 blinkenEin();
jack1930 0:763fd05f2a27 186 normaleFrequenz();
jack1930 0:763fd05f2a27 187 }
jack1930 0:763fd05f2a27 188 break;
jack1930 0:763fd05f2a27 189 }
jack1930 1:73315e249185 190 HAL_Delay(20);
jack1930 0:763fd05f2a27 191 }
jack1930 0:763fd05f2a27 192 }