Asuro mit IR Fernbedienung eines DVD Players/Beamers steuern
Hallo!
Ich habe jetzt eine Steuerung programmiert die es mir ermöglicht den Asuro über den Ziffernblock bei der Tastatur fahren zulassen / zu steuern.
Code:
//////////////////////////////////////////////////////////////////////
// //
// Programmiert von: Stefan Bösing //
// Funktion des Programmes: Robotersteuerung über Ziffernblock //
// Copyright 2005 //
// http://www.stebsi.com/asuro //
// //
//////////////////////////////////////////////////////////////////////
#include "asuro.h"
int main(void)
{
Init();
unsigned int i;
unsigned char j;
unsigned int speed;
char daten[] = "0";
SerWrite("\rBin bereit zum Starten!\r",25);
anfang:
StatusLED(GREEN);
SerRead(&daten[0],1,0); // DATEN EMPFANGEN
if(daten[0] == '8') // Wenn 8 vorwärts
{
MotorDir(FWD,FWD);
MotorSpeed(0xFF,0xFF);
SerWrite("\rVorwärts!\n\r",10);
BackLED(OFF,OFF);
FrontLED(ON);
goto anfang;
}
if(daten[0] == '7') // Wenn 7 linkskurve
{
MotorDir(FWD,FWD);
MotorSpeed(100,0xFF);
SerWrite("\rVorwärts links!\n\r",16);
BackLED(ON,OFF);
FrontLED(ON);
goto anfang;
}
if(daten[0] == '9') // Wenn 9 rechtskurve
{
MotorDir(FWD,FWD);
MotorSpeed(0xFF,100);
SerWrite("\rVorwärts rechts!\n\r",17);
BackLED(OFF,ON);
FrontLED(ON);
goto anfang;
}
if(daten[0] == '2') // Wenn 2 rückwärts
{
MotorDir(RWD,RWD);
MotorSpeed(0xFF,0xFF);
SerWrite("\rRückwärts!\n\r",11);
FrontLED(OFF);
BackLED(ON,ON);
goto anfang;
}
if(daten[0] == '1') // Wenn 1 rückwärtslinks
{
MotorDir(RWD,RWD);
MotorSpeed(100,0xFF);
SerWrite("\rRückwärts links!\n\r",17);
FrontLED(OFF);
BackLED(ON,OFF);
goto anfang;
}
if(daten[0] == '3') // Wenn 3 rückwärtsrechts
{
MotorDir(RWD,RWD);
MotorSpeed(0xFF,100);
SerWrite("\rRückwärts rechts!\n\r",18);
FrontLED(OFF);
BackLED(OFF,ON);
goto anfang;
}
if(daten[0] == '4') // Wenn 4 nach links drehen
{
MotorDir(RWD,FWD);
MotorSpeed(125,125);
SerWrite("\rDrehen links!\n\r",13);
FrontLED(OFF);
BackLED(ON,OFF);
goto anfang;
}
if(daten[0] == '6') // Wenn 6 nach rechts drehen
{
MotorDir(FWD,RWD);
MotorSpeed(125,125);
SerWrite("\rDrehen rechts!\n\r",15);
FrontLED(OFF);
BackLED(OFF,ON);
goto anfang;
}
if(daten[0] == '5') // Wenn 5 stop
{
MotorDir(FWD,FWD);
MotorSpeed(0,0);
SerWrite("\rStop!\n\r",6);
FrontLED(OFF);
BackLED(OFF,OFF);
goto anfang;
}
if(daten[0] == '-') // Wenn - langsamer
{
FrontLED(OFF);
BackLED(ON,ON);
SerWrite("\rBremsen!\n\r",9);
for (speed = 0xFF; speed > 0; speed --) {
for (i = 0; i < 0x1FFF; i++)
for (j = 0; j < 0x1F; j++);
MotorSpeed(speed,speed);
}
goto anfang;
}
if(daten[0] == '+') // Wenn + schneller
{
FrontLED(ON);
BackLED(OFF,OFF);
SerWrite("Beschleunige!\n\r",14);
for (speed = 0; speed < 0xFF; speed ++) {
for (i = 0; i < 0x1FFF; i++)
for (j = 0; j < 0x1F; j++);
MotorSpeed(speed,speed);
}
goto anfang;
}
return 0;
}
Nun möchte ich den Roboter gerne mit einer Fernbedienung (eines DVD-Players oder eines Beamers oder ähnliches) steuern.
Wenn ich auf der einen Fernbedienung die Taste für oben drücke gibt mir Hyperterminal folgendes aus:
Ich möchte das der Asuro jetzt nach vorne fährt.
versuche mit:
Code:
SerRead(&daten[0],14,0); // DATEN EMPFANGEN
if(daten[0] == '€]UUUUÕuUUÝ]Wu') // Wenn €]UUUUÕuUUÝ]Wu (oben) dann vorwärts
{
MotorDir(FWD,FWD);
MotorSpeed(0xFF,0xFF);
SerWrite("\rVorwärts!\n\r",10);
BackLED(OFF,OFF);
FrontLED(ON);
goto anfang;
}
sind gescheitert.
In anderen Themen zur ASURO Fernbedienung habe ich gelesen das man da einen umsetzer benötigt. Nur bin ich daraus nicht wirklich schlau geworden was gemeint ist.
Dann habe ich noch was gelesen mit der RC5 Daten, aber was ich da machen muss weiß ich auch nicht.
Viele Grüße
Stefan
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Stebsi,
der IR-Code von Deiner Fernbedienung muss noch angepasst werden. Wenn Du die Tasten auf der DVD Bedienung betätigst (mehrmals am besten) wird der HEX Wert auf dem HT ausgegeben. Der Wert ist dann in der IRDemo.c
unter
#define DIARWD 0xB44B
#define DIAFWD 0xB54A
#define DIALEFT 0xF40B
#define DIARIGHT 0xF708
#define DIASTOP 0xB649
anzupassen. Grund des scheiterns die Daten werden anders gelesen als gedacht. Stichwort Toggelbits!!
Gruss Winne