Hi,
ich habe ein Problem mit der Auswertung der Odometriesensorik.
Die Sensoren gehen doch auf einen AD Wandler!? und nehmen Spannungswerte zwischen 0 und 1024 an wobe 0 [Ein] und 1 [Aus] darstellt.
Ich wollte den Asuro dazu bringen, dass er wenn er gegen ein Hinderniss prallt den Rückwärtsgang einlegt und einen vorher definierten Kurvenradius fährt. Bsp. Asuro fährt frontal auf eine Wand (also K3 und K4) aktiv. Nun ist z.B. im Program eine 90 Grad Kurve vorgesehen. Jetzt soll er sich parallel zur wand (also 90 Grad zum Aufprallwinkel) ausrichten und weiterfahren.
Leider scheitere ich schon bei der Auswertung der Sensoren.
Um die Odometrie zu Testen fährt mein Roboter einfach gerade aus.
Jetzt soll er mir bei jedem Hell-. Dunkelwechsel des linken Rades die Status LED umschalten und beim rechten Rad die FrontLED An und Aus.
Allerdings geht lediglich die StatusLED auf Rot.
Code:
#include "asuro.h"
// Bit 0 ( 1) -> K6 rechts außen
// Bit 0 ( 2) -> K5 rechts mitte
// Bit 0 ( 4) -> K4 rechts innen
// Bit 0 ( 8) -> K3 links innen
// Bit 0 (16) -> K2 links mitte
// Bit 0 (32) -> K1 links außen
int main(void)
{
int zaehler; //ausweichzeit nach kollision
unsigned int data [2]; //Array erstellen mit 2 speicherzellen für Odometriedaten
//data [0] links T11
//data [1] rechts T12
Init();
while(1)
{
//-----------------------------------------------
if (PollSwitch() >= 1)
{
if(PollSwitch()==1)
{
if(PollSwitch()==1)
{
StatusLED (RED);
MotorDir(RWD,RWD);
MotorSpeed(0,200);
for(zaehler=0; zaehler < 500; zaehler++)
{
Sleep(255);
}
}}}
//-----------------------------------------------
if (PollSwitch() >= 2)
{
if(PollSwitch()==2)
{
if(PollSwitch()==2)
{
StatusLED (YELLOW);
MotorDir(RWD,RWD);
MotorSpeed(0,100);
for(zaehler=0; zaehler < 500; zaehler++)
{
Sleep(255);
}
}}}
//-----------------------------------------------
if (PollSwitch() >= 4)
{
if(PollSwitch()==4)
{
if(PollSwitch()==4)
{
StatusLED (GREEN);
MotorDir(RWD,RWD);
MotorSpeed(100,0);
for(zaehler=0; zaehler < 500; zaehler++)
{
Sleep(255);
}
}}}
//-----------------------------------------------
if (PollSwitch() >= 8)
{
if(PollSwitch()==8)
{
if(PollSwitch()==8)
{
StatusLED (GREEN);
MotorDir(RWD,RWD);
MotorSpeed(200,0);
for(zaehler=0; zaehler < 500; zaehler++)
{
Sleep(255);
}
}}}
//-----------------------------------------------
if (PollSwitch() >= 16)
{
if(PollSwitch()==16)
{
if(PollSwitch()==16)
{
StatusLED (YELLOW);
MotorDir(RWD,RWD);
MotorSpeed(100,0);
for(zaehler=0; zaehler < 500; zaehler++)
{
Sleep(255);
}
}}}
//-----------------------------------------------
if (PollSwitch() >= 32)
{
if(PollSwitch()==32)
{
if(PollSwitch()==32)
{
StatusLED (RED);
MotorDir(RWD,RWD);
MotorSpeed(100,0);
for(zaehler=0; zaehler < 500; zaehler++)
{
Sleep(255);
}
}}}
//-----------------------------------------------
else
{
MotorDir(FWD,FWD);
MotorSpeed(100,100);
StatusLED(RED);
BackLED(OFF,OFF);
OdometrieData(data);
if(data [0] < 512){
StatusLED(YELLOW);
StatusLED(OFF);}
if(data [0] > 512){
StatusLED(GREEN);
StatusLED(OFF);}
if(data [1] < 512)
FrontLED(ON);
if(data [1] > 512)
FrontLED(OFF);
}}
return 0;
}
Allerdings gibts es auch sonst Effekte die ich mir nicht erklären kann.
Bsp. im Programm wird die StatusLED anstat von Gelb zu Grün von Rot zu Grün gewechselt. Und plötzlich geht nix mehr. Genauso wenn ich am am Anfang des Programmes die Status LED auf Rot setze. Warum ?
Außerdem glimmen die BackLED´s immer mit. Liegt wahrscheinlich an der Verschaltung!
Und wenn jemand gerade dabei ist meine fragen zu beantworten!
Wie kann ich die AD Wandlerwerte der Odometrie per IR an das Hyperterminal senden? Ich würde einfach gerne sehen welche Werte der AD Wandler so ausgibt!
Auch wenn mir gerade noch etliche fragen einfallen belasse ich es erstmals dabei.
Ich bin jedem dankbar der mir hielft.
Gruß
Simon
Lesezeichen