Mein 1. Versuch

Dependencies:   C12832 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "C12832.h"
00003 
00004 DigitalOut Led1(LED1, 0);   // 1. LED am MBED-Board
00005 DigitalOut Led2(LED2, 0);   // 2. LED am MBED-Board
00006 DigitalOut Led3(LED3, 0);   // 3. LED am MBED-Board
00007 DigitalOut Led4(LED4, 0);   // 4. LED am MBED-Board
00008 InterruptIn  SW1(p13);      // LEFT am MBED-Board
00009 InterruptIn  SW1(p14);      // CENTER am MBED-Board
00010 InterruptIn  SW2(p15);      // UP am MBED-Board
00011 InterruptIn  SW3(p12);      // DOWN am MBED-Board
00012 InterruptIn  SW4(p16);      // RIGHT am MBED-Board
00013 
00014 Ticker flipper;             // Ticker für blinken der LED
00015 volatile int blinkCount=0;  // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird
00016 
00017 
00018 //______________ LCD ____________________________\\
00019 
00020 C12832 lcd(p5, p7, p6, p8, p11);    // Definition der LCD-Pins
00021 
00022 //_____________ meine Variablen _________________\\
00023 
00024 enum State {ST_AUS=0, ST_EIN};
00025 State state;
00026 
00027 bool pressed = false;
00028 
00029 
00030 // ______________Led blinken lassen______________\\
00031 
00032 void flip()                 // 
00033 {
00034     blinkCount++;           // Variable die hochgezählt wird um die LED 2 mal blinken zu lassen
00035     Led4 = !Led4;           // umschalten der LED
00036 }
00037 
00038 //************* EREIGNISSE ****************
00039  
00040 void rise(void)
00041 {  
00042     wait_ms(100);           // Entprellung der Taste, bei mir 100ms da der Taster furchtbar prellt...
00043     pressed = true;         // Umschalten auf WAHR, es wurde gedrückt
00044 }
00045 
00046 bool CheckFlag() 
00047 {
00048     if (pressed)            // Abfrage ob pressed WAHR ist
00049     {
00050         pressed=false;      // Rücksetzen wieder auf Status FALSCH
00051         return true;        // Rückgabe bei CheckFlag das WAHR ist
00052     }
00053     return false;           // Wenn nicht pressed Wahr ist wird CheckFlag als FALSCH zurück gegeben
00054 }
00055 
00056 //************* STATES ****************
00057 
00058 void ST_Aus (void)
00059 {
00060 //______________Status auf LCD und Serial_______________\\
00061     lcd.cls();              // löscht lcd (clear screen)
00062     lcd.locate(0,0);        // x-position, y-position (x: 0-128; y: 0-32)
00063     lcd.printf("State: 1 (Aus)");   //Ausgabe am Display
00064     printf("State: 1 (Aus)");       // Ausgabe auf der seriellen Console
00065     
00066 //_______________entry____________________\\
00067     
00068 //_______________do_______________________\\
00069 
00070     while(true) 
00071     {
00072         Led1 = 0;           // Led1 wird auf LOW gesetzt
00073         if(CheckFlag())     // Ist CheckFlag WAHR dann
00074         {
00075             state = ST_EIN; // Wechsel auf Status EIN
00076             
00077 //______________exit_______________________\\
00078 
00079             return;
00080             }
00081         }
00082 }
00083 
00084 void ST_Ein (void)
00085 {
00086     //Status auf LCD und Serial
00087     lcd.cls();      // löscht lcd (clear screen)
00088     lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
00089     lcd.printf("State: 2 (Ein)");
00090     printf("State: 2 (Ein)");
00091     
00092     
00093     // aufruf um die Led blinken zu lassen
00094     flipper.attach(&flip, 0.3); // the address of the function to be attached (flip) and the interval (2 seconds)
00095     
00096     while(true)
00097     {
00098         if ( blinkCount >= 4) break;
00099         }
00100         flipper.detach();
00101         blinkCount=0;
00102     
00103     /*
00104     // entry
00105     Led4 = 1;
00106     wait_ms(200);
00107     Led4 = 0;
00108     wait_ms(200);
00109     Led4 = 1;
00110     wait_ms(200);
00111     Led4 = 0;
00112     wait_ms(200);
00113     */
00114     // do
00115     while(true) {
00116         Led1 = 1;
00117     
00118         if(CheckFlag()) 
00119         {
00120             state = ST_AUS;
00121             
00122     // exit
00123             return;
00124             }
00125         }
00126 }
00127 
00128 void ST_Error (void)
00129 {
00130     //Status auf LCD und Serial
00131     lcd.cls();      // löscht lcd (clear screen)
00132     lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
00133     lcd.printf("State: ERROR!!!");
00134     printf("State: ERROR!!!");
00135     return;
00136 }
00137 
00138 void stateMachine()
00139 {
00140     switch (state)
00141     {
00142     case ST_AUS: ST_Aus();
00143         break;
00144     case ST_EIN: ST_Ein();
00145         break;
00146     default: ST_Error();  // sollte nicht auftreten :-)
00147         break;
00148     }
00149 }
00150 
00151 
00152  
00153 int main()
00154 {
00155     SW1.rise(&rise);      //.fall(&fall);
00156     state = ST_AUS;
00157     while(true)
00158     {
00159         stateMachine(); 
00160     }
00161 }