Dependents:   HoverboardTest RobotArmControl

Committer:
knaka
Date:
Sat Dec 18 11:19:14 2010 +0000
Revision:
2:9652195745e8

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
knaka 2:9652195745e8 1 #include "mbed.h"
knaka 2:9652195745e8 2 #include "WiiNunchuck.h"
knaka 2:9652195745e8 3
knaka 2:9652195745e8 4 WiiNunchuck::WiiNunchuck(PinName p_sda, PinName p_scl):i2c(p_sda, p_scl)
knaka 2:9652195745e8 5 {
knaka 2:9652195745e8 6 WiiNunInitFlag = init();
knaka 2:9652195745e8 7 timer.start();
knaka 2:9652195745e8 8 }
knaka 2:9652195745e8 9
knaka 2:9652195745e8 10
knaka 2:9652195745e8 11 bool WiiNunchuck::init()
knaka 2:9652195745e8 12 {
knaka 2:9652195745e8 13 bool result = false;
knaka 2:9652195745e8 14 unsigned char cmd[] = {NUNCHUCK_REGADDR, 0x00};
knaka 2:9652195745e8 15 if (i2c.write(NUNCHUCK_ADDR, (const char*)cmd, sizeof(cmd)) == I2C_ACK) {
knaka 2:9652195745e8 16 result = true;
knaka 2:9652195745e8 17 }
knaka 2:9652195745e8 18 return result;
knaka 2:9652195745e8 19 }
knaka 2:9652195745e8 20
knaka 2:9652195745e8 21
knaka 2:9652195745e8 22 void WiiNunchuck::read()
knaka 2:9652195745e8 23 {
knaka 2:9652195745e8 24 int i;
knaka 2:9652195745e8 25
knaka 2:9652195745e8 26 if(timer.read_ms() < 50) return;
knaka 2:9652195745e8 27
knaka 2:9652195745e8 28 if(!WiiNunInitFlag) {
knaka 2:9652195745e8 29 WiiNunInitFlag = init();
knaka 2:9652195745e8 30 }
knaka 2:9652195745e8 31
knaka 2:9652195745e8 32 if(WiiNunInitFlag) {
knaka 2:9652195745e8 33 const unsigned char cmd[] = {0x00};
knaka 2:9652195745e8 34 if (i2c.write(NUNCHUCK_ADDR, (const char*)cmd, sizeof(cmd)) == I2C_ACK) {
knaka 2:9652195745e8 35 wait(I2C_READ_DELAY);
knaka 2:9652195745e8 36 if (i2c.read(NUNCHUCK_ADDR, readBuf, sizeof(readBuf)) == I2C_ACK) {
knaka 2:9652195745e8 37 for(i = 0; i < NUNCHUCK_READLEN; ++i) {
knaka 2:9652195745e8 38 readBuf[i] = (readBuf[i] ^ 0x17) + 0x17;
knaka 2:9652195745e8 39 }
knaka 2:9652195745e8 40 joyX = readBuf[Joy_X];
knaka 2:9652195745e8 41 joyY = readBuf[Joy_Y];
knaka 2:9652195745e8 42 accX = readBuf[Acc_X] << 2;
knaka 2:9652195745e8 43 accY = readBuf[Acc_Y] << 2;
knaka 2:9652195745e8 44 accZ = readBuf[Acc_Z] << 2;
knaka 2:9652195745e8 45
knaka 2:9652195745e8 46 if(readBuf[Button] & 0x01) {
knaka 2:9652195745e8 47 buttonZ = 0;
knaka 2:9652195745e8 48 } else {
knaka 2:9652195745e8 49 buttonZ = 1;
knaka 2:9652195745e8 50 }
knaka 2:9652195745e8 51 if(readBuf[Button] & 0x02) {
knaka 2:9652195745e8 52 buttonC = 0;
knaka 2:9652195745e8 53 } else {
knaka 2:9652195745e8 54 buttonC = 1;
knaka 2:9652195745e8 55 }
knaka 2:9652195745e8 56 if(readBuf[Button] & 0x04) accX += 1;
knaka 2:9652195745e8 57 if(readBuf[Button] & 0x08) accX += 2;
knaka 2:9652195745e8 58 if(readBuf[Button] & 0x10) accY += 1;
knaka 2:9652195745e8 59 if(readBuf[Button] & 0x20) accY += 2;
knaka 2:9652195745e8 60 if(readBuf[Button] & 0x40) accZ += 1;
knaka 2:9652195745e8 61 if(readBuf[Button] & 0x80) accZ += 2;
knaka 2:9652195745e8 62 }
knaka 2:9652195745e8 63 }
knaka 2:9652195745e8 64 }
knaka 2:9652195745e8 65 timer.reset();
knaka 2:9652195745e8 66 }
knaka 2:9652195745e8 67
knaka 2:9652195745e8 68
knaka 2:9652195745e8 69 unsigned char WiiNunchuck::joyx()
knaka 2:9652195745e8 70 {
knaka 2:9652195745e8 71 read();
knaka 2:9652195745e8 72 return joyX;
knaka 2:9652195745e8 73 }
knaka 2:9652195745e8 74
knaka 2:9652195745e8 75
knaka 2:9652195745e8 76 unsigned char WiiNunchuck::joyy()
knaka 2:9652195745e8 77 {
knaka 2:9652195745e8 78 read();
knaka 2:9652195745e8 79 return joyY;
knaka 2:9652195745e8 80 }
knaka 2:9652195745e8 81
knaka 2:9652195745e8 82
knaka 2:9652195745e8 83 int WiiNunchuck::accx()
knaka 2:9652195745e8 84 {
knaka 2:9652195745e8 85 read();
knaka 2:9652195745e8 86 return accX;
knaka 2:9652195745e8 87 }
knaka 2:9652195745e8 88
knaka 2:9652195745e8 89
knaka 2:9652195745e8 90 int WiiNunchuck::accy()
knaka 2:9652195745e8 91 {
knaka 2:9652195745e8 92 read();
knaka 2:9652195745e8 93 return accY;
knaka 2:9652195745e8 94 }
knaka 2:9652195745e8 95
knaka 2:9652195745e8 96
knaka 2:9652195745e8 97 int WiiNunchuck::accz()
knaka 2:9652195745e8 98 {
knaka 2:9652195745e8 99 read();
knaka 2:9652195745e8 100 return accZ;
knaka 2:9652195745e8 101 }
knaka 2:9652195745e8 102
knaka 2:9652195745e8 103
knaka 2:9652195745e8 104 bool WiiNunchuck::buttonc()
knaka 2:9652195745e8 105 {
knaka 2:9652195745e8 106 read();
knaka 2:9652195745e8 107 return buttonC;
knaka 2:9652195745e8 108 }
knaka 2:9652195745e8 109
knaka 2:9652195745e8 110
knaka 2:9652195745e8 111 bool WiiNunchuck::buttonz()
knaka 2:9652195745e8 112 {
knaka 2:9652195745e8 113 read();
knaka 2:9652195745e8 114 return buttonZ;
knaka 2:9652195745e8 115 }