Tag Zusammen,
Nach langem rätseln und suchen hab ich es geschafft das Programm an meine M128 anzupassen - war gar nich mal so leicht, für mich als Einsteiger
Allerdings hab ich noch zwei Probleme:
Wie kann ich mir die Kommastelle anzeigen lassen? So wie bei dem Base Programm funktioniert das nicht.
Des weiteren scheint der Kompass die Grade falsch zu messen.
Norden -> 25°
Osten -> 100°
Süden -> 160°
Westen -> 250°
Ich hab meinen Kompass noch nicht kalibriert. Das Kompass Modul ist doch schon vorkalibriert - mit meinem Taschenkompass werde ich die Kalibrierung wohl auch nicht besser hinbekommen. In der nähe des RP6 hat man ja überall Magnetfelder (Motoren, etc.).
Wie kalibriere ich den Kompass am besten?
Hier noch mein Programm:
Code:
/*******************************************************************************
* RP6 C-Control PRO M128 Erweiterungsmodul
* ----------------------------------------------------------------------------
* RP6 - M128 - CMPS03 Kompassmodul
* ----------------------------------------------------------------------------
*
******************************************************************************/
// RP6CCLib einbinden
#include "RP6CCLib.cc"
// Stopwatch einbinden
#include "RP6StopwatchesCClib.cc"
// I2C Bus Adresse des Controllers auf dem Mainboard
#define RP6_BASE_ADR 10
// Die I²C Adresse des CMPS03 ist 0xC0:
#define CMPS03_ADR 0xC0
// CMPS03 Daten Register:
#define VERSION 0 // Firmware Version
#define LOW 1 // Lowbyte
#define HIGH 2 // Highbyte
#define CALIBRATE 15 // Kalibrierung
//CMPS03 DATEN REGISTER AUSLESEN
void readCMPS03(void)
{
word messung;
byte messung_low, messung_high;
Thread_Lock(1);
I2C_Start();
I2C_Write(0xC0);
I2C_Write(2); // Register 2 lesen
I2C_Start();
I2C_Write(0xC1); // Register 1 lesen
messung_high = I2C_Read_ACK();
messung_low = I2C_Read_NACK();
messung = (( messung_high << 8 ) + messung_low);
I2C_Stop();
Thread_Lock(0);
if (getStopwatch1() > 500) {
print("Richtung: ");
printInteger(messung / 10);
println(" Grad");
setStopwatch1(0);
}
}
/** CMPS03 Kalibrierung
void calibrateCMPS03(byte data)
{
if (data) {data = 255;}
RP6_writeCMD_2parm(CMPS03_ADR, CALIBRATE, data);
}
*/
// Mainprogramm
void main(void)
{
RP6_CCPRO_Init(); // Auf Startsignal warten!
I2C_Init(I2C_100kHz);
newline();
println(" ________________________");
println(" \\| RP6 ROBOT SYSTEM |/");
println(" \\_-_-_-_-_-_-_-_-_-_/ ");
newline();
println(" CMPS03 Test ");
newline();
showScreenLCD("CMPS03 Test","");
beep(100, 200, 300);
setStopwatch1(0);
startStopwatch1();
while(true)
{
readCMPS03();
}
}
Lesezeichen