mylibrary
Nunchuck/Nunchuck.cpp@0:a919993ff50f, 2017-05-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |