Committer:
kenken0721
Date:
Mon Oct 08 08:05:20 2018 +0000
Revision:
4:c8be6b1554d9
Parent:
3:6d9d5cae1db7

        

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 4:c8be6b1554d9 6 double KBT::map(double x, double in_min, double in_max, double out_min, double 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 3:6d9d5cae1db7 42 void KBT::putc(int val){
kenken0721 3:6d9d5cae1db7 43 bt.putc(val);
kenken0721 3:6d9d5cae1db7 44 }
kenken0721 0:6d5cb677f22b 45
kenken0721 0:6d5cb677f22b 46 bool KBT::button(int num){
kenken0721 0:6d5cb677f22b 47 return Button[num];
kenken0721 0:6d5cb677f22b 48 }
kenken0721 0:6d5cb677f22b 49
kenken0721 4:c8be6b1554d9 50 double KBT::stick(int num){
kenken0721 2:afa338bb4424 51 return Stick[num - 14];
kenken0721 0:6d5cb677f22b 52 }
kenken0721 0:6d5cb677f22b 53
kenken0721 0:6d5cb677f22b 54 void KBT::bitcheck(){
kenken0721 0:6d5cb677f22b 55 for(int i=0;i<5;i++){
kenken0721 0:6d5cb677f22b 56 if(bitbox[1] == check[i]){
kenken0721 0:6d5cb677f22b 57 Button[i] = true;
kenken0721 0:6d5cb677f22b 58 }else{
kenken0721 0:6d5cb677f22b 59 Button[i] = 0;
kenken0721 0:6d5cb677f22b 60 }
kenken0721 0:6d5cb677f22b 61 }
kenken0721 0:6d5cb677f22b 62 for(int i=0;i<9;i++){
kenken0721 0:6d5cb677f22b 63 if(bitbox[2] == check[i]){
kenken0721 0:6d5cb677f22b 64 Button[i+5] = true;
kenken0721 0:6d5cb677f22b 65 }else{
kenken0721 0:6d5cb677f22b 66 Button[i+5] = 0;
kenken0721 0:6d5cb677f22b 67 }
kenken0721 0:6d5cb677f22b 68 }
kenken0721 0:6d5cb677f22b 69 if(bitbox[3] == 0x40){
kenken0721 0:6d5cb677f22b 70 Stick[0] = 0;
kenken0721 0:6d5cb677f22b 71 }else if(bitbox[3] < 0x40){
kenken0721 3:6d9d5cae1db7 72 Stick[0] = map(bitbox[3], 65, 0, 0, 1);
kenken0721 0:6d5cb677f22b 73 }else if(bitbox[3] > 0x40){
kenken0721 3:6d9d5cae1db7 74 Stick[0] = map(bitbox[3], 63, 127, 0, -1);
kenken0721 0:6d5cb677f22b 75 }
kenken0721 0:6d5cb677f22b 76
kenken0721 0:6d5cb677f22b 77 if(bitbox[4] == 0x40){
kenken0721 0:6d5cb677f22b 78 Stick[1] = 0;
kenken0721 0:6d5cb677f22b 79 }else if(bitbox[4] < 0x40){
kenken0721 3:6d9d5cae1db7 80 Stick[1] = map(bitbox[4], 63, 127, 0, -1);
kenken0721 0:6d5cb677f22b 81 }else if(bitbox[4] > 0x40){
kenken0721 3:6d9d5cae1db7 82 Stick[1] = map(bitbox[4], 65, 0, 0, 1);
kenken0721 0:6d5cb677f22b 83 }
kenken0721 0:6d5cb677f22b 84
kenken0721 0:6d5cb677f22b 85 if(bitbox[5] == 0x40){
kenken0721 0:6d5cb677f22b 86 Stick[2] = 0;
kenken0721 0:6d5cb677f22b 87 }else if(bitbox[5] < 0x40){
kenken0721 3:6d9d5cae1db7 88 Stick[2] = map(bitbox[5], 65, 0, 0, -1);
kenken0721 0:6d5cb677f22b 89 }else if(bitbox[5] > 0x40){
kenken0721 3:6d9d5cae1db7 90 Stick[2] = map(bitbox[5], 63, 127, 0, 1);
kenken0721 0:6d5cb677f22b 91 }
kenken0721 0:6d5cb677f22b 92
kenken0721 0:6d5cb677f22b 93 if(bitbox[6] == 0x40){
kenken0721 0:6d5cb677f22b 94 Stick[3] = 0;
kenken0721 0:6d5cb677f22b 95 }else if(bitbox[6] < 0x40){
kenken0721 3:6d9d5cae1db7 96 Stick[3] = map(bitbox[6], 65, 0, 0, 1);
kenken0721 0:6d5cb677f22b 97 }else if(bitbox[6] > 0x40){
kenken0721 3:6d9d5cae1db7 98 Stick[3] = map(bitbox[6], 63, 127, 0, -1);
kenken0721 0:6d5cb677f22b 99 }
kenken0721 0:6d5cb677f22b 100 }
kenken0721 0:6d5cb677f22b 101
kenken0721 3:6d9d5cae1db7 102
kenken0721 0:6d5cb677f22b 103 void KBT::intSerial(){
kenken0721 0:6d5cb677f22b 104 val = bt.getc();
kenken0721 0:6d5cb677f22b 105 if(val == 0x80){
kenken0721 0:6d5cb677f22b 106 bitbox[0] = val;
kenken0721 0:6d5cb677f22b 107 start = 1;
kenken0721 0:6d5cb677f22b 108 count = 1;
kenken0721 0:6d5cb677f22b 109 stopcheck = 0;
kenken0721 0:6d5cb677f22b 110 }else{
kenken0721 0:6d5cb677f22b 111 if(start == 1){
kenken0721 0:6d5cb677f22b 112 bitbox[count] = val;
kenken0721 0:6d5cb677f22b 113 count++;
kenken0721 0:6d5cb677f22b 114 }
kenken0721 0:6d5cb677f22b 115 if(count >= BITNUM){
kenken0721 0:6d5cb677f22b 116 for(int i=1;i<DATANUM;i++){
kenken0721 0:6d5cb677f22b 117 stopcheck += bitbox[i];
kenken0721 0:6d5cb677f22b 118 }
kenken0721 0:6d5cb677f22b 119 if((stopcheck & 0b01111111) == bitbox[DATANUM]){
kenken0721 0:6d5cb677f22b 120 for(int i=0;i<BITNUM;i++){
kenken0721 0:6d5cb677f22b 121 data[i] = bitbox[i];
kenken0721 0:6d5cb677f22b 122 open_data[i] = data[i];
kenken0721 0:6d5cb677f22b 123 }
kenken0721 0:6d5cb677f22b 124 }
kenken0721 0:6d5cb677f22b 125 bitcheck();
kenken0721 0:6d5cb677f22b 126 count=0;
kenken0721 0:6d5cb677f22b 127 start=0;
kenken0721 0:6d5cb677f22b 128 }
kenken0721 0:6d5cb677f22b 129 }
kenken0721 0:6d5cb677f22b 130 }