a

Fork of kbt by ケンタ ミヤザキ

Committer:
AK1412
Date:
Fri Aug 10 14:31:37 2018 +0000
Revision:
3:34697e4082fc
Parent:
2:afa338bb4424
?;

Who changed what in which revision?

UserRevisionLine numberNew 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 2:afa338bb4424 49 return Stick[num - 14];
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 if(val == 0x80){
kenken0721 0:6d5cb677f22b 103 bitbox[0] = val;
kenken0721 0:6d5cb677f22b 104 start = 1;
kenken0721 0:6d5cb677f22b 105 count = 1;
kenken0721 0:6d5cb677f22b 106 stopcheck = 0;
kenken0721 0:6d5cb677f22b 107 }else{
kenken0721 0:6d5cb677f22b 108 if(start == 1){
kenken0721 0:6d5cb677f22b 109 bitbox[count] = val;
kenken0721 0:6d5cb677f22b 110 count++;
kenken0721 0:6d5cb677f22b 111 }
kenken0721 0:6d5cb677f22b 112 if(count >= BITNUM){
kenken0721 0:6d5cb677f22b 113 for(int i=1;i<DATANUM;i++){
kenken0721 0:6d5cb677f22b 114 stopcheck += bitbox[i];
kenken0721 0:6d5cb677f22b 115 }
kenken0721 0:6d5cb677f22b 116 if((stopcheck & 0b01111111) == bitbox[DATANUM]){
kenken0721 0:6d5cb677f22b 117 for(int i=0;i<BITNUM;i++){
kenken0721 0:6d5cb677f22b 118 data[i] = bitbox[i];
kenken0721 0:6d5cb677f22b 119 open_data[i] = data[i];
kenken0721 0:6d5cb677f22b 120 }
kenken0721 0:6d5cb677f22b 121 }
kenken0721 0:6d5cb677f22b 122 bitcheck();
kenken0721 0:6d5cb677f22b 123 count=0;
kenken0721 0:6d5cb677f22b 124 start=0;
kenken0721 0:6d5cb677f22b 125 }
kenken0721 0:6d5cb677f22b 126 }
kenken0721 0:6d5cb677f22b 127 }