Hi Jungs ich bin es wieder,
wie versprochen habe jetzt nun ein programm geschrieben,
alles funzt,jetzt habe ich das nächste problem das er ins modus2linienverfolgung reinspringt und anfängt zu stottern bis mir der RP6Loader einen fehler raus bringt.
Der fehler heißt Motor current check motioncontrol was kann das sein.
Vermute irgendwas wird zeitgleich aufgerufen aber was?
Hoffe irgenjemand kann mir da helfen
Code:
#include "RP6RobotBaseLib.h"
#define RC_PROMO8
#ifdef RC_PROMO8
#define RC5_KEY_vorwaertsm 2
#define RC5_KEY_rueckwaertsm 8
#define RC5_KEY_linksm 4
#define RC5_KEY_rechtsm 6
#define RC5_KEY_Ledanm 32
#define RC5_KEY_Ledausm 33
#define RC5_KEY_modus1fernbedienung 7
#define RC5_KEY_modus2linieverfolgen 9
#endif
uint8_t vorwaertsm;
uint8_t rueckwaertsm;
uint8_t rechtsm;
uint8_t linksm;
uint8_t Ledanm;
uint8_t Ledausm;
uint8_t Resetm;
uint8_t mleftptmp;
uint8_t mrightptmp;
uint8_t power_links;
uint8_t power_rechts;
uint8_t mleft_ptmp;
uint8_t mright_ptmp;
uint8_t modus1fernbedienung;
uint8_t modus2linieverfolgen;
void ruecksetzen(void)
{
if(getStopwatch2() > 200)
{
vorwaertsm=0;
rueckwaertsm=0;
linksm=0;
rechtsm=0;
setStopwatch2(0);
}
}
void receiveRC5Data(RC5data_t rc5data)
{writeString_P("Toggle Bit:");
writeChar(rc5data.toggle_bit + '0');
writeString_P(" | Device Address:");
writeInteger(rc5data.device, DEC);
writeString_P(" | Key Code:");
writeInteger(rc5data.key_code, DEC);
writeChar('\n');
switch(rc5data.key_code)
{
case RC5_KEY_vorwaertsm:
writeString_P("vorwaertsm: ");
writeIntegerLength(vorwaertsm, DEC, 4);
writeChar('\n');
writeChar('\n');
vorwaertsm=1; //vorwärts fahren
if(vorwaertsm==1&&modus1fernbedienung==1)
{
move(200,FWD,DIST_MM(150),0);
}
break;
case RC5_KEY_rueckwaertsm:
writeString_P("rueckwaertsm: ");
writeIntegerLength(rueckwaertsm, DEC, 4);
writeChar('\n');
writeChar('\n');
rueckwaertsm=1; //rückwärts fahren
if(rueckwaertsm==1&&modus1fernbedienung==1)
{
move(200,BWD,DIST_MM(150),0);
}
break;
case RC5_KEY_rechtsm:
writeString_P("rechtsm: ");
writeIntegerLength(linksm, DEC, 4);
writeChar('\n');
writeChar('\n');
rechtsm=1; //rechts fahren
if(rechtsm==1&&modus1fernbedienung==1)
{
rotate(50, RIGHT, 55, 0);
}
break;
case RC5_KEY_linksm:
writeString_P("linksm: ");
writeIntegerLength(linksm, DEC, 4);
writeChar('\n');
writeChar('\n');
linksm=1; //links fahren
if(linksm==1&&modus1fernbedienung==1)
{
rotate(50, LEFT, 55, 0);
}
break;
case RC5_KEY_Ledanm:
writeString_P("Ledanm: ");
writeIntegerLength(linksm, DEC, 4);
writeChar('\n');
writeChar('\n');
Ledanm=1; // Ledan:
if(Ledanm==1&&modus2linieverfolgen==1)
{
DDRA|=(E_INT1);
PORTA|=E_INT1;
}
break;
case RC5_KEY_Ledausm:
writeString_P("Ledausm: ");
writeIntegerLength(linksm, DEC, 4);
writeChar('\n');
writeChar('\n');
Ledausm=1;
if(Ledausm==1&&modus2linieverfolgen==1)
{ // Ledaus:
DDRA|=(E_INT1);
PORTA &= ~E_INT1;
}
break;
case RC5_KEY_modus1fernbedienung:
writeString_P("modus1fernbedienung: ");
writeIntegerLength(modus1fernbedienung,DEC, 4);
writeChar('\n');
writeChar('\n'); //Fernbedienung
modus1fernbedienung=1;
modus2linieverfolgen=0;
break;
case RC5_KEY_modus2linieverfolgen:
writeString_P("modus2linieverfolgen: ");
writeIntegerLength(modus2linieverfolgen,DEC, 4);
writeChar('\n');
writeChar('\n'); //Linieverfolgen
modus2linieverfolgen=1;
modus1fernbedienung=0;
break;
}
}
void setMotorPWM(void)
{
if(power_links > 210) power_links = 210;
if(power_rechts > 210) power_rechts = 210;
mleft_power=mleft_ptmp=power_links;
mright_power=mright_ptmp=power_rechts;
OCR1BL = power_links;
OCR1AL = power_rechts;
if(power_links || power_rechts)
TCCR1A = (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
else
TCCR1A = 0;
}
void lichtsensoren (void)
{
writeInteger(readADC(ADC_LS_L), 10);
writeString_P(" - ");
writeInteger(readADC(ADC_LS_R), 10);
writeString_P("\n\r");
if (readADC(ADC_LS_L) > readADC(ADC_LS_R))
{
setLEDs(4);
setMotorPower(100,50);
}
else
{
setLEDs(32);
setMotorPower(50,100);
}
mSleep(100);
}
int main(void)
{
initRobotBase();
setLEDs(0b111111);
writeChar('\n');
writeString_P("RP6 controlled by RC5 TV Remote\n");
writeString_P("___________________________\n");
mSleep(500);
setLEDs(0b000000);
powerON();
startStopwatch2();// Stopuhr 2 wird gestartet
// Set the RC5 Receive Handler:
IRCOMM_setRC5DataReadyHandler(receiveRC5Data);
// Main loop
while(true)
{
if(modus2linieverfolgen==1)
{
setMotorPWM();
lichtsensoren();
}
task_RP6System();
// Motion Control tasks etc.
} // "
//Reset();
return 0;
}
Lesezeichen