卒研

Fork of ds3_si by ken fuji

Committer:
fujikenac
Date:
Sat Sep 23 08:36:38 2017 +0000
Revision:
2:fabf8b58b40c
Parent:
1:3fbf08dc60b6
Child:
3:67dbeee5beda
remove debug()

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):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(2400);
fujikenac 0:4ac4c7635035 16 serial.attach(this, &ds3_si::serialin, Serial::RxIrq);
fujikenac 0:4ac4c7635035 17 }
fujikenac 0:4ac4c7635035 18
fujikenac 2:fabf8b58b40c 19 ds3_si::ds3_si(PinName tx, PinName rx, int baudrate):serial(tx, rx)
fujikenac 0:4ac4c7635035 20 {
fujikenac 0:4ac4c7635035 21 in[0] = 128;
fujikenac 0:4ac4c7635035 22 in[1] = 0;
fujikenac 0:4ac4c7635035 23 in[2] = 0;
fujikenac 0:4ac4c7635035 24 in[3] = 64;
fujikenac 0:4ac4c7635035 25 in[4] = 64;
fujikenac 0:4ac4c7635035 26 in[5] = 64;
fujikenac 0:4ac4c7635035 27 in[6] = 64;
fujikenac 0:4ac4c7635035 28 in[7] = 0;
fujikenac 0:4ac4c7635035 29
fujikenac 0:4ac4c7635035 30 serial.baud(baudrate);
fujikenac 0:4ac4c7635035 31 serial.attach(this, &ds3_si::serialin, Serial::RxIrq);
fujikenac 0:4ac4c7635035 32 }
fujikenac 0:4ac4c7635035 33
fujikenac 0:4ac4c7635035 34 void ds3_si::serialin()
fujikenac 0:4ac4c7635035 35 {
fujikenac 0:4ac4c7635035 36 if(serial.readable())
fujikenac 0:4ac4c7635035 37 {
fujikenac 0:4ac4c7635035 38 while(serial.getc() != 128) {}
fujikenac 0:4ac4c7635035 39 for(short i = 1; i < 8; i++)
fujikenac 0:4ac4c7635035 40 {
fujikenac 0:4ac4c7635035 41 *(in + i) = serial.getc();
fujikenac 0:4ac4c7635035 42 }
fujikenac 0:4ac4c7635035 43 }
fujikenac 0:4ac4c7635035 44 }
fujikenac 0:4ac4c7635035 45
fujikenac 0:4ac4c7635035 46 bool ds3_si::buttonstate(short order)
fujikenac 0:4ac4c7635035 47 {
fujikenac 0:4ac4c7635035 48 return in[(order >> 7) + 1] & order;
fujikenac 0:4ac4c7635035 49 }
fujikenac 0:4ac4c7635035 50
fujikenac 0:4ac4c7635035 51 int ds3_si::analogstate(short order)
fujikenac 0:4ac4c7635035 52 {
fujikenac 0:4ac4c7635035 53 return (order % 2) ? in[order] - 64 : 64 - in[order];
fujikenac 0:4ac4c7635035 54 }
fujikenac 0:4ac4c7635035 55
fujikenac 0:4ac4c7635035 56 int ds3_si::getinputdata(short order)
fujikenac 0:4ac4c7635035 57 {
fujikenac 0:4ac4c7635035 58 return in[order];
fujikenac 0:4ac4c7635035 59 }
fujikenac 0:4ac4c7635035 60
fujikenac 0:4ac4c7635035 61 double ds3_si::getangle(short order)
fujikenac 0:4ac4c7635035 62 {
fujikenac 0:4ac4c7635035 63 int x = analogstate(order * 2 + 1);
fujikenac 0:4ac4c7635035 64 int y = analogstate(order * 2 + 2);
fujikenac 0:4ac4c7635035 65 if(x || y) return atan2(double(y), double(x));
fujikenac 1:3fbf08dc60b6 66 else return NONE_angle;
fujikenac 0:4ac4c7635035 67 }