Hallo, ich habe einen PRO-BOT 128 und habe auch noch das BUch gekauft indem beschrieben ist wie man diesen mit einer Fersteurung betrieben wird. Habe dann auch noch eine Uni-Ferbeinung gekauft, dennoch ohne erfolg. Dann bin ich auf diese Seite gestoßen: http://www.elektronik.nmp24.de/?Robots:PRO-BOT128:RC5_Fernsteuerung_mit_RCX161 Da ich diese Ferbedienung auch habe, wollte ich es gleich probieren. Also das programm ab Zeile 15 kopiert und in IDE eingefügt. Komplimiert und in den ProBot geflasht. Dann habe ich ihn gestartet, ohne Erfolg wie letztes mal. Hab mir die Codes im unteren Fenster anzeigen lassen die der Probot empfängt: Vorwaerts: 1:0:32:96 0:0:32:96 Links: 1:0:17:81 0:0:17:81 Rechts: 1:0:16:80 0:0:16:80 Stopp: 1:0:41:105 0:0:41:105 Rueckwaerts: 1:0:33:97 0:0:33:97 Programm: ______________________________________________________________________ _ ______________________________________________________________________ _ // Compiler-Direktiven #define RC5DATAMASK 0b0000000000111111 // Konstante definieren (10 Nullen + 6 Einsen) #define SPEED1 225 #define SPEED2 250 void main(void) { PRO_BOT128_INIT(); //PRO-BOT128 Setup LCD_Init(); RC5_Init(26); // 26 ist die Hardwareadresse AbsDelay(100); //Wait 0,1 Sec. LCD_ClearLCD(); Akkuspg(); // Ausgabe der Akkuspannung LCD_ClearLCD(); // Wie funktioniert RC5? // Theorie an der Tafel (-; // Fernbedienung RCX161: // TV = Kanal 0 // 32 // 17 41 16 // 33 // int RC5Value; // Rohwert von der Fernsteuerung int RC5Data; // Variable für den Tastencode (die letzten 6 Bit von RC5Value) while(1) { RC5Value=RC5_Read(); // Übergibt dem Programm die RC5-Rohdaten (14 Bit) // Wir wollen den Tastencode ermitteln (die ganz rechten 6 Bit) // Den "Rest" (links) müssen wir maskieren RC5Data=RC5Value&RC5DATAMASK; // Ausgabe auf Display LCD_Locate(1, 1); LCD_WriteText("Tastencode: "); LCD_WriteWord(RC5Data, 2); // LCD_Locate(2, 1); switch(RC5Data) { case 32: LCD_WriteText("Vorwaerts!!"); MOTOR_DIR(1,1); //MOTOR DIRECTION DRIVE_ON(); //Motorspannung an MOTOR_POWER(SPEED2, SPEED1); break; case 17: LCD_WriteText("Links!!!!!!"); MOTOR_DIR(1,1); //MOTOR DIRECTION DRIVE_ON(); //Motorspannung an MOTOR_POWER(0, SPEED1); break; case 16: LCD_WriteText("Rechts!!!!!"); MOTOR_DIR(1,1); //MOTOR DIRECTION DRIVE_ON(); //Motorspannung an MOTOR_POWER(SPEED2, 0); break; case 41: LCD_WriteText("Stopp!!!!!!"); DRIVE_OFF(); //Motorspannung aus break; case 33: LCD_WriteText("Rueckwaerts"); break; } } } ______________________________________________________________________ ______________________________________________________________________ ____ Ich habe auch schon z.B. hinter case 33: 97 geschrieben. Das hat auch nichts gebracht. Ich mach da jetzt schon seit Weihnachten dran rum. Danke im voraus!
Hi, na du maskierst nur das erste Byte raus. Auf diese Daten prüfst du aber nicht. In deiner switch Anweisung wird auf Daten aus dem 2. Byte geprüft. Entweder du schiebst die RC5 Daten passend zur Case-Anweisund oder du passt die Caseanweisung zu deinen Daten im ersten Byte an. Gruß, Schorschi.
Könntest du ein Beispiel machen? Das ist für mich jetzt eine ganz andere Welt. Bin jetzt erst im Einstieg von solchen Sachen. Das wäre nett.
Könnte mir da jemand kurz sagen, was ich reinschreiben muss?
lass dir auf dem lcd anzeigen was die Ferbedienung sendet=>RC5Value (14bit) Aufteilen in zwei byte char lowbyte,highbyte; lowbyte=RC5Value & 0xff; highbyte=RC5Value>>8; LCD_Locate(1, 1); LCD_WriteText("lowbyte: "); LCD_WriteWord(lowbyte, 2); // LCD_Locate(2, 1); LCD_WriteText("highbyte "); LCD_WriteWord(highbyte, 2); // Dann siehst du, ob die Fernbedienung bei einem Tastendruck wirklich vernünftigen code liefert. Wenn das der Fall ist, machst du deine switch-anweisung über lowbyte mit den Werten, die beim jeweiligen Tastendruck auf dem lcd als lowbyte angezeigt werden. switch(lowbyte)....
dumme Frage:
>>Hab mir die
Codes im unteren Fenster anzeigen lassen die der Probot empfängt:
Wie hast du dir dann den empfangenen code anzeigen lassen?
Was soll der Befehl LCD_write?
Wenn du den empfangenen code nicht kontrollieren kannst, wird es echt
schwierig. Vielleicht solltest du noch 5 Euro in ein einfaches LCD
investieren?
Vielleicht habe ich die Aufgabenstellung aber einfach nicht verstanden.
Das Ding müsste doch zumindest eine led haben. du kannst dir den code auch über die led anzeigen lassen for(i=0;i<(lowbyte & 0b00111111);i++){ led_on; delay... led_off; delay... } etwas mühselig, aber du siehst dann zumindest, ob gleichmäßige Signale ankommen.
leluno schrieb: > enn du den empfangenen code nicht kontrollieren kannst, wird es echt > schwierig. Vielleicht solltest du noch 5 Euro in ein einfaches LCD > investieren? > > Vielleicht habe ich die Aufgabenstellung aber einfach nicht verstanden. Der Code wird in der IDE unten links angezeigt wenn ich mit der FB dem Probot etwas sende. Das wird im Ausgabefenster angezeigt: Vorwaerts: 1:0:32:96 0:0:32:96 Links: 1:0:17:81 0:0:17:81 Rechts: 1:0:16:80 0:0:16:80 Stopp: 1:0:41:105 0:0:41:105 Rueckwaerts: 1:0:33:97 0:0:33:97 Wenn ich dei jeweiligen pfeiltasten drücke. Ich habe vom ersteller vom Programm diese antwort bekommen: Die erste 1 bzw. Null ist das Togglebit, dieses ändert sich immer bei einen erneuten Tastendruck. //Daten aufteilen RC5_Addr=((RC5_Code >> 6)) & 0x1f; RC5_Command=RC5_Code & 0x3F; RC5_ExtCommand=RC5_Command | ((RC5_Code & 0x1000) >> 6); //Debugausgabe (Start über F10!) Msg_WriteWord(RC5_Tog_bit); Msg_WriteText(Spacer); Msg_WriteWord(RC5_Addr); Msg_WriteText(Spacer); Msg_WriteWord(RC5_Command); Msg_WriteText(Spacer); Msg_WriteWord(RC5_ExtCommand); Msg_WriteChar(13); //Meine Adresse = 20 if(RC5_Addr==20) { switch(RC5_Command) { //vorwärts case 16: ..... Das zweite Byte ist die Adresse die ist immer Fest bei jeden Tastendruck. Das dritte Byte Ist das Kommando, dieses ändert sich beim drücken von unterschiedlichen Tasten. Dieses kannst Du zur Steuerung verwenden! Das Ext... Byte benötigst du nicht, also immer mit den Command Byte arbeiten. Da dein Code die Adresse 16 besitzt musst Du if(RC5_Addr==20) auf if(RC5_Addr==16) ändern! Dies Cases entsprechen deinen Commandos wie Pfeiltaste usw. wichtig ist das die Fernbedienung auch RC5 sendet (mal die Philipsgeräteliste durchtesten) Lass dir einfach einmal das Empfangene RC5 Word in der IDE (Entwicklungsumgebung engl. integrated development environment) ausgeben. Da wahrscheinlich das empfangene Word anders ist wie im Beispiel, musst Du das entsprechende Word deiner Taste eintragen. if(RC5_Addr==20) { switch(RC5_Command) { //vorwärts case 16: FLL_ON(); FLR_ON(); BLL_OFF(); BLR_OFF(); DRIVE_FWD(180,0); break; Die Adresse und das Command wird wird bei deiner FB wo anders sein...
Ich kann mit der Antwort von ihm nicht veile anfangen... Hab schon etliche Dinge ausprobiert auf Basis der Antwort...
Das ist für mich auch unverständlich. Die letzten 6bits müsstest du richtig markiert haben. kommt die ausgabe 1:0:32:96... wirklich vom Probot? wenn er dir mit Msg_WriteWord(RC5_Data); einen bestimmten wert sendet, müsste switch(RC5_Data) mit genau diesem Wert funktionieren. letzter ausweg probieren mit led
setze unmittelbar vor dem >> switch(RC5Data) deinen an anderer Stelle erfolgreichen debug-befehl >> Msg_WriteWord(RC5_Data); dann siehst du, welchen wert RC5_Data genau an dieser Stelle hat und ob diese Stelle überhaupt abgearbeitet wird. Notfalls schreib den Wert RC5_data vor dem switch ins eeprom, dieses kannst du mit bascom auslesen. auch so kannst du rc5_data an der stelle switch überprüfen. bau led_on's in dein programm ein, um zu überprüfen ob switch überhaupt erreicht wird
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.