Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of kbtakira by
Revision 0:6d5cb677f22b, committed 2018-01-16
- Comitter:
- kenken0721
- Date:
- Tue Jan 16 03:44:40 2018 +0000
- Child:
- 1:c4fad24c3c2f
- Commit message:
- sbdbt?ps3??
Changed in this revision
| kbt.cpp | Show annotated file Show diff for this revision Revisions of this file |
| kbt.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kbt.cpp Tue Jan 16 03:44:40 2018 +0000
@@ -0,0 +1,129 @@
+
+#include "kbt.h"
+#include "mbed.h"
+
+
+long KBT::map(long x, long in_min, long in_max, long out_min, long out_max){
+ return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
+}
+
+KBT::KBT(PinName TX, PinName RX) : bt(TX,RX) {
+}
+
+void KBT::init(long baudrate){
+ numinit();
+ bt.baud(baudrate);
+ bt.attach(this, &KBT::intSerial, Serial::RxIrq);
+}
+
+void KBT::numinit(){
+ start = 0;
+ stopcheck = 0;
+ val = 0;
+ count = 0;
+ bitbox[0] = data[0] = open_data[0] = 0x80;
+ bitbox[1] = data[1] = open_data[1] = 0x00;
+ bitbox[2] = data[2] = open_data[2] = 0x00;
+ bitbox[3] = data[3] = open_data[3] = 0x40;
+ bitbox[4] = data[4] = open_data[4] = 0x40;
+ bitbox[5] = data[5] = open_data[5] = 0x40;
+ bitbox[6] = data[6] = open_data[6] = 0x40;
+ bitbox[7] = data[7] = open_data[7] = 0x00;
+ check[0] = 0x01;
+ check[1] = 0x02;
+ check[2] = 0x04;
+ check[3] = 0x08;
+ check[4] = 0x10;
+ check[5] = 0x20;
+ check[6] = 0x40;
+ check[7] = 0x03;
+ check[8] = 0x0C;
+}
+
+
+bool KBT::button(int num){
+ return Button[num];
+}
+
+int KBT::stick(int num){
+ return Stick[num];
+}
+
+void KBT::bitcheck(){
+ for(int i=0;i<5;i++){
+ if(bitbox[1] == check[i]){
+ Button[i] = true;
+ }else{
+ Button[i] = 0;
+ }
+ }
+ for(int i=0;i<9;i++){
+ if(bitbox[2] == check[i]){
+ Button[i+5] = true;
+ }else{
+ Button[i+5] = 0;
+ }
+ }
+ if(bitbox[3] == 0x40){
+ Stick[0] = 0;
+ }else if(bitbox[3] < 0x40){
+ Stick[0] = map(bitbox[3], 65, 0, 0, 255);
+ }else if(bitbox[3] > 0x40){
+ Stick[0] = map(bitbox[3], 63, 127, 0, -255);
+ }
+
+ if(bitbox[4] == 0x40){
+ Stick[1] = 0;
+ }else if(bitbox[4] < 0x40){
+ Stick[1] = map(bitbox[4], 63, 127, 0, -255);
+ }else if(bitbox[4] > 0x40){
+ Stick[1] = map(bitbox[4], 65, 0, 0, 255);
+ }
+
+ if(bitbox[5] == 0x40){
+ Stick[2] = 0;
+ }else if(bitbox[5] < 0x40){
+ Stick[2] = map(bitbox[5], 65, 0, 0, -255);
+ }else if(bitbox[5] > 0x40){
+ Stick[2] = map(bitbox[5], 63, 127, 0, 255);
+ }
+
+ if(bitbox[6] == 0x40){
+ Stick[3] = 0;
+ }else if(bitbox[6] < 0x40){
+ Stick[3] = map(bitbox[6], 65, 0, 0, 255);
+ }else if(bitbox[6] > 0x40){
+ Stick[3] = map(bitbox[6], 63, 127, 0, -255);
+ }
+}
+
+void KBT::intSerial(){
+ val = bt.getc();
+ //スタートビット処理
+ if(val == 0x80){
+ bitbox[0] = val;
+ start = 1;
+ count = 1;
+ stopcheck = 0;
+ }else{
+ if(start == 1){
+ bitbox[count] = val;
+ count++;
+ }
+ if(count >= BITNUM){
+ for(int i=1;i<DATANUM;i++){
+ stopcheck += bitbox[i];
+ }
+ //ストップビット処理
+ if((stopcheck & 0b01111111) == bitbox[DATANUM]){
+ for(int i=0;i<BITNUM;i++){
+ data[i] = bitbox[i];
+ open_data[i] = data[i];
+ }
+ }
+ bitcheck();
+ count=0;
+ start=0;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kbt.h Tue Jan 16 03:44:40 2018 +0000
@@ -0,0 +1,58 @@
+
+#ifndef KBT_H
+#define KBT_H
+
+#include "mbed.h"
+
+#define BITNUM 8
+#define DATANUM 7
+
+#define rect 0
+#define L1 1
+#define L2 2
+#define R1 3
+#define R2 4
+#define up 5
+#define down 6
+#define right 7
+#define left 8
+#define triangle 9
+#define cross 10
+#define circle 11
+#define Start 12
+#define Select 13
+#define L_around 14
+#define L_updown 15
+#define R_around 16
+#define R_updown 17
+
+class KBT{
+public :
+ bool Button[14];
+ int Stick[4];
+ int open_data[8];
+
+ KBT(PinName TX, PinName RX);
+ void init(long baudrate);
+ bool button(int num);
+ int stick(int num);
+
+private :
+ Serial bt;
+ bool start;
+ int stopcheck;
+ int val;
+ int count;
+ int bitbox[8];
+ int data[8];
+ int check[9];
+
+ long map(long x, long in_min, long in_max, long out_min, long out_max);
+ void bitcheck();
+ void intSerial();
+ void numinit();
+
+};
+
+#endif
+
