Lehrer Busch / Mbed OS xxx_Garagentor

Dependencies:   LCD_i2c_GSOE

Committer:
jack1930
Date:
Wed Jun 30 12:54:13 2021 +0000
Revision:
0:763fd05f2a27
Child:
1:73315e249185
V1.0

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 0:763fd05f2a27 16 #define Zu 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 0:763fd05f2a27 32 int Zustand=Init;
jack1930 0:763fd05f2a27 33
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 0:763fd05f2a27 67 void ADC_PWMCW()
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 0:763fd05f2a27 73 void ADC_PWMCCW()
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 0:763fd05f2a27 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 0:763fd05f2a27 103 void ISR_EXT_IR()
jack1930 0:763fd05f2a27 104 {
jack1930 0:763fd05f2a27 105 if (Zustand==Schliessen || Zustand==Oeffnen)
jack1930 0:763fd05f2a27 106 {
jack1930 0:763fd05f2a27 107 Zustand=Gestoppt;
jack1930 0:763fd05f2a27 108 motorstop();
jack1930 0:763fd05f2a27 109 LCDout(2);
jack1930 0:763fd05f2a27 110 doppelteFrequenz();
jack1930 0:763fd05f2a27 111 }
jack1930 0:763fd05f2a27 112 }
jack1930 0:763fd05f2a27 113
jack1930 0:763fd05f2a27 114 void init()
jack1930 0:763fd05f2a27 115 {
jack1930 0:763fd05f2a27 116 TorAuf.mode(PullDown);
jack1930 0:763fd05f2a27 117 TorZu.mode(PullDown);
jack1930 0:763fd05f2a27 118 Stop.mode(PullDown);
jack1930 0:763fd05f2a27 119 EndschalterOffen.mode(PullDown);
jack1930 0:763fd05f2a27 120 EndschalterZu.mode(PullDown);
jack1930 0:763fd05f2a27 121 Stop.fall(&ISR_EXT_IR);
jack1930 0:763fd05f2a27 122 Stop.enable_irq();
jack1930 0:763fd05f2a27 123 CW.period_us(100);
jack1930 0:763fd05f2a27 124 CCW.period_us(100);
jack1930 0:763fd05f2a27 125 CW=0;
jack1930 0:763fd05f2a27 126 CCW=0;
jack1930 0:763fd05f2a27 127 Timer_init();
jack1930 0:763fd05f2a27 128 Zustand=Zu;
jack1930 0:763fd05f2a27 129 }
jack1930 0:763fd05f2a27 130
jack1930 0:763fd05f2a27 131
jack1930 0:763fd05f2a27 132 int main()
jack1930 0:763fd05f2a27 133 {
jack1930 0:763fd05f2a27 134
jack1930 0:763fd05f2a27 135 init();
jack1930 0:763fd05f2a27 136 while (true) {
jack1930 0:763fd05f2a27 137 switch(Zustand)
jack1930 0:763fd05f2a27 138 {
jack1930 0:763fd05f2a27 139 case Zu: if (TorAuf==1)
jack1930 0:763fd05f2a27 140 {
jack1930 0:763fd05f2a27 141
jack1930 0:763fd05f2a27 142 Zustand=Oeffnen;
jack1930 0:763fd05f2a27 143 blinkenEin();
jack1930 0:763fd05f2a27 144 LCDout(3);
jack1930 0:763fd05f2a27 145 }
jack1930 0:763fd05f2a27 146 break;
jack1930 0:763fd05f2a27 147 case Oeffnen:
jack1930 0:763fd05f2a27 148 ADC_PWMCCW();
jack1930 0:763fd05f2a27 149 if (EndschalterOffen==1)
jack1930 0:763fd05f2a27 150 {
jack1930 0:763fd05f2a27 151 blinkenAus();
jack1930 0:763fd05f2a27 152 Zustand=Offen;
jack1930 0:763fd05f2a27 153 motorstop();
jack1930 0:763fd05f2a27 154 LCDout(0);
jack1930 0:763fd05f2a27 155 }
jack1930 0:763fd05f2a27 156 break;
jack1930 0:763fd05f2a27 157 case Offen: if (TorZu==1)
jack1930 0:763fd05f2a27 158 {
jack1930 0:763fd05f2a27 159 Zustand=Schliessen;
jack1930 0:763fd05f2a27 160 blinkenEin();
jack1930 0:763fd05f2a27 161 LCDout(3);
jack1930 0:763fd05f2a27 162 }
jack1930 0:763fd05f2a27 163 break;
jack1930 0:763fd05f2a27 164 case Schliessen:
jack1930 0:763fd05f2a27 165 ADC_PWMCW();
jack1930 0:763fd05f2a27 166 if (EndschalterZu==1)
jack1930 0:763fd05f2a27 167 {
jack1930 0:763fd05f2a27 168 Zustand=Zu;
jack1930 0:763fd05f2a27 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 0:763fd05f2a27 175 if (TorAuf==1)
jack1930 0:763fd05f2a27 176 {
jack1930 0:763fd05f2a27 177 LCDout(3);
jack1930 0:763fd05f2a27 178 Zustand=Oeffnen;
jack1930 0:763fd05f2a27 179 blinkenEin();
jack1930 0:763fd05f2a27 180 normaleFrequenz();
jack1930 0:763fd05f2a27 181 }
jack1930 0:763fd05f2a27 182 if (TorZu==1)
jack1930 0:763fd05f2a27 183 {
jack1930 0:763fd05f2a27 184 LCDout(3);
jack1930 0:763fd05f2a27 185 Zustand=Schliessen;
jack1930 0:763fd05f2a27 186 blinkenEin();
jack1930 0:763fd05f2a27 187 normaleFrequenz();
jack1930 0:763fd05f2a27 188 }
jack1930 0:763fd05f2a27 189 break;
jack1930 0:763fd05f2a27 190 }
jack1930 0:763fd05f2a27 191 }
jack1930 0:763fd05f2a27 192 }