a
Fork of kbtq by
kbt.cpp@0:6d5cb677f22b, 2018-01-16 (annotated)
- Committer:
- kenken0721
- Date:
- Tue Jan 16 03:44:40 2018 +0000
- Revision:
- 0:6d5cb677f22b
- Child:
- 1:c4fad24c3c2f
sbdbt?ps3??
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenken0721 | 0:6d5cb677f22b | 1 | |
kenken0721 | 0:6d5cb677f22b | 2 | #include "kbt.h" |
kenken0721 | 0:6d5cb677f22b | 3 | #include "mbed.h" |
kenken0721 | 0:6d5cb677f22b | 4 | |
kenken0721 | 0:6d5cb677f22b | 5 | |
kenken0721 | 0:6d5cb677f22b | 6 | long KBT::map(long x, long in_min, long in_max, long out_min, long out_max){ |
kenken0721 | 0:6d5cb677f22b | 7 | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; |
kenken0721 | 0:6d5cb677f22b | 8 | } |
kenken0721 | 0:6d5cb677f22b | 9 | |
kenken0721 | 0:6d5cb677f22b | 10 | KBT::KBT(PinName TX, PinName RX) : bt(TX,RX) { |
kenken0721 | 0:6d5cb677f22b | 11 | } |
kenken0721 | 0:6d5cb677f22b | 12 | |
kenken0721 | 0:6d5cb677f22b | 13 | void KBT::init(long baudrate){ |
kenken0721 | 0:6d5cb677f22b | 14 | numinit(); |
kenken0721 | 0:6d5cb677f22b | 15 | bt.baud(baudrate); |
kenken0721 | 0:6d5cb677f22b | 16 | bt.attach(this, &KBT::intSerial, Serial::RxIrq); |
kenken0721 | 0:6d5cb677f22b | 17 | } |
kenken0721 | 0:6d5cb677f22b | 18 | |
kenken0721 | 0:6d5cb677f22b | 19 | void KBT::numinit(){ |
kenken0721 | 0:6d5cb677f22b | 20 | start = 0; |
kenken0721 | 0:6d5cb677f22b | 21 | stopcheck = 0; |
kenken0721 | 0:6d5cb677f22b | 22 | val = 0; |
kenken0721 | 0:6d5cb677f22b | 23 | count = 0; |
kenken0721 | 0:6d5cb677f22b | 24 | bitbox[0] = data[0] = open_data[0] = 0x80; |
kenken0721 | 0:6d5cb677f22b | 25 | bitbox[1] = data[1] = open_data[1] = 0x00; |
kenken0721 | 0:6d5cb677f22b | 26 | bitbox[2] = data[2] = open_data[2] = 0x00; |
kenken0721 | 0:6d5cb677f22b | 27 | bitbox[3] = data[3] = open_data[3] = 0x40; |
kenken0721 | 0:6d5cb677f22b | 28 | bitbox[4] = data[4] = open_data[4] = 0x40; |
kenken0721 | 0:6d5cb677f22b | 29 | bitbox[5] = data[5] = open_data[5] = 0x40; |
kenken0721 | 0:6d5cb677f22b | 30 | bitbox[6] = data[6] = open_data[6] = 0x40; |
kenken0721 | 0:6d5cb677f22b | 31 | bitbox[7] = data[7] = open_data[7] = 0x00; |
kenken0721 | 0:6d5cb677f22b | 32 | check[0] = 0x01; |
kenken0721 | 0:6d5cb677f22b | 33 | check[1] = 0x02; |
kenken0721 | 0:6d5cb677f22b | 34 | check[2] = 0x04; |
kenken0721 | 0:6d5cb677f22b | 35 | check[3] = 0x08; |
kenken0721 | 0:6d5cb677f22b | 36 | check[4] = 0x10; |
kenken0721 | 0:6d5cb677f22b | 37 | check[5] = 0x20; |
kenken0721 | 0:6d5cb677f22b | 38 | check[6] = 0x40; |
kenken0721 | 0:6d5cb677f22b | 39 | check[7] = 0x03; |
kenken0721 | 0:6d5cb677f22b | 40 | check[8] = 0x0C; |
kenken0721 | 0:6d5cb677f22b | 41 | } |
kenken0721 | 0:6d5cb677f22b | 42 | |
kenken0721 | 0:6d5cb677f22b | 43 | |
kenken0721 | 0:6d5cb677f22b | 44 | bool KBT::button(int num){ |
kenken0721 | 0:6d5cb677f22b | 45 | return Button[num]; |
kenken0721 | 0:6d5cb677f22b | 46 | } |
kenken0721 | 0:6d5cb677f22b | 47 | |
kenken0721 | 0:6d5cb677f22b | 48 | int KBT::stick(int num){ |
kenken0721 | 0:6d5cb677f22b | 49 | return Stick[num]; |
kenken0721 | 0:6d5cb677f22b | 50 | } |
kenken0721 | 0:6d5cb677f22b | 51 | |
kenken0721 | 0:6d5cb677f22b | 52 | void KBT::bitcheck(){ |
kenken0721 | 0:6d5cb677f22b | 53 | for(int i=0;i<5;i++){ |
kenken0721 | 0:6d5cb677f22b | 54 | if(bitbox[1] == check[i]){ |
kenken0721 | 0:6d5cb677f22b | 55 | Button[i] = true; |
kenken0721 | 0:6d5cb677f22b | 56 | }else{ |
kenken0721 | 0:6d5cb677f22b | 57 | Button[i] = 0; |
kenken0721 | 0:6d5cb677f22b | 58 | } |
kenken0721 | 0:6d5cb677f22b | 59 | } |
kenken0721 | 0:6d5cb677f22b | 60 | for(int i=0;i<9;i++){ |
kenken0721 | 0:6d5cb677f22b | 61 | if(bitbox[2] == check[i]){ |
kenken0721 | 0:6d5cb677f22b | 62 | Button[i+5] = true; |
kenken0721 | 0:6d5cb677f22b | 63 | }else{ |
kenken0721 | 0:6d5cb677f22b | 64 | Button[i+5] = 0; |
kenken0721 | 0:6d5cb677f22b | 65 | } |
kenken0721 | 0:6d5cb677f22b | 66 | } |
kenken0721 | 0:6d5cb677f22b | 67 | if(bitbox[3] == 0x40){ |
kenken0721 | 0:6d5cb677f22b | 68 | Stick[0] = 0; |
kenken0721 | 0:6d5cb677f22b | 69 | }else if(bitbox[3] < 0x40){ |
kenken0721 | 0:6d5cb677f22b | 70 | Stick[0] = map(bitbox[3], 65, 0, 0, 255); |
kenken0721 | 0:6d5cb677f22b | 71 | }else if(bitbox[3] > 0x40){ |
kenken0721 | 0:6d5cb677f22b | 72 | Stick[0] = map(bitbox[3], 63, 127, 0, -255); |
kenken0721 | 0:6d5cb677f22b | 73 | } |
kenken0721 | 0:6d5cb677f22b | 74 | |
kenken0721 | 0:6d5cb677f22b | 75 | if(bitbox[4] == 0x40){ |
kenken0721 | 0:6d5cb677f22b | 76 | Stick[1] = 0; |
kenken0721 | 0:6d5cb677f22b | 77 | }else if(bitbox[4] < 0x40){ |
kenken0721 | 0:6d5cb677f22b | 78 | Stick[1] = map(bitbox[4], 63, 127, 0, -255); |
kenken0721 | 0:6d5cb677f22b | 79 | }else if(bitbox[4] > 0x40){ |
kenken0721 | 0:6d5cb677f22b | 80 | Stick[1] = map(bitbox[4], 65, 0, 0, 255); |
kenken0721 | 0:6d5cb677f22b | 81 | } |
kenken0721 | 0:6d5cb677f22b | 82 | |
kenken0721 | 0:6d5cb677f22b | 83 | if(bitbox[5] == 0x40){ |
kenken0721 | 0:6d5cb677f22b | 84 | Stick[2] = 0; |
kenken0721 | 0:6d5cb677f22b | 85 | }else if(bitbox[5] < 0x40){ |
kenken0721 | 0:6d5cb677f22b | 86 | Stick[2] = map(bitbox[5], 65, 0, 0, -255); |
kenken0721 | 0:6d5cb677f22b | 87 | }else if(bitbox[5] > 0x40){ |
kenken0721 | 0:6d5cb677f22b | 88 | Stick[2] = map(bitbox[5], 63, 127, 0, 255); |
kenken0721 | 0:6d5cb677f22b | 89 | } |
kenken0721 | 0:6d5cb677f22b | 90 | |
kenken0721 | 0:6d5cb677f22b | 91 | if(bitbox[6] == 0x40){ |
kenken0721 | 0:6d5cb677f22b | 92 | Stick[3] = 0; |
kenken0721 | 0:6d5cb677f22b | 93 | }else if(bitbox[6] < 0x40){ |
kenken0721 | 0:6d5cb677f22b | 94 | Stick[3] = map(bitbox[6], 65, 0, 0, 255); |
kenken0721 | 0:6d5cb677f22b | 95 | }else if(bitbox[6] > 0x40){ |
kenken0721 | 0:6d5cb677f22b | 96 | Stick[3] = map(bitbox[6], 63, 127, 0, -255); |
kenken0721 | 0:6d5cb677f22b | 97 | } |
kenken0721 | 0:6d5cb677f22b | 98 | } |
kenken0721 | 0:6d5cb677f22b | 99 | |
kenken0721 | 0:6d5cb677f22b | 100 | void KBT::intSerial(){ |
kenken0721 | 0:6d5cb677f22b | 101 | val = bt.getc(); |
kenken0721 | 0:6d5cb677f22b | 102 | //スタートビット処理 |
kenken0721 | 0:6d5cb677f22b | 103 | if(val == 0x80){ |
kenken0721 | 0:6d5cb677f22b | 104 | bitbox[0] = val; |
kenken0721 | 0:6d5cb677f22b | 105 | start = 1; |
kenken0721 | 0:6d5cb677f22b | 106 | count = 1; |
kenken0721 | 0:6d5cb677f22b | 107 | stopcheck = 0; |
kenken0721 | 0:6d5cb677f22b | 108 | }else{ |
kenken0721 | 0:6d5cb677f22b | 109 | if(start == 1){ |
kenken0721 | 0:6d5cb677f22b | 110 | bitbox[count] = val; |
kenken0721 | 0:6d5cb677f22b | 111 | count++; |
kenken0721 | 0:6d5cb677f22b | 112 | } |
kenken0721 | 0:6d5cb677f22b | 113 | if(count >= BITNUM){ |
kenken0721 | 0:6d5cb677f22b | 114 | for(int i=1;i<DATANUM;i++){ |
kenken0721 | 0:6d5cb677f22b | 115 | stopcheck += bitbox[i]; |
kenken0721 | 0:6d5cb677f22b | 116 | } |
kenken0721 | 0:6d5cb677f22b | 117 | //ストップビット処理 |
kenken0721 | 0:6d5cb677f22b | 118 | if((stopcheck & 0b01111111) == bitbox[DATANUM]){ |
kenken0721 | 0:6d5cb677f22b | 119 | for(int i=0;i<BITNUM;i++){ |
kenken0721 | 0:6d5cb677f22b | 120 | data[i] = bitbox[i]; |
kenken0721 | 0:6d5cb677f22b | 121 | open_data[i] = data[i]; |
kenken0721 | 0:6d5cb677f22b | 122 | } |
kenken0721 | 0:6d5cb677f22b | 123 | } |
kenken0721 | 0:6d5cb677f22b | 124 | bitcheck(); |
kenken0721 | 0:6d5cb677f22b | 125 | count=0; |
kenken0721 | 0:6d5cb677f22b | 126 | start=0; |
kenken0721 | 0:6d5cb677f22b | 127 | } |
kenken0721 | 0:6d5cb677f22b | 128 | } |
kenken0721 | 0:6d5cb677f22b | 129 | } |