Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:ee837830d039, 2018-11-29 (annotated)
- Committer:
- mexx
- Date:
- Thu Nov 29 17:02:15 2018 +0000
- Revision:
- 0:ee837830d039
- Child:
- 1:fb317288084d
Versuch
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mexx | 0:ee837830d039 | 1 | #include "mbed.h" |
| mexx | 0:ee837830d039 | 2 | |
| mexx | 0:ee837830d039 | 3 | BusOut myleds(LED1, LED2, LED3, LED4); |
| mexx | 0:ee837830d039 | 4 | //DigitalOut led1(LED1); |
| mexx | 0:ee837830d039 | 5 | //DigitalOut led2(LED2); |
| mexx | 0:ee837830d039 | 6 | //DigitalOut led3(LED3); |
| mexx | 0:ee837830d039 | 7 | //DigitalOut led4(LED4); |
| mexx | 0:ee837830d039 | 8 | |
| mexx | 0:ee837830d039 | 9 | |
| mexx | 0:ee837830d039 | 10 | enum Status {ST_LEDOFF=0, ST_LEDEIN=1,}; |
| mexx | 0:ee837830d039 | 11 | Status volatile status; |
| mexx | 0:ee837830d039 | 12 | // States |
| mexx | 0:ee837830d039 | 13 | //typedef enum {ST_EIN, ST_AUS, ST_ERROR, ST_STATE1} nextState; |
| mexx | 0:ee837830d039 | 14 | // alternativ |
| mexx | 0:ee837830d039 | 15 | //const int ST_EIN = 0; |
| mexx | 0:ee837830d039 | 16 | //const int ST_AUS = 1; |
| mexx | 0:ee837830d039 | 17 | //onst int ST_ERROR = 2; |
| mexx | 0:ee837830d039 | 18 | |
| mexx | 0:ee837830d039 | 19 | // ---------------- Event Klasse -------------------------- |
| mexx | 0:ee837830d039 | 20 | class SwEvent { |
| mexx | 0:ee837830d039 | 21 | InterruptIn _isr; |
| mexx | 0:ee837830d039 | 22 | bool _pressed; |
| mexx | 0:ee837830d039 | 23 | void _RisingISR(); |
| mexx | 0:ee837830d039 | 24 | |
| mexx | 0:ee837830d039 | 25 | public: |
| mexx | 0:ee837830d039 | 26 | SwEvent(PinName pin) : _isr(pin) { |
| mexx | 0:ee837830d039 | 27 | _pressed = false; |
| mexx | 0:ee837830d039 | 28 | } |
| mexx | 0:ee837830d039 | 29 | int CheckFlag(); // das muss im do-Zweig (while(true) Schleife) ständig abgefragt werden |
| mexx | 0:ee837830d039 | 30 | void InitIsr(); |
| mexx | 0:ee837830d039 | 31 | }; |
| mexx | 0:ee837830d039 | 32 | |
| mexx | 0:ee837830d039 | 33 | int SwEvent::CheckFlag() { |
| mexx | 0:ee837830d039 | 34 | if( _pressed ) { |
| mexx | 0:ee837830d039 | 35 | _pressed = false; |
| mexx | 0:ee837830d039 | 36 | return 1; |
| mexx | 0:ee837830d039 | 37 | } |
| mexx | 0:ee837830d039 | 38 | return 0; |
| mexx | 0:ee837830d039 | 39 | } |
| mexx | 0:ee837830d039 | 40 | |
| mexx | 0:ee837830d039 | 41 | void SwEvent::InitIsr() { |
| mexx | 0:ee837830d039 | 42 | _isr.rise(callback(this, &SwEvent::_RisingISR)); |
| mexx | 0:ee837830d039 | 43 | } |
| mexx | 0:ee837830d039 | 44 | |
| mexx | 0:ee837830d039 | 45 | void SwEvent::_RisingISR() { |
| mexx | 0:ee837830d039 | 46 | wait_ms(100); |
| mexx | 0:ee837830d039 | 47 | _pressed = true; |
| mexx | 0:ee837830d039 | 48 | } |
| mexx | 0:ee837830d039 | 49 | |
| mexx | 0:ee837830d039 | 50 | SwEvent sw1(p14); // Joy Stick Center |
| mexx | 0:ee837830d039 | 51 | |
| mexx | 0:ee837830d039 | 52 | // ----------------- Stm Klasse ----------------------------- |
| mexx | 0:ee837830d039 | 53 | class Stm { |
| mexx | 0:ee837830d039 | 54 | public: |
| mexx | 0:ee837830d039 | 55 | Stm() { state=ST_AUS; } |
| mexx | 0:ee837830d039 | 56 | |
| mexx | 0:ee837830d039 | 57 | void Ein(); |
| mexx | 0:ee837830d039 | 58 | void Aus(); |
| mexx | 0:ee837830d039 | 59 | void Error(); |
| mexx | 0:ee837830d039 | 60 | |
| mexx | 0:ee837830d039 | 61 | uint8_t state; |
| mexx | 0:ee837830d039 | 62 | }; |
| mexx | 0:ee837830d039 | 63 | |
| mexx | 0:ee837830d039 | 64 | |
| mexx | 0:ee837830d039 | 65 | void Stm::Ein(){ |
| mexx | 0:ee837830d039 | 66 | while(true) { |
| mexx | 0:ee837830d039 | 67 | led1 = 0; |
| mexx | 0:ee837830d039 | 68 | if(sw1.CheckFlag()) { |
| mexx | 0:ee837830d039 | 69 | state = ST_AUS; |
| mexx | 0:ee837830d039 | 70 | return; |
| mexx | 0:ee837830d039 | 71 | } |
| mexx | 0:ee837830d039 | 72 | } |
| mexx | 0:ee837830d039 | 73 | } |
| mexx | 0:ee837830d039 | 74 | |
| mexx | 0:ee837830d039 | 75 | void Stm::Aus(){ |
| mexx | 0:ee837830d039 | 76 | while(true) { |
| mexx | 0:ee837830d039 | 77 | led1 = 1; |
| mexx | 0:ee837830d039 | 78 | if(sw1.CheckFlag()) { |
| mexx | 0:ee837830d039 | 79 | state = ST_EIN; |
| mexx | 0:ee837830d039 | 80 | return; |
| mexx | 0:ee837830d039 | 81 | } |
| mexx | 0:ee837830d039 | 82 | } |
| mexx | 0:ee837830d039 | 83 | } |
| mexx | 0:ee837830d039 | 84 | |
| mexx | 0:ee837830d039 | 85 | void Stm::Error(){ |
| mexx | 0:ee837830d039 | 86 | while(1) { |
| mexx | 0:ee837830d039 | 87 | led3 = ~led3; |
| mexx | 0:ee837830d039 | 88 | wait_ms(200); |
| mexx | 0:ee837830d039 | 89 | } |
| mexx | 0:ee837830d039 | 90 | } |
| mexx | 0:ee837830d039 | 91 | |
| mexx | 0:ee837830d039 | 92 | Stm stm; |
| mexx | 0:ee837830d039 | 93 | |
| mexx | 0:ee837830d039 | 94 | void stateMachine() |
| mexx | 0:ee837830d039 | 95 | { |
| mexx | 0:ee837830d039 | 96 | printf("state: %d\n", stm.state); |
| mexx | 0:ee837830d039 | 97 | switch (stm.state) |
| mexx | 0:ee837830d039 | 98 | { |
| mexx | 0:ee837830d039 | 99 | case ST_EIN: stm.Ein(); |
| mexx | 0:ee837830d039 | 100 | break; |
| mexx | 0:ee837830d039 | 101 | case ST_AUS: stm.Aus(); |
| mexx | 0:ee837830d039 | 102 | break; |
| mexx | 0:ee837830d039 | 103 | default: stm.Error(); |
| mexx | 0:ee837830d039 | 104 | break; |
| mexx | 0:ee837830d039 | 105 | } |
| mexx | 0:ee837830d039 | 106 | } |
| mexx | 0:ee837830d039 | 107 | |
| mexx | 0:ee837830d039 | 108 | int main() |
| mexx | 0:ee837830d039 | 109 | { |
| mexx | 0:ee837830d039 | 110 | printf("Hello STM class\n"); |
| mexx | 0:ee837830d039 | 111 | sw1.InitIsr(); |
| mexx | 0:ee837830d039 | 112 | |
| mexx | 0:ee837830d039 | 113 | while(1) { |
| mexx | 0:ee837830d039 | 114 | stateMachine(); |
| mexx | 0:ee837830d039 | 115 | } |
| mexx | 0:ee837830d039 | 116 | } |