Dependents:   HoverboardTest RobotArmControl

Committer:
knaka
Date:
Tue Nov 23 05:50:09 2010 +0000
Revision:
1:2fde37da31b9
Parent:
0:bc63bc0629f8

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
knaka 0:bc63bc0629f8 1 //
knaka 0:bc63bc0629f8 2 // WiiNunchuck
knaka 0:bc63bc0629f8 3 //
knaka 0:bc63bc0629f8 4
knaka 0:bc63bc0629f8 5 #include "mbed.h"
knaka 0:bc63bc0629f8 6 #include "TextLCD.h"
knaka 0:bc63bc0629f8 7
knaka 0:bc63bc0629f8 8 // I2C
knaka 0:bc63bc0629f8 9 #define NUNCHUCK_ADDR 0xA4 // 0x52 << 1
knaka 0:bc63bc0629f8 10 #define NUNCHUCK_REGADDR 0x40 //
knaka 0:bc63bc0629f8 11 #define NUNCHUCK_READLEN 0x06 //
knaka 0:bc63bc0629f8 12 #define I2C_ACK 0
knaka 0:bc63bc0629f8 13 #define I2C_READ_DELAY 0.01
knaka 0:bc63bc0629f8 14
knaka 0:bc63bc0629f8 15 #define Joy_X 0
knaka 0:bc63bc0629f8 16 #define Joy_Y 1
knaka 0:bc63bc0629f8 17 #define Acc_X 2
knaka 0:bc63bc0629f8 18 #define Acc_Y 3
knaka 0:bc63bc0629f8 19 #define Acc_Z 4
knaka 0:bc63bc0629f8 20 #define Button 5
knaka 0:bc63bc0629f8 21
knaka 0:bc63bc0629f8 22 bool WiiNunInitFlag = false;
knaka 0:bc63bc0629f8 23 int joyX = 0, joyY = 0, accX = 0, accY = 0, accZ = 0, buttonC = 0, buttonZ = 0;
knaka 0:bc63bc0629f8 24 char readBuf[NUNCHUCK_READLEN];
knaka 0:bc63bc0629f8 25 I2C WiiNun(p9, p10);
knaka 0:bc63bc0629f8 26
knaka 0:bc63bc0629f8 27 TextLCD lcd(p24, p26, p27, p28, p29, p30);
knaka 0:bc63bc0629f8 28
knaka 0:bc63bc0629f8 29 bool WiiNunInit()
knaka 0:bc63bc0629f8 30 {
knaka 0:bc63bc0629f8 31 bool result = false;
knaka 0:bc63bc0629f8 32 unsigned char cmd[] = {NUNCHUCK_REGADDR, 0x00};
knaka 0:bc63bc0629f8 33 if (WiiNun.write(NUNCHUCK_ADDR, (const char*)cmd, sizeof(cmd)) == I2C_ACK) {
knaka 0:bc63bc0629f8 34 result = true;
knaka 0:bc63bc0629f8 35 }
knaka 0:bc63bc0629f8 36 return result;
knaka 0:bc63bc0629f8 37 }
knaka 0:bc63bc0629f8 38
knaka 0:bc63bc0629f8 39 void WiiNunRead()
knaka 0:bc63bc0629f8 40 {
knaka 0:bc63bc0629f8 41 int i;
knaka 0:bc63bc0629f8 42
knaka 0:bc63bc0629f8 43 if(!WiiNunInitFlag) {
knaka 0:bc63bc0629f8 44 WiiNunInitFlag = WiiNunInit();
knaka 0:bc63bc0629f8 45 }
knaka 0:bc63bc0629f8 46
knaka 0:bc63bc0629f8 47 if(WiiNunInitFlag) {
knaka 0:bc63bc0629f8 48 const unsigned char cmd[] = {0x00};
knaka 0:bc63bc0629f8 49 if (WiiNun.write(NUNCHUCK_ADDR, (const char*)cmd, sizeof(cmd)) == I2C_ACK) {
knaka 0:bc63bc0629f8 50 wait(I2C_READ_DELAY);
knaka 0:bc63bc0629f8 51 if (WiiNun.read(NUNCHUCK_ADDR, readBuf, sizeof(readBuf)) == I2C_ACK) {
knaka 0:bc63bc0629f8 52 for(i = 0; i < NUNCHUCK_READLEN; ++i) {
knaka 0:bc63bc0629f8 53 readBuf[i] = (readBuf[i] ^ 0x17) + 0x17;
knaka 0:bc63bc0629f8 54 }
knaka 0:bc63bc0629f8 55 joyX = readBuf[Joy_X];
knaka 0:bc63bc0629f8 56 joyY = readBuf[Joy_Y];
knaka 0:bc63bc0629f8 57 accX = readBuf[Acc_X] << 2;
knaka 0:bc63bc0629f8 58 accY = readBuf[Acc_Y] << 2;
knaka 0:bc63bc0629f8 59 accZ = readBuf[Acc_Z] << 2;
knaka 0:bc63bc0629f8 60
knaka 0:bc63bc0629f8 61 if(readBuf[Button] & 0x01) {
knaka 0:bc63bc0629f8 62 buttonZ = 0;
knaka 0:bc63bc0629f8 63 } else {
knaka 0:bc63bc0629f8 64 buttonZ = 1;
knaka 0:bc63bc0629f8 65 }
knaka 0:bc63bc0629f8 66 if(readBuf[Button] & 0x02) {
knaka 0:bc63bc0629f8 67 buttonC = 0;
knaka 0:bc63bc0629f8 68 } else {
knaka 0:bc63bc0629f8 69 buttonC = 1;
knaka 0:bc63bc0629f8 70 }
knaka 1:2fde37da31b9 71 if(readBuf[Button] & 0x04) accX += 1;
knaka 1:2fde37da31b9 72 if(readBuf[Button] & 0x08) accX += 2;
knaka 1:2fde37da31b9 73 if(readBuf[Button] & 0x10) accY += 1;
knaka 1:2fde37da31b9 74 if(readBuf[Button] & 0x20) accY += 2;
knaka 1:2fde37da31b9 75 if(readBuf[Button] & 0x40) accZ += 1;
knaka 1:2fde37da31b9 76 if(readBuf[Button] & 0x80) accZ += 2;
knaka 0:bc63bc0629f8 77 }
knaka 0:bc63bc0629f8 78 }
knaka 0:bc63bc0629f8 79 }
knaka 0:bc63bc0629f8 80 }
knaka 0:bc63bc0629f8 81
knaka 0:bc63bc0629f8 82
knaka 0:bc63bc0629f8 83 int main() {
knaka 0:bc63bc0629f8 84 while(1) {
knaka 0:bc63bc0629f8 85 WiiNunRead();
knaka 0:bc63bc0629f8 86 lcd.cls();
knaka 0:bc63bc0629f8 87 lcd.printf("x%3d y%3d c%1d z%1d", joyX, joyY, buttonC, buttonZ);
knaka 0:bc63bc0629f8 88 lcd.locate(0, 1);
knaka 0:bc63bc0629f8 89 lcd.printf("x%d y%d z%d", accX, accY, accZ);
knaka 0:bc63bc0629f8 90 wait(0.1);
knaka 0:bc63bc0629f8 91 }
knaka 0:bc63bc0629f8 92 }