mylibrary

Committer:
gaku_sigu
Date:
Wed May 10 15:12:02 2017 +0000
Revision:
0:a919993ff50f
Child:
2:7b7821addb45
mylibrary

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gaku_sigu 0:a919993ff50f 1 #include "Nunchuck.h"
gaku_sigu 0:a919993ff50f 2
gaku_sigu 0:a919993ff50f 3
gaku_sigu 0:a919993ff50f 4 Nunchuck::Nunchuck(PinName SDA, PinName SCL) : I2C(SDA, SCL)
gaku_sigu 0:a919993ff50f 5 {
gaku_sigu 0:a919993ff50f 6 flag = 0;
gaku_sigu 0:a919993ff50f 7 for(int i = 0; i < 6; i++)
gaku_sigu 0:a919993ff50f 8 data[i] = 0;
gaku_sigu 0:a919993ff50f 9 init();
gaku_sigu 0:a919993ff50f 10 timer.start();
gaku_sigu 0:a919993ff50f 11 }
gaku_sigu 0:a919993ff50f 12
gaku_sigu 0:a919993ff50f 13 bool Nunchuck::init()
gaku_sigu 0:a919993ff50f 14 {
gaku_sigu 0:a919993ff50f 15 unsigned char cmd[] = {0x40, 0x00};
gaku_sigu 0:a919993ff50f 16 if (I2C::write(ADDR, (const char*)cmd, sizeof(cmd)) == 0)
gaku_sigu 0:a919993ff50f 17 return 1;
gaku_sigu 0:a919993ff50f 18 else
gaku_sigu 0:a919993ff50f 19 return 0;
gaku_sigu 0:a919993ff50f 20 }
gaku_sigu 0:a919993ff50f 21
gaku_sigu 0:a919993ff50f 22 void Nunchuck::getdata()
gaku_sigu 0:a919993ff50f 23 {
gaku_sigu 0:a919993ff50f 24 if(timer.read_ms() < 50)
gaku_sigu 0:a919993ff50f 25 return;
gaku_sigu 0:a919993ff50f 26
gaku_sigu 0:a919993ff50f 27
gaku_sigu 0:a919993ff50f 28 if(flag) {
gaku_sigu 0:a919993ff50f 29 const unsigned char cmd[] = {0x00};
gaku_sigu 0:a919993ff50f 30 if (I2C::write(ADDR, (const char*)cmd, sizeof(cmd)) == 0)
gaku_sigu 0:a919993ff50f 31 {
gaku_sigu 0:a919993ff50f 32 wait(0.01);
gaku_sigu 0:a919993ff50f 33 if (I2C::read(ADDR, data, sizeof(data)) == 0)
gaku_sigu 0:a919993ff50f 34 {
gaku_sigu 0:a919993ff50f 35 for(int i = 0; i < 6; ++i) {
gaku_sigu 0:a919993ff50f 36 data[i] = (data[i] ^ 0x17) + 0x17;
gaku_sigu 0:a919993ff50f 37 }
gaku_sigu 0:a919993ff50f 38
gaku_sigu 0:a919993ff50f 39 /*
gaku_sigu 0:a919993ff50f 40 data[2] <<= 2;
gaku_sigu 0:a919993ff50f 41 data[3] <<= 2;
gaku_sigu 0:a919993ff50f 42 data[4] <<= 2;
gaku_sigu 0:a919993ff50f 43 */
gaku_sigu 0:a919993ff50f 44 }
gaku_sigu 0:a919993ff50f 45 }
gaku_sigu 0:a919993ff50f 46 }
gaku_sigu 0:a919993ff50f 47 else
gaku_sigu 0:a919993ff50f 48 flag = init();
gaku_sigu 0:a919993ff50f 49
gaku_sigu 0:a919993ff50f 50 timer.reset();
gaku_sigu 0:a919993ff50f 51 }
gaku_sigu 0:a919993ff50f 52
gaku_sigu 0:a919993ff50f 53
gaku_sigu 0:a919993ff50f 54 int8_t Nunchuck::analogx()
gaku_sigu 0:a919993ff50f 55 {
gaku_sigu 0:a919993ff50f 56 getdata();
gaku_sigu 0:a919993ff50f 57 int8_t temp;
gaku_sigu 0:a919993ff50f 58 temp = data[0] - 128;
gaku_sigu 0:a919993ff50f 59 #if ANALOGDATA
gaku_sigu 0:a919993ff50f 60 if(-1*(DEADZONE) < temp && temp < DEADZONE)
gaku_sigu 0:a919993ff50f 61 temp = 0;
gaku_sigu 0:a919993ff50f 62 #else
gaku_sigu 0:a919993ff50f 63 if(-50 < temp && temp < 50)
gaku_sigu 0:a919993ff50f 64 temp = 0;
gaku_sigu 0:a919993ff50f 65 else if(temp <= -50)
gaku_sigu 0:a919993ff50f 66 temp = -1;
gaku_sigu 0:a919993ff50f 67 else if(temp >= 50)
gaku_sigu 0:a919993ff50f 68 temp = 1;
gaku_sigu 0:a919993ff50f 69 #endif
gaku_sigu 0:a919993ff50f 70 return temp;
gaku_sigu 0:a919993ff50f 71 }
gaku_sigu 0:a919993ff50f 72
gaku_sigu 0:a919993ff50f 73
gaku_sigu 0:a919993ff50f 74 int8_t Nunchuck::analogy()
gaku_sigu 0:a919993ff50f 75 {
gaku_sigu 0:a919993ff50f 76 getdata();
gaku_sigu 0:a919993ff50f 77 int8_t temp;
gaku_sigu 0:a919993ff50f 78 temp = data[1] - 128;
gaku_sigu 0:a919993ff50f 79 #if ANALOGDATA
gaku_sigu 0:a919993ff50f 80 if(-1*(DEADZONE) < temp && temp < DEADZONE)
gaku_sigu 0:a919993ff50f 81 temp = 0;
gaku_sigu 0:a919993ff50f 82 #else
gaku_sigu 0:a919993ff50f 83 if(-50 < temp && temp < 50)
gaku_sigu 0:a919993ff50f 84 temp = 0;
gaku_sigu 0:a919993ff50f 85 else if(temp <= -50)
gaku_sigu 0:a919993ff50f 86 temp = -1;
gaku_sigu 0:a919993ff50f 87 else if(temp >= 50)
gaku_sigu 0:a919993ff50f 88 temp = 1;
gaku_sigu 0:a919993ff50f 89 #endif
gaku_sigu 0:a919993ff50f 90 return temp;
gaku_sigu 0:a919993ff50f 91 }
gaku_sigu 0:a919993ff50f 92
gaku_sigu 0:a919993ff50f 93
gaku_sigu 0:a919993ff50f 94 int Nunchuck::accx()
gaku_sigu 0:a919993ff50f 95 {
gaku_sigu 0:a919993ff50f 96 getdata();
gaku_sigu 0:a919993ff50f 97 int temp = data[2] << 2;
gaku_sigu 0:a919993ff50f 98 if ((data[5] >> 2) & 1) temp += 2;
gaku_sigu 0:a919993ff50f 99 if ((data[5] >> 3) & 1) temp += 1;
gaku_sigu 0:a919993ff50f 100 return data[2];
gaku_sigu 0:a919993ff50f 101 }
gaku_sigu 0:a919993ff50f 102
gaku_sigu 0:a919993ff50f 103
gaku_sigu 0:a919993ff50f 104 int Nunchuck::accy()
gaku_sigu 0:a919993ff50f 105 {
gaku_sigu 0:a919993ff50f 106 getdata();
gaku_sigu 0:a919993ff50f 107 int temp = data[3] << 2;
gaku_sigu 0:a919993ff50f 108 if ((data[5] >> 4) & 1) temp += 2;
gaku_sigu 0:a919993ff50f 109 if ((data[5] >> 5) & 1) temp += 1;
gaku_sigu 0:a919993ff50f 110 return data[3];
gaku_sigu 0:a919993ff50f 111 }
gaku_sigu 0:a919993ff50f 112
gaku_sigu 0:a919993ff50f 113
gaku_sigu 0:a919993ff50f 114 int Nunchuck::accz()
gaku_sigu 0:a919993ff50f 115 {
gaku_sigu 0:a919993ff50f 116 getdata();
gaku_sigu 0:a919993ff50f 117 int temp = data[4] << 2;
gaku_sigu 0:a919993ff50f 118 if ((data[5] >> 6) & 1) temp += 2;
gaku_sigu 0:a919993ff50f 119 if ((data[5] >> 7) & 1) temp += 1;
gaku_sigu 0:a919993ff50f 120 return data[4];
gaku_sigu 0:a919993ff50f 121 }
gaku_sigu 0:a919993ff50f 122
gaku_sigu 0:a919993ff50f 123
gaku_sigu 0:a919993ff50f 124 bool Nunchuck::buttonz()
gaku_sigu 0:a919993ff50f 125 {
gaku_sigu 0:a919993ff50f 126 getdata();
gaku_sigu 0:a919993ff50f 127 return !(data[5] & 0x01);
gaku_sigu 0:a919993ff50f 128 }
gaku_sigu 0:a919993ff50f 129
gaku_sigu 0:a919993ff50f 130
gaku_sigu 0:a919993ff50f 131 bool Nunchuck::buttonc()
gaku_sigu 0:a919993ff50f 132 {
gaku_sigu 0:a919993ff50f 133 getdata();
gaku_sigu 0:a919993ff50f 134 return !(data[5] & 0x02);
gaku_sigu 0:a919993ff50f 135 }