Jetzt habe ich versucht, eine Funktion direkt im Slave aufzurufen, da es ja mit der fremden Lib nicht geht:
Code:
#define    SRF02_Adr    0xE0                            //Standardadresse des SRF02
void task_SRF02(void);
{
    I2CTWI_transmit2Bytes(SRF02_Adr, 0, 81);        //Gib Distanz in cm zurück
        mSleep(100);
        I2CTWI_transmitByte(SRF02_Adr, 2);
        uint8_t highbyte = I2CTWI_readByte(2);
        I2CTWI_transmitByte(SRF02_Adr, 3);
        uint8_t lowbyte = I2CTWI_readByte(3);
        uint16_t SRF02_Dist = (highbyte*256)+lowbyte;
        writeString_P("\n distance:");
        writeInteger(distance,DEC);
        return SRF02_Dist;
}
Meine Abfrage dann im Register:
Code:
uint16_t mic = getMicrophonePeak();
        uint16_t SRF02_Dist = task_SRF02();
        I2CTWI_readRegisters[I2C_BUTTON] =                  (getPressedKeyNumber());
        I2CTWI_readRegisters[I2C_MICROPHONEPEAKLOW] =    (mic & 0x00ff);
        I2CTWI_readRegisters[I2C_MICROPHONEPEAKHIGH] =     (mic & 0xff00) >> 8;
        I2CTWI_readRegisters[I2C_ADC_2] =                  (uint16_t)readADC(ADC_2);
        I2CTWI_readRegisters[I2C_ADC_3] =                  (uint16_t)readADC(ADC_3);
        I2CTWI_readRegisters[I2C_ADC_4] =                  (uint16_t)readADC(ADC_4);
        I2CTWI_readRegisters[I2C_ADC_5] =                  (uint16_t)readADC(ADC_5);
        I2CTWI_readRegisters[I2C_ADC_6] =                  (uint16_t)readADC(ADC_6);
        I2CTWI_readRegisters[I2C_ADC_7] =                  (uint16_t)readADC(ADC_7);
        I2CTWI_readRegisters[I2C_RF02_DIST_LOW] =          (SRF02_Dist & 0x00ff);
        I2CTWI_readRegisters[I2C_RF02_DIST_HIGH] =          (SRF02_Dist & 0xff00) >> 8;
Jedoch wieder nur Fehler. Das #include "SRF02ControlLibrary.h" habe ich aber schon rausgenommen.