Jack Hansdampf / Mbed OS ZustandGetreidetrocknungStufe2Loesung

Dependencies:   LCD_i2c_GSOE

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 "LCD.h"
00008 
00009 lcd mylcd;
00010 int zeit= 100; //Zeit in ms
00011 
00012 PortOut zustand(PortC,0b111111);
00013 DigitalOut warnlampe(PC_7);
00014 
00015 InterruptIn TrocknenEin(PA_10);
00016 InterruptIn TrocknenAus(PA_6);
00017 DigitalIn Lichtschranke(PB_0);
00018 
00019 //Zustandsdefinitionen
00020 #define Aus 0b0000
00021 #define Anlaufen 0b1110
00022 #define Betrieb 0b1111
00023 #define Abschalten 0b0111
00024 #define HaltAnlaufen 0b010000
00025 #define HaltBetrieb  0b100000
00026 #define HaltAbschalten 0b110000
00027 
00028 
00029 
00030 void melden(const char* txt)
00031 {
00032     mylcd.clear();
00033     mylcd.cursorpos(0);
00034     mylcd.printf("%s",txt);
00035 }
00036 
00037 void trocknenEin()
00038 {
00039     if (zustand==Aus)
00040     {
00041         zustand=Anlaufen;
00042         melden("Anlauf");
00043     }
00044 }
00045 
00046 void trocknenAus()
00047 {
00048     if (zustand==Betrieb)
00049     {
00050         zustand=Abschalten;
00051         melden("Abschalten");
00052     }
00053 }
00054 
00055 InterruptIn HALT(PB_4);
00056 void halt(){
00057     switch (zustand)
00058     {
00059         case Anlaufen: zustand=HaltAnlaufen; melden("Halt"); break;
00060         case Betrieb: zustand=HaltBetrieb; melden("Halt"); break;
00061         case Abschalten: zustand=HaltAbschalten; melden("Halt"); break;
00062     }
00063     
00064 
00065 }
00066 void init()
00067 {
00068     HALT.mode(PullDown);
00069     HALT.rise(&halt);
00070     TrocknenEin.mode(PullDown);
00071     TrocknenAus.mode(PullDown);
00072     Lichtschranke.mode(PullDown);
00073     
00074     TrocknenEin.rise(&trocknenEin);
00075     TrocknenAus.rise(&trocknenAus);
00076     
00077     zustand=Aus;
00078 }
00079 
00080 int main()
00081 {
00082     init();
00083     melden("bereit");
00084 
00085     while (true) {
00086         switch(zustand)
00087         {
00088             case Anlaufen: 
00089                 if (Lichtschranke==1)
00090                 {
00091                     zustand=Betrieb;
00092                     melden("Betrieb");
00093                 }
00094                 break;
00095             case Abschalten: 
00096                 if (Lichtschranke==0)
00097                 {
00098                     zustand=Aus;
00099                     melden("bereit");
00100                 }
00101                 break;
00102             case HaltAnlaufen:
00103                 if (HALT==0){
00104                     zustand=Anlaufen;
00105                     melden("Anlaufen");
00106                     }
00107                 break;
00108             case HaltBetrieb:
00109                 if (HALT==0){
00110                     zustand=Betrieb;
00111                     melden("Betrieb");
00112                     }
00113                 break;
00114             case HaltAbschalten:
00115                 if (HALT==0){
00116                     zustand=Abschalten;
00117                     melden("Abschalten");
00118                     }
00119                 break;
00120         }
00121 
00122         HAL_Delay(zeit);
00123     }
00124 }