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.
Lesezeichen