Stebsi
14.10.2005, 08:40
Hallo!
Ich habe jetzt eine Steuerung programmiert die es mir ermöglicht den Asuro über den Ziffernblock bei der Tastatur fahren zulassen / zu steuern.
//////////////////////////////////////////////////////////////////////
// //
// 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:
€]UUUUÕuUUÝ]Wu
Ich möchte das der Asuro jetzt nach vorne fährt.
versuche mit:
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
Ich habe jetzt eine Steuerung programmiert die es mir ermöglicht den Asuro über den Ziffernblock bei der Tastatur fahren zulassen / zu steuern.
//////////////////////////////////////////////////////////////////////
// //
// 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:
€]UUUUÕuUUÝ]Wu
Ich möchte das der Asuro jetzt nach vorne fährt.
versuche mit:
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