hi Dirk,

alle änderungen ausgeführt, beim ersten drücken des buttons 1 stimmt die ausgabe (diesmal dir_neu = 360), beim 2ten drücken immer noch 256...

Code:
#include "RP6ControlLib.h"
#include "RP6I2CmasterTWI.h"
#include "RP6Control_OrientationLib.h"
//#include "RP6Control_I2CMasterLib.h"
#include "RP6Control_MultiIOLib.h"

#define I2C_RP6_BASE_ADR 10

uint8_t ch;
char item[12];
char dir[3];
int16_t new_dir; //neue richtung
int16_t old_dir; //gemessene richtung
int16_t temp; //berechnung korrektur richtung

/*
void I2C_requestedDataReady(uint8_t dataRequestID) //macht was?
{
    checkRP6Status(dataRequestID);
}
*/

void calculateDir(char* dir, uint16_t heading) //setzt headingwerte grob in himmelsrichtungen um
{
    dir[1] = ' ';
    dir[2] = '\0';
    if ((heading <= 22) || (heading >=338)) dir[0] = 'N';
    if ((heading >= 23) && (heading <= 67)) {dir[0] = 'N'; dir[1] = 'E';}
    if ((heading >= 68) && (heading <= 112)) dir[0] = 'E';
    if ((heading >= 113) && (heading <= 157)) {dir[0] = 'S'; dir[1] = 'E';}
    if ((heading >= 158) && (heading <= 202)) dir[0] = 'S';
    if ((heading >= 203) && (heading <= 247)) {dir[0] = 'S'; dir[1] = 'W';}
    if ((heading >= 248) && (heading <= 292)) dir[0] = 'W';
    if ((heading >= 293) && (heading <= 337)) {dir[0] = 'N'; dir[1] = 'W';}
}



void I2C_transmissionError(uint8_t errorState) //gibt I2C fehlermeldungen über LCD aus
{
    clearLCD();
    writeStringLCD_P("I2C ERROR -->");
    setCursorPosLCD(1, 0);        // line 2
    writeStringLCD_P("TWI STATE: 0x");
    writeIntegerLCD(errorState, HEX);
}

/*******************sensorwerte holen*************************/
void sensorwerte_holen(void)
{
    intreg2dm = readHDMM01();        // holt sersorwerte
    if  (!intreg2dm)                //daten gültig?
    {
        normalizeHDMM01();              // daten werden "normalisiert"
        heading2dm = headingHDMM01(); // berechnung der headingwerte
    }
}

/******************heading auf LCD schreiben**************/
void heading_ausgeben(void)
{
        setCursorPosLCD(0, 0);          //headingwerte werden auf LCD geschrieben
        writeStringLCD_P("Heading   ");
        writeIntegerLCD(heading2dm, DEC);
}

/*******************berechnung der richtungswerte***********/
void richtung_berechnen(void)
{
   calculateDir(dir, heading2dm);  //berechnung der richtung (N,S,W,E)
}

/**************ausgabe der richtungswerte*******************/
void richtung_ausgeben(void)
{
        setCursorPosLCD(1, 0);
        writeStringLCD_P("direction  ");
        writeStringLCD(dir);            //ausgabe der richtung
}



int main(void)
{


initRP6Control();
multiio_init();
initLCD();
orientation_init();
//COMPASS_2D_init();

    setLEDs(0b1111);
    mSleep(500);
    setLEDs(0b0000);

I2CTWI_initMaster(100);
//I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);//macht was?
I2CTWI_setTransmissionErrorHandler(I2C_transmissionError); //aktiviert I2C fehlermeldungen

    showScreenLCD(" RP6Control M32", " gyro_quadrat");
    mSleep(2500);
    clearLCD();



    while(true)
    {

/*****************anzeige gedrückter buttons****************/
        clearLCD();
        pressedMultiIOButtonNumber = getMultiIOPressedButtonNumber();
        setCursorPosLCD(0, 0);
        writeStringLCD("Button: ");
        writeIntegerLCD(pressedMultiIOButtonNumber, DEC);
        mSleep(500);

        uint8_t key = getMultiIOPressedButtonNumber();


/********************funktion der buttons*********************/
        if(key)
        {
            switch(key)
            {
                case 1://richtung NORD

                        setLEDs(0b0001);                //LED 1 leuchtet
                        {
                            new_dir = 360;
                            sensorwerte_holen();
                            heading_ausgeben();
                            old_dir = heading2dm;
                            setCursorPosLCD(1, 0);
                            writeStringLCD_P("dir  ");
                            writeIntegerLCD(old_dir, DEC);
                            writeStringLCD_P(" ");
                            writeIntegerLCD(new_dir, DEC);
                            mSleep(1000);
                        }

//                        move(150, FWD, DIST_MM(500), true); //fährt 50cm
                        mSleep(1000);
//                        rotate(50, 3, 90, 1); //dreht um 90°
                        clearLCD();

                break;
                case 2:
                    setLEDs(0b0010);

                break;
                case 3:
                    setLEDs(0b0100);
                break;
                case 4:
                    setLEDs(0b1000);
                break;

            }
        }


    }


    return 0;
}
irgendwie haben die 256 mit der definition der variablen zu tun, aber wie?