WarChild
27.01.2008, 22:29
Hallo,
Ich möchte eigentlich nur ganz simpel zwei Register vom SRF02 auslesen.
Ich habe das Makefile angepasst und die I2C Library eingebunden.
// Includes:
#include "RP6RobotBaseLib.h"
#include "RP6I2CmasterTWI.h"
#define SRF02 0xE0
// Main:
int main(void)
{
initRobotBase();
setLEDs(0b111111);
mSleep(1000);
setLEDs(0b100100);
I2CTWI_initMaster(100);
// Main loop
while(true)
{
task_RP6System();
I2CTWI_transmit2Bytes(SRF02, 0, 81);
mSleep(65);
I2CTWI_transmitByte(SRF02, 2);
uint8_t highbyte = I2CTWI_readByte(2);
I2CTWI_transmitByte(SRF02, 3);
uint8_t lowbyte = I2CTWI_readByte(3);
uint16_t distance = (highbyte+256)+lowbyte;
writeString_P("\n distance:");
writeInteger(distance,DEC);
mSleep(500);
}
return 0;
}
Woran liegt der Fehler, dass nicht die Distanz, sondern immer nur die 256 ausgegeben werden? Demnach sind Low und Highbyte beide 0.
Ich denke mal, dass ich es nicht falsch angeschlossen habe.
mfg WarChild
Ich möchte eigentlich nur ganz simpel zwei Register vom SRF02 auslesen.
Ich habe das Makefile angepasst und die I2C Library eingebunden.
// Includes:
#include "RP6RobotBaseLib.h"
#include "RP6I2CmasterTWI.h"
#define SRF02 0xE0
// Main:
int main(void)
{
initRobotBase();
setLEDs(0b111111);
mSleep(1000);
setLEDs(0b100100);
I2CTWI_initMaster(100);
// Main loop
while(true)
{
task_RP6System();
I2CTWI_transmit2Bytes(SRF02, 0, 81);
mSleep(65);
I2CTWI_transmitByte(SRF02, 2);
uint8_t highbyte = I2CTWI_readByte(2);
I2CTWI_transmitByte(SRF02, 3);
uint8_t lowbyte = I2CTWI_readByte(3);
uint16_t distance = (highbyte+256)+lowbyte;
writeString_P("\n distance:");
writeInteger(distance,DEC);
mSleep(500);
}
return 0;
}
Woran liegt der Fehler, dass nicht die Distanz, sondern immer nur die 256 ausgegeben werden? Demnach sind Low und Highbyte beide 0.
Ich denke mal, dass ich es nicht falsch angeschlossen habe.
mfg WarChild