Pages: [1]   Go Down
Author Topic: Interfacing DJ Hero Controller via I2C, always one byte missing  (Read 719 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi there,
i have a strange problem when i try to interface my DJ Hero Turntable or  Guitar Hero World Tour Controller with my Arduino Uno.

I have written the following sample code which schould just initialize the Controller and print me the six byte i request into the serial console:

Code:
#include <Wire.h>

#define BAUDRATE 19200
#define ADDRESS 0x52

void setup()
{
   Serial.begin(BAUDRATE);
   
   Wire.begin();
   Wire.beginTransmission(ADDRESS);     
   Wire.write(0xF0);
   Wire.write(0x55);
   Wire.endTransmission();
   delay(1);
   Wire.beginTransmission(ADDRESS);
   Wire.write(0xFB);
   Wire.write((uint8_t)0x00);
   Wire.endTransmission();
}

void loop()
{
  int count = 0;     
  int values[6];

  Wire.requestFrom (ADDRESS, 6);
   
  while(Wire.available())
  {
    values[count] = Wire.read();
    count++;
  }
 
  Serial.println(values[0], BIN);
  Serial.println(values[1], BIN);
  Serial.println(values[2], BIN);
  Serial.println(values[3], BIN);
  Serial.println(values[4], BIN);
  Serial.println(values[5], BIN);
  Serial.println("-------------------");
 
  Wire.beginTransmission(ADDRESS);
  Wire.write((uint8_t)0x00);
  Wire.write((uint8_t)0x00);
  Wire.endTransmission();
  delay(1000);
 
}


That works, except for that i miss the first byte which holds (for example) information about the x-axis of the controllers analoge stick.
That means in my case the last byte is always 0 and the byte before are shifter one position higher (so the first byte is not there and the second ist now first).

I tried the same code with my Guitar Hero controller and have the same problem.
But the code works with the Nintendo Nunchuk.

The only really valuable Information regarding the controller i got from http://wiibrew.org/wiki/Wiimote/Extension_Controllers/DJ_Hero_%28Wii%29_Turntable

Has anybody  a idea what could be wrong with my code?
Problem exists with Arduino 1.0 and 1.01 on Mac OS X.
Logged

0
Offline Offline
God Member
*****
Karma: 0
Posts: 593
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
 Wire.beginTransmission(ADDRESS);
  Wire.write((uint8_t)0x00);
  Wire.write((uint8_t)0x00);
  Wire.endTransmission();

is wrong, what that does is "set pointer to 0x00, write 0x00 into where you are pointing"

each write auto-increments the pointer, that's why you are missing the first byte, because the write operation skipped it

Code:
 Wire.beginTransmission(ADDRESS);
  Wire.write((uint8_t)0x00);
  Wire.endTransmission();

is correct, what that does is "set pointer to 0x00, wait for a read operation from where you are pointing"
Logged

Freelance engineer, consultant, contractor. Graduated from UW in 2013.

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Great that works now.

Thank you so much frank26080115.

Now i can start converting the byte to something usefull and pack it into a library, so that other peolple coud use that to interface that controller.
Logged

Pages: [1]   Go Up
Jump to: