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:
hier erfolgt dann die auswertung, was gemacht werden soll:Code:cmd = ReadRC5(); if (cmd) { cmd &= RC5_MASK;
hinter TUNERSTOP, DIASTOP, TUNERRIGHT,... verbergen sich nur zahlen, die oben definiert sindCode: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; }
dadurch ist leichter ersichtlich, was man damit erreichen will. die entsprechende zahl für eine taste kann man in tabellen heraus suchenCode:#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
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:
die anderen funktionen kannst du ebenfalls anpassen. dann sollte es wie gewünscht funktionerenCode:void IRFwd(void) { speedRight =200; //mit 200/200 vorwärts speedLeft =200; FrontLED(ON); BackLED(OFF,OFF); }
ich hoffe, das hilft dir bei diesem problem weiter







Zitieren

Lesezeichen