Kiko Ishimoto / MyLib4

Dependents:   robocon2017mbed_contoroler_L2

Fork of MyLib by Kiko Ishimoto

Committer:
kikoaac
Date:
Fri Oct 27 07:26:51 2017 +0000
Revision:
14:4a426914ea4d
Parent:
13:26bd1b20e5c9
offset;

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;
kikoaac 12:479a1f294781 9 timer.start();
gaku_sigu 0:a919993ff50f 10 init();
kikoaac 12:479a1f294781 11 wait(0.2);
kikoaac 14:4a426914ea4d 12 //offset_();
gaku_sigu 0:a919993ff50f 13 }
gaku_sigu 0:a919993ff50f 14
gaku_sigu 0:a919993ff50f 15 bool Nunchuck::init()
gaku_sigu 0:a919993ff50f 16 {
gaku_sigu 0:a919993ff50f 17 unsigned char cmd[] = {0x40, 0x00};
gaku_sigu 3:e7a900958f54 18 if (I2C::write(NUNCHUCK_ADDR, (const char*)cmd, sizeof(cmd)) == 0)
kikoaac 12:479a1f294781 19 {
gaku_sigu 0:a919993ff50f 20 return 1;
kikoaac 12:479a1f294781 21 }
gaku_sigu 0:a919993ff50f 22 else
gaku_sigu 0:a919993ff50f 23 return 0;
gaku_sigu 0:a919993ff50f 24 }
gaku_sigu 0:a919993ff50f 25
gaku_sigu 0:a919993ff50f 26 void Nunchuck::getdata()
gaku_sigu 0:a919993ff50f 27 {
kikoaac 13:26bd1b20e5c9 28 //if(timer.read_ms() < 50)
kikoaac 13:26bd1b20e5c9 29 // return;
gaku_sigu 0:a919993ff50f 30
gaku_sigu 0:a919993ff50f 31
kikoaac 12:479a1f294781 32 //__disable_irq(); // 禁止
gaku_sigu 0:a919993ff50f 33 if(flag) {
gaku_sigu 0:a919993ff50f 34 const unsigned char cmd[] = {0x00};
gaku_sigu 4:ae9dc8d5c37e 35 if (I2C::write(NUNCHUCK_ADDR, (const char*)cmd, sizeof(cmd)) == 0)
gaku_sigu 0:a919993ff50f 36 {
gaku_sigu 0:a919993ff50f 37 wait(0.01);
gaku_sigu 4:ae9dc8d5c37e 38 if (I2C::read(NUNCHUCK_ADDR, data, sizeof(data)) == 0)
gaku_sigu 0:a919993ff50f 39 {
gaku_sigu 2:7b7821addb45 40 for(int i = 0; i < 6; ++i)
gaku_sigu 0:a919993ff50f 41 data[i] = (data[i] ^ 0x17) + 0x17;
gaku_sigu 0:a919993ff50f 42 }
kikoaac 11:08d8bd103eda 43 }else{
kikoaac 11:08d8bd103eda 44 flag = false;
gaku_sigu 0:a919993ff50f 45 }
gaku_sigu 0:a919993ff50f 46 }
gaku_sigu 0:a919993ff50f 47 else
gaku_sigu 0:a919993ff50f 48 flag = init();
kikoaac 12:479a1f294781 49 //__enable_irq(); // 許可
kikoaac 13:26bd1b20e5c9 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 {
kikoaac 12:479a1f294781 56 //getdata();
gaku_sigu 0:a919993ff50f 57 int8_t temp;
gaku_sigu 0:a919993ff50f 58 temp = data[0] - 128;
gaku_sigu 3:e7a900958f54 59 #if NUNCHUCK_ANALOGDATA
gaku_sigu 3:e7a900958f54 60 if(-1*(NUNCHUCK_DEADZONE) < temp && temp < NUNCHUCK_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
kikoaac 12:479a1f294781 70 return offset == true ? temp - offsetX : 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 {
kikoaac 12:479a1f294781 76 //getdata();
gaku_sigu 0:a919993ff50f 77 int8_t temp;
gaku_sigu 0:a919993ff50f 78 temp = data[1] - 128;
gaku_sigu 3:e7a900958f54 79 #if NUNCHUCK_ANALOGDATA
gaku_sigu 3:e7a900958f54 80 if(-1*(NUNCHUCK_DEADZONE) < temp && temp < NUNCHUCK_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
kikoaac 12:479a1f294781 90
kikoaac 12:479a1f294781 91 return offset == true ? temp - offsetY : temp;
gaku_sigu 0:a919993ff50f 92 }
gaku_sigu 0:a919993ff50f 93
gaku_sigu 0:a919993ff50f 94
gaku_sigu 3:e7a900958f54 95 double Nunchuck::analograd()
gaku_sigu 3:e7a900958f54 96 {
gaku_sigu 3:e7a900958f54 97 double x = analogx();
gaku_sigu 3:e7a900958f54 98 double y = analogy();
gaku_sigu 3:e7a900958f54 99
gaku_sigu 9:1c0640c61fce 100 return atan2(y, x);
gaku_sigu 3:e7a900958f54 101 }
gaku_sigu 3:e7a900958f54 102
gaku_sigu 5:69e9c81e9490 103
gaku_sigu 5:69e9c81e9490 104 double Nunchuck::analogdeg()
gaku_sigu 5:69e9c81e9490 105 {
gaku_sigu 5:69e9c81e9490 106 return analograd() * 180.0 / PI;
gaku_sigu 5:69e9c81e9490 107 }
gaku_sigu 5:69e9c81e9490 108
gaku_sigu 5:69e9c81e9490 109
gaku_sigu 7:15e3890a6782 110 double Nunchuck::analogrange()
gaku_sigu 7:15e3890a6782 111 {
gaku_sigu 7:15e3890a6782 112 double x = analogx();
gaku_sigu 7:15e3890a6782 113 double y = analogy();
gaku_sigu 7:15e3890a6782 114 return sqrt((x*x + y*y));
gaku_sigu 7:15e3890a6782 115 }
gaku_sigu 7:15e3890a6782 116
gaku_sigu 7:15e3890a6782 117
gaku_sigu 0:a919993ff50f 118 int Nunchuck::accx()
gaku_sigu 0:a919993ff50f 119 {
gaku_sigu 0:a919993ff50f 120 getdata();
gaku_sigu 0:a919993ff50f 121 int temp = data[2] << 2;
gaku_sigu 0:a919993ff50f 122 if ((data[5] >> 2) & 1) temp += 2;
gaku_sigu 0:a919993ff50f 123 if ((data[5] >> 3) & 1) temp += 1;
gaku_sigu 10:d0b1160ee5c2 124 return temp;
gaku_sigu 0:a919993ff50f 125 }
gaku_sigu 0:a919993ff50f 126
gaku_sigu 0:a919993ff50f 127
gaku_sigu 0:a919993ff50f 128 int Nunchuck::accy()
gaku_sigu 0:a919993ff50f 129 {
gaku_sigu 0:a919993ff50f 130 getdata();
gaku_sigu 0:a919993ff50f 131 int temp = data[3] << 2;
gaku_sigu 0:a919993ff50f 132 if ((data[5] >> 4) & 1) temp += 2;
gaku_sigu 0:a919993ff50f 133 if ((data[5] >> 5) & 1) temp += 1;
gaku_sigu 10:d0b1160ee5c2 134 return temp;
gaku_sigu 0:a919993ff50f 135 }
gaku_sigu 0:a919993ff50f 136
gaku_sigu 0:a919993ff50f 137
gaku_sigu 0:a919993ff50f 138 int Nunchuck::accz()
gaku_sigu 0:a919993ff50f 139 {
gaku_sigu 0:a919993ff50f 140 getdata();
gaku_sigu 0:a919993ff50f 141 int temp = data[4] << 2;
gaku_sigu 0:a919993ff50f 142 if ((data[5] >> 6) & 1) temp += 2;
gaku_sigu 0:a919993ff50f 143 if ((data[5] >> 7) & 1) temp += 1;
gaku_sigu 10:d0b1160ee5c2 144 return temp;
gaku_sigu 0:a919993ff50f 145 }
gaku_sigu 0:a919993ff50f 146
gaku_sigu 0:a919993ff50f 147
gaku_sigu 0:a919993ff50f 148 bool Nunchuck::buttonz()
gaku_sigu 0:a919993ff50f 149 {
kikoaac 12:479a1f294781 150 //getdata();
gaku_sigu 0:a919993ff50f 151 return !(data[5] & 0x01);
gaku_sigu 0:a919993ff50f 152 }
gaku_sigu 0:a919993ff50f 153
gaku_sigu 0:a919993ff50f 154
gaku_sigu 0:a919993ff50f 155 bool Nunchuck::buttonc()
gaku_sigu 0:a919993ff50f 156 {
kikoaac 12:479a1f294781 157 //getdata();
gaku_sigu 0:a919993ff50f 158 return !(data[5] & 0x02);
gaku_sigu 0:a919993ff50f 159 }