Oliver Ainhirn
/
STM_01
Mein 1. Versuch
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Tue Sep 20 2022 12:39:04 by 1.7.2