bugmenot
26.12.2010, 16:13
Der RP6 hält nach einigen Sekunden alle Motoren an, lässt die vier roten LEDs blinken und gibt folgendes aus:
##### EMERGENCY SHUTDOWN #####
##### ALL OPERATIONS STOPPED TO PREVENT ANY DAMAGE! #####
### ENCODER (OR MOTOR) MALFUNCTION! ###
Affected channel:LEFT!
(s. task_motorControl() function in RP6Lib!)
You need to check Encoder/Motor assembly (or your software).
The Robot needs to be resetted now.
Das hier ist mein Programmcode:
#include "RP6RobotBaseLib.h"
#include "RP6I2CmasterTWI.h"
#define SRF02 0xE2
uint8_t srfbuffer[2];
uint16_t distance = 200;
void obstacle(void)
{
moveAtSpeed(0,0);
}
// Main:
int main(void)
{
initRobotBase();
setLEDs(0b111111);
mSleep(1000);
setLEDs(0b100100);
I2CTWI_initMaster(100);
moveAtSpeed(100,100);
// Main loop
while(true)
{
task_motionControl();
task_ADC();
I2CTWI_transmit2Bytes(SRF02, 0, 81);
mSleep(65);
I2CTWI_transmitByte(SRF02, 2);
I2CTWI_readBytes(SRF02, srfbuffer, 2);
distance = (srfbuffer[0] << 8) + srfbuffer[1];
if( (distance < 50))
obstacle();
//writeString_P("\n distance:");
//writeInteger(distance,DEC);
mSleep(500);
}
return 0;
}
Wenn ich moveAtSpeed(100,100) durch moveAtSpeed(0,100) ersetze passiert dasselbe, nur dass der Affected Channel dann RIGHT ist.
Das Selftest-Programm läuft einwandfrei, d.h. ein Hardwarefehler ist auszuschliessen.
##### EMERGENCY SHUTDOWN #####
##### ALL OPERATIONS STOPPED TO PREVENT ANY DAMAGE! #####
### ENCODER (OR MOTOR) MALFUNCTION! ###
Affected channel:LEFT!
(s. task_motorControl() function in RP6Lib!)
You need to check Encoder/Motor assembly (or your software).
The Robot needs to be resetted now.
Das hier ist mein Programmcode:
#include "RP6RobotBaseLib.h"
#include "RP6I2CmasterTWI.h"
#define SRF02 0xE2
uint8_t srfbuffer[2];
uint16_t distance = 200;
void obstacle(void)
{
moveAtSpeed(0,0);
}
// Main:
int main(void)
{
initRobotBase();
setLEDs(0b111111);
mSleep(1000);
setLEDs(0b100100);
I2CTWI_initMaster(100);
moveAtSpeed(100,100);
// Main loop
while(true)
{
task_motionControl();
task_ADC();
I2CTWI_transmit2Bytes(SRF02, 0, 81);
mSleep(65);
I2CTWI_transmitByte(SRF02, 2);
I2CTWI_readBytes(SRF02, srfbuffer, 2);
distance = (srfbuffer[0] << 8) + srfbuffer[1];
if( (distance < 50))
obstacle();
//writeString_P("\n distance:");
//writeInteger(distance,DEC);
mSleep(500);
}
return 0;
}
Wenn ich moveAtSpeed(100,100) durch moveAtSpeed(0,100) ersetze passiert dasselbe, nur dass der Affected Channel dann RIGHT ist.
Das Selftest-Programm läuft einwandfrei, d.h. ein Hardwarefehler ist auszuschliessen.