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