push switc

Dependents:   NJU6063_HelloWorld

Committer:
og
Date:
Mon Jan 25 08:59:31 2016 +0000
Revision:
3:952d0895e274
Parent:
2:74f6d3b45803
test

Who changed what in which revision?

UserRevisionLine numberNew 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 }