Artemis_Simetra
01.12.2013, 22:10
Hallo zusammen, ich versuch derzeit mein neues HDMM01 von Pollin zum laufen zu bringen.
Es hängt an einem ArduinoUnoSMD mit folgendem Sketch:
#include <Wire.h>
#define I2ADDR 0×30
#define TakeMeasure 0×01
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("Start Programm");
Wire.beginTransmission(0x30);
Wire.write(0x00);
Wire.write(0x02);
delay(10);
Wire.write(0x04);
delay(10);
}
void loop(){
byte MsbX,LsbX,MsbY,LsbY;
int x,y;
char line[80];
Wire.beginTransmission(0x30); // Pollin HDMM01
Wire.write(0x00);
Wire.write(0x01);
Wire.endTransmission();
delay(20);
Wire.beginTransmission(0x30);
Wire.write(0x01);
Wire.requestFrom(0x30, 4);
while(Wire.available()<4);
MsbX =Wire.read(); // obere 4 Bit X
LsbX =Wire.read(); // untere 8 Bit X
MsbY =Wire.read(); // obere 4 Bit Y
LsbY =Wire.read(); // untere 8 Bit Y
Wire.endTransmission(); // stop transmitting
x=((MsbX&0x0f)*256)+(LsbX);
y=((MsbY&0x0f)*256)+(LsbY);
// Ausgabe von X, Y
Serial.print("KOM:");
Serial.print(x);
Serial.print(";");
Serial.println(y);
delay(500);
}
Es werden auch Werte ausgegeben. Allerding kann ich den Kompass drehen und wenden wie ich will, die Werte verändern sich kaum (2080-2099;2050-2070).
Kann mir da jemand weiterhelfen?
vg malte
Es hängt an einem ArduinoUnoSMD mit folgendem Sketch:
#include <Wire.h>
#define I2ADDR 0×30
#define TakeMeasure 0×01
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("Start Programm");
Wire.beginTransmission(0x30);
Wire.write(0x00);
Wire.write(0x02);
delay(10);
Wire.write(0x04);
delay(10);
}
void loop(){
byte MsbX,LsbX,MsbY,LsbY;
int x,y;
char line[80];
Wire.beginTransmission(0x30); // Pollin HDMM01
Wire.write(0x00);
Wire.write(0x01);
Wire.endTransmission();
delay(20);
Wire.beginTransmission(0x30);
Wire.write(0x01);
Wire.requestFrom(0x30, 4);
while(Wire.available()<4);
MsbX =Wire.read(); // obere 4 Bit X
LsbX =Wire.read(); // untere 8 Bit X
MsbY =Wire.read(); // obere 4 Bit Y
LsbY =Wire.read(); // untere 8 Bit Y
Wire.endTransmission(); // stop transmitting
x=((MsbX&0x0f)*256)+(LsbX);
y=((MsbY&0x0f)*256)+(LsbY);
// Ausgabe von X, Y
Serial.print("KOM:");
Serial.print(x);
Serial.print(";");
Serial.println(y);
delay(500);
}
Es werden auch Werte ausgegeben. Allerding kann ich den Kompass drehen und wenden wie ich will, die Werte verändern sich kaum (2080-2099;2050-2070).
Kann mir da jemand weiterhelfen?
vg malte