卒研

Fork of ds3_si by ken fuji

Committer:
kikoaac
Date:
Fri Mar 02 02:55:16 2018 +0000
Revision:
5:5472bead8509
Parent:
4:5bb182ca2b07
??

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()
kikoaac 5:5472bead8509 20 {__disable_irq();
kikoaac 5:5472bead8509 21 NVIC_ClearPendingIRQ(UART0_IRQn);
kikoaac 5:5472bead8509 22 NVIC_ClearPendingIRQ(UART1_IRQn);
kikoaac 5:5472bead8509 23 NVIC_ClearPendingIRQ(UART2_IRQn);
kikoaac 5:5472bead8509 24 NVIC_ClearPendingIRQ(UART3_IRQn);
fujikenac 0:4ac4c7635035 25 if(serial.readable())
fujikenac 0:4ac4c7635035 26 {
fujikenac 0:4ac4c7635035 27 while(serial.getc() != 128) {}
fujikenac 0:4ac4c7635035 28 for(short i = 1; i < 8; i++)
fujikenac 0:4ac4c7635035 29 {
fujikenac 0:4ac4c7635035 30 *(in + i) = serial.getc();
fujikenac 0:4ac4c7635035 31 }
fujikenac 0:4ac4c7635035 32 }
kikoaac 5:5472bead8509 33 __enable_irq();
fujikenac 0:4ac4c7635035 34 }
fujikenac 0:4ac4c7635035 35
fujikenac 0:4ac4c7635035 36 bool ds3_si::buttonstate(short order)
fujikenac 0:4ac4c7635035 37 {
fujikenac 0:4ac4c7635035 38 return in[(order >> 7) + 1] & order;
fujikenac 0:4ac4c7635035 39 }
fujikenac 0:4ac4c7635035 40
fujikenac 0:4ac4c7635035 41 int ds3_si::analogstate(short order)
fujikenac 0:4ac4c7635035 42 {
fujikenac 0:4ac4c7635035 43 return (order % 2) ? in[order] - 64 : 64 - in[order];
fujikenac 0:4ac4c7635035 44 }
fujikenac 0:4ac4c7635035 45
fujikenac 0:4ac4c7635035 46 int ds3_si::getinputdata(short order)
fujikenac 0:4ac4c7635035 47 {
fujikenac 0:4ac4c7635035 48 return in[order];
fujikenac 0:4ac4c7635035 49 }
fujikenac 0:4ac4c7635035 50
fujikenac 0:4ac4c7635035 51 double ds3_si::getangle(short order)
fujikenac 0:4ac4c7635035 52 {
fujikenac 0:4ac4c7635035 53 int x = analogstate(order * 2 + 1);
fujikenac 0:4ac4c7635035 54 int y = analogstate(order * 2 + 2);
fujikenac 0:4ac4c7635035 55 if(x || y) return atan2(double(y), double(x));
fujikenac 1:3fbf08dc60b6 56 else return NONE_angle;
fujikenac 0:4ac4c7635035 57 }