Dependents: HoverboardTest RobotArmControl
WiiNunchuck.cpp
00001 #include "mbed.h" 00002 #include "WiiNunchuck.h" 00003 00004 WiiNunchuck::WiiNunchuck(PinName p_sda, PinName p_scl):i2c(p_sda, p_scl) 00005 { 00006 WiiNunInitFlag = init(); 00007 timer.start(); 00008 } 00009 00010 00011 bool WiiNunchuck::init() 00012 { 00013 bool result = false; 00014 unsigned char cmd[] = {NUNCHUCK_REGADDR, 0x00}; 00015 if (i2c.write(NUNCHUCK_ADDR, (const char*)cmd, sizeof(cmd)) == I2C_ACK) { 00016 result = true; 00017 } 00018 return result; 00019 } 00020 00021 00022 void WiiNunchuck::read() 00023 { 00024 int i; 00025 00026 if(timer.read_ms() < 50) return; 00027 00028 if(!WiiNunInitFlag) { 00029 WiiNunInitFlag = init(); 00030 } 00031 00032 if(WiiNunInitFlag) { 00033 const unsigned char cmd[] = {0x00}; 00034 if (i2c.write(NUNCHUCK_ADDR, (const char*)cmd, sizeof(cmd)) == I2C_ACK) { 00035 wait(I2C_READ_DELAY); 00036 if (i2c.read(NUNCHUCK_ADDR, readBuf, sizeof(readBuf)) == I2C_ACK) { 00037 for(i = 0; i < NUNCHUCK_READLEN; ++i) { 00038 readBuf[i] = (readBuf[i] ^ 0x17) + 0x17; 00039 } 00040 joyX = readBuf[Joy_X]; 00041 joyY = readBuf[Joy_Y]; 00042 accX = readBuf[Acc_X] << 2; 00043 accY = readBuf[Acc_Y] << 2; 00044 accZ = readBuf[Acc_Z] << 2; 00045 00046 if(readBuf[Button] & 0x01) { 00047 buttonZ = 0; 00048 } else { 00049 buttonZ = 1; 00050 } 00051 if(readBuf[Button] & 0x02) { 00052 buttonC = 0; 00053 } else { 00054 buttonC = 1; 00055 } 00056 if(readBuf[Button] & 0x04) accX += 1; 00057 if(readBuf[Button] & 0x08) accX += 2; 00058 if(readBuf[Button] & 0x10) accY += 1; 00059 if(readBuf[Button] & 0x20) accY += 2; 00060 if(readBuf[Button] & 0x40) accZ += 1; 00061 if(readBuf[Button] & 0x80) accZ += 2; 00062 } 00063 } 00064 } 00065 timer.reset(); 00066 } 00067 00068 00069 unsigned char WiiNunchuck::joyx() 00070 { 00071 read(); 00072 return joyX; 00073 } 00074 00075 00076 unsigned char WiiNunchuck::joyy() 00077 { 00078 read(); 00079 return joyY; 00080 } 00081 00082 00083 int WiiNunchuck::accx() 00084 { 00085 read(); 00086 return accX; 00087 } 00088 00089 00090 int WiiNunchuck::accy() 00091 { 00092 read(); 00093 return accY; 00094 } 00095 00096 00097 int WiiNunchuck::accz() 00098 { 00099 read(); 00100 return accZ; 00101 } 00102 00103 00104 bool WiiNunchuck::buttonc() 00105 { 00106 read(); 00107 return buttonC; 00108 } 00109 00110 00111 bool WiiNunchuck::buttonz() 00112 { 00113 read(); 00114 return buttonZ; 00115 }
Generated on Tue Jul 12 2022 21:04:29 by 1.7.2