push switc
Dependents: NJU6063_HelloWorld
Switch.cpp@3:952d0895e274, 2016-01-25 (annotated)
- Committer:
- og
- Date:
- Mon Jan 25 08:59:31 2016 +0000
- Revision:
- 3:952d0895e274
- Parent:
- 2:74f6d3b45803
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
og | 0:185d28cb4740 | 1 | #include "mbed.h" |
og | 0:185d28cb4740 | 2 | #include "Switch.h" |
og | 0:185d28cb4740 | 3 | |
og | 0:185d28cb4740 | 4 | Switch::Switch( PinName sw0, PinName sw1) |
og | 0:185d28cb4740 | 5 | : _sw0(sw0), _sw1(sw1) |
og | 0:185d28cb4740 | 6 | { |
og | 2:74f6d3b45803 | 7 | } |
og | 2:74f6d3b45803 | 8 | |
og | 3:952d0895e274 | 9 | void Switch::begin(void) |
og | 2:74f6d3b45803 | 10 | { |
og | 0:185d28cb4740 | 11 | _sw0.mode(PullUp); |
og | 0:185d28cb4740 | 12 | _sw1.mode(PullUp); |
og | 0:185d28cb4740 | 13 | _swchecker.attach_us(this, &Switch::swcheck, 4000); |
og | 0:185d28cb4740 | 14 | } |
og | 0:185d28cb4740 | 15 | |
og | 0:185d28cb4740 | 16 | void Switch::swcheck(void) |
og | 0:185d28cb4740 | 17 | { |
og | 2:74f6d3b45803 | 18 | sw[0] = _sw0.read(); |
og | 2:74f6d3b45803 | 19 | sw[1] = _sw1.read(); |
og | 0:185d28cb4740 | 20 | for (uint8_t i = 0; i < 2; i++) { |
og | 0:185d28cb4740 | 21 | buffer[i] = (buffer[i] << 1) | (0x01 & sw[i]); |
og | 0:185d28cb4740 | 22 | if (buffer[i] == 0x00) { |
og | 0:185d28cb4740 | 23 | swst[i] |= 0x01; |
og | 0:185d28cb4740 | 24 | if ((prev[i] &0x01) != (swst[i] & 0x01)) swst[i] |= 0x10; |
og | 0:185d28cb4740 | 25 | } else { |
og | 0:185d28cb4740 | 26 | swst[i] &= 0xfe; |
og | 0:185d28cb4740 | 27 | } |
og | 0:185d28cb4740 | 28 | if (buffer[i] == 0xff) { |
og | 0:185d28cb4740 | 29 | swst[i] |= 0x02; |
og | 0:185d28cb4740 | 30 | if ((prev[i] &0x02) != (swst[i] & 0x02)) swst[i] |= 0x20; |
og | 0:185d28cb4740 | 31 | } else { |
og | 0:185d28cb4740 | 32 | swst[i] &= 0xfd; |
og | 0:185d28cb4740 | 33 | } |
og | 0:185d28cb4740 | 34 | prev[i] = swst[i]; |
og | 0:185d28cb4740 | 35 | } |
og | 0:185d28cb4740 | 36 | } |
og | 0:185d28cb4740 | 37 | |
og | 1:511798f6c248 | 38 | uint8_t Switch::negedge(uint8_t no) |
og | 0:185d28cb4740 | 39 | { |
og | 0:185d28cb4740 | 40 | uint8_t st = 0; |
og | 1:511798f6c248 | 41 | if (swst[no] & 0x10) |
og | 0:185d28cb4740 | 42 | st = 1; |
og | 0:185d28cb4740 | 43 | return (st); |
og | 0:185d28cb4740 | 44 | } |
og | 0:185d28cb4740 | 45 | |
og | 1:511798f6c248 | 46 | uint8_t Switch::posedge(uint8_t no) |
og | 0:185d28cb4740 | 47 | { |
og | 0:185d28cb4740 | 48 | uint8_t st = 0; |
og | 1:511798f6c248 | 49 | if (swst[no] & 0x20) |
og | 0:185d28cb4740 | 50 | st = 1; |
og | 0:185d28cb4740 | 51 | return (st); |
og | 0:185d28cb4740 | 52 | } |
og | 0:185d28cb4740 | 53 | |
og | 1:511798f6c248 | 54 | void Switch::clear(uint8_t no) |
og | 0:185d28cb4740 | 55 | { |
og | 1:511798f6c248 | 56 | swst[no] &= 0x0f; |
og | 0:185d28cb4740 | 57 | } |
og | 0:185d28cb4740 | 58 | |
og | 1:511798f6c248 | 59 | uint8_t Switch::level(uint8_t no) |
og | 0:185d28cb4740 | 60 | { |
og | 0:185d28cb4740 | 61 | uint8_t l; |
og | 1:511798f6c248 | 62 | uint8_t st = swst[no] & 0x0f; |
og | 0:185d28cb4740 | 63 | if (st == 0x01) |
og | 0:185d28cb4740 | 64 | l = 0; |
og | 0:185d28cb4740 | 65 | else if (st == 0x02) |
og | 0:185d28cb4740 | 66 | l = 1; |
og | 0:185d28cb4740 | 67 | else |
og | 0:185d28cb4740 | 68 | l = 0xff; |
og | 0:185d28cb4740 | 69 | return (l); |
og | 0:185d28cb4740 | 70 | } |