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();
    }
}