卒研

Fork of ds3_si by ken fuji

Committer:
fujikenac
Date:
Wed Oct 25 09:42:56 2017 +0000
Revision:
4:5bb182ca2b07
Parent:
3:67dbeee5beda
Child:
5:5472bead8509
add callback

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fujikenac 0:4ac4c7635035 1 #include "mbed.h"
fujikenac 0:4ac4c7635035 2 #include "ds3_si.h"
fujikenac 0:4ac4c7635035 3
fujikenac 2:fabf8b58b40c 4 ds3_si::ds3_si(PinName tx, PinName rx, int baudrate):serial(tx, rx)
fujikenac 0:4ac4c7635035 5 {
fujikenac 0:4ac4c7635035 6 in[0] = 128;
fujikenac 0:4ac4c7635035 7 in[1] = 0;
fujikenac 0:4ac4c7635035 8 in[2] = 0;
fujikenac 0:4ac4c7635035 9 in[3] = 64;
fujikenac 0:4ac4c7635035 10 in[4] = 64;
fujikenac 0:4ac4c7635035 11 in[5] = 64;
fujikenac 0:4ac4c7635035 12 in[6] = 64;
fujikenac 0:4ac4c7635035 13 in[7] = 0;
fujikenac 0:4ac4c7635035 14
fujikenac 0:4ac4c7635035 15 serial.baud(baudrate);
fujikenac 4:5bb182ca2b07 16 serial.attach(callback(this, &ds3_si::serialin), Serial::RxIrq);
fujikenac 0:4ac4c7635035 17 }
fujikenac 0:4ac4c7635035 18
fujikenac 0:4ac4c7635035 19 void ds3_si::serialin()
fujikenac 0:4ac4c7635035 20 {
fujikenac 0:4ac4c7635035 21 if(serial.readable())
fujikenac 0:4ac4c7635035 22 {
fujikenac 0:4ac4c7635035 23 while(serial.getc() != 128) {}
fujikenac 0:4ac4c7635035 24 for(short i = 1; i < 8; i++)
fujikenac 0:4ac4c7635035 25 {
fujikenac 0:4ac4c7635035 26 *(in + i) = serial.getc();
fujikenac 0:4ac4c7635035 27 }
fujikenac 0:4ac4c7635035 28 }
fujikenac 0:4ac4c7635035 29 }
fujikenac 0:4ac4c7635035 30
fujikenac 0:4ac4c7635035 31 bool ds3_si::buttonstate(short order)
fujikenac 0:4ac4c7635035 32 {
fujikenac 0:4ac4c7635035 33 return in[(order >> 7) + 1] & order;
fujikenac 0:4ac4c7635035 34 }
fujikenac 0:4ac4c7635035 35
fujikenac 0:4ac4c7635035 36 int ds3_si::analogstate(short order)
fujikenac 0:4ac4c7635035 37 {
fujikenac 0:4ac4c7635035 38 return (order % 2) ? in[order] - 64 : 64 - in[order];
fujikenac 0:4ac4c7635035 39 }
fujikenac 0:4ac4c7635035 40
fujikenac 0:4ac4c7635035 41 int ds3_si::getinputdata(short order)
fujikenac 0:4ac4c7635035 42 {
fujikenac 0:4ac4c7635035 43 return in[order];
fujikenac 0:4ac4c7635035 44 }
fujikenac 0:4ac4c7635035 45
fujikenac 0:4ac4c7635035 46 double ds3_si::getangle(short order)
fujikenac 0:4ac4c7635035 47 {
fujikenac 0:4ac4c7635035 48 int x = analogstate(order * 2 + 1);
fujikenac 0:4ac4c7635035 49 int y = analogstate(order * 2 + 2);
fujikenac 0:4ac4c7635035 50 if(x || y) return atan2(double(y), double(x));
fujikenac 1:3fbf08dc60b6 51 else return NONE_angle;
fujikenac 0:4ac4c7635035 52 }