hallo seuche
zu deiner frage bezügliche ir-fernsteuerung:
wenn man es mal druchschaut hat sind die grundlagen nicht mal so schwer:
hier wird einfach ein wert in cmd abgespeichert, der einer bestimmten taste entspricht:
Code:
cmd = ReadRC5();
if (cmd)
{
cmd &= RC5_MASK;
hier erfolgt dann die auswertung, was gemacht werden soll:
Code:
switch (cmd)
{
case TUNERRWD : //taste rückwärts fahren gedrückt
case DIARWD :
SerPrint("rwd\r\n");
IRRwd(); //funktion für rückwärts fahren aufrufen
break;
case TUNERFWD : //taste vorwärts fahren gedrückt
case DIAFWD :
SerPrint("fwd\r\n");
IRFwd(); //funktion für vorwärts fahren aufrufen
break;
case TUNERLEFT : //taste links fahren gedrückt
case DIALEFT:
SerPrint("lft\r\n");
IRLeft(); //funktion für links fahren aufrufen
break;
case TUNERRIGHT : //taste rechts fahren gedrückt
case DIARIGHT:
SerPrint("rgt\r\n");
IRRight(); //funktion für rechts fahren aufrufen
break;
case TUNERSTOP : //taste stehen bleiben
case DIASTOP :
SerPrint("stp\r\n");
IRStop(); //funktion für stehen bleiben
break;
}
hinter TUNERSTOP, DIASTOP, TUNERRIGHT,... verbergen sich nur zahlen, die oben definiert sind
Code:
#define DIARWD 0x1008
#define DIAFWD 0x1002
#define DIALEFT 0x1004
#define DIARIGHT 0x1006
#define DIASTOP 0x1029
#define TUNERRWD 0x1021
#define TUNERFWD 0x1020
#define TUNERLEFT 0x1011
#define TUNERRIGHT 0x1010
#define TUNERSTOP 0x1025
dadurch ist leichter ersichtlich, was man damit erreichen will. die entsprechende zahl für eine taste kann man in tabellen heraus suchen
im nächsten abschnitt werd kontrolliet, ob die geschwindigkeiten im erlaubten bereich sind (>=OFFSET und <=255) und die motorfunktionen werden mit den ermittelten werten aufgerufen
Code:
if (speedLeft > 0 && speedLeft < OFFSET) speedLeft += OFFSET;
if (speedLeft < 0 && speedLeft > -OFFSET) speedLeft -= OFFSET;
if (speedRight > 0 && speedRight < OFFSET) speedRight += OFFSET;
if (speedRight < 0 && speedRight > -OFFSET) speedRight -= OFFSET;
leftDir = rightDir = FWD;
if (speedLeft < 0) leftDir = RWD;
if (speedRight < 0) rightDir = RWD;
if (speedLeft > 255) speedLeft = 255;
if (speedLeft < -255) speedLeft = -255;
if (speedRight > 255) speedRight = 255;
if (speedRight < -255) speedRight = -255;
MotorDir(leftDir,rightDir);
MotorSpeed(abs(speedLeft),abs(speedRight));
wenn du nun möchtest, dass beim drücken von "vorwärts" nicht langsam beschleunigt wird, sondern eine bestimmte geschwindigkeit vorgegeben werden soll brauchst du nur die funktion IRFwd() entsprechend abändern
z.B:
Code:
void IRFwd(void)
{
speedRight =200; //mit 200/200 vorwärts
speedLeft =200;
FrontLED(ON);
BackLED(OFF,OFF);
}
die anderen funktionen kannst du ebenfalls anpassen. dann sollte es wie gewünscht funktioneren
ich hoffe, das hilft dir bei diesem problem weiter
Lesezeichen