PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Zeitliche begrenzung beim fahren Hilfe benötigt



voxya
05.11.2011, 11:53
Hallo zusammen
kurz zu mir bin absoluter neuling habe den asuro gerade 4 Tage und mein erstes programm geschrieben Ziel ist es wenn k1 o. k2, gedrückt werden rechts drehen und bei k5 o.k6 halt links das aber zeitlich damit eine 90grad drehung klappt. bei k1,k2 klappt es schon aber bei k5,k6 nicht habe schon versucht die zeitbegrenzung dort einzusetzten usw aber es klappt ned dann dereht er immer nur in eine richtung und fährt nicht mehr geradeaus.
Wenn einer verbesserungen hat bin ich gerne dabei :-)

Hier das programm:

#include "asuro.h"

int main(void)
{
Init ();
int z;
FrontLED(ON);
while(1)
{
PollSwitch();
if (PollSwitch() & 0x30)
{
MotorDir(BREAK,RWD);
MotorSpeed(0,180);
for(z=0 ; z < 270 ; z++) Sleep(216);
}
else if (PollSwitch() & 0x03)
{
MotorDir(RWD,BREAK);
MotorSpeed(170,0);
}

else
{
MotorDir(FWD,FWD);
MotorSpeed(170,170);
}
}
return 0;
}


Wie gesagt bin neuling :-)

radbruch
05.11.2011, 13:01
Hallo

Sinnvoll scheint mir das mehrmalige Einlesen des Tastenwertes und mit diesem Wert dann weiterzuarbeiten. Vermutlich wird ein Taster falsch berechnet (Dein K6 hatte doch nicht richtig funktioniert?). Jetzt zeigen die BackLEDs, welcher Taster als gedrückt erkannt wird:


#include "asuro.h"

int main(void)
{
char taste, taste2;
int z;

Init ();
FrontLED(ON);
StatusLED(OFF);
taste=PollSwitch();
while(1)
{
taste2=taste; // letzen Wert von Pollswitch() merken
taste=PollSwitch(); // neuen Wert einlesen

if((taste==taste2) && (taste>0)) // 2x gleicher Wert und eine Taste gedrückt?
{
if((taste & 0b110000) && !(taste & 0b001111)) // // nur K1 oder K2?
{
StatusLED(RED);
MotorDir(BREAK,RWD);
MotorSpeed(0,180);
for(z=0 ; z < 270 ; z++) Sleep(216);
}
else if((taste & 0b000011) && !(taste & 0b111100)) // K5 oder K6
{
StatusLED(GREEN);
MotorDir(RWD,BREAK);
MotorSpeed(170,0);
for(z=0 ; z < 270 ; z++)
{
if(PollSwitch() & 1) BackLED(OFF,ON); else BackLED(ON,OFF); // K5 oder K6 gedrückt?
Sleep(216);
}
}
else // Rest
{
StatusLED(YELLOW);
MotorDir(RWD,RWD);
MotorSpeed(170,180);
for(z=0 ; z < 270 ; z++) Sleep(216);
MotorDir(BREAK,RWD);
MotorSpeed(0,180);
for(z=0 ; z < 270 ; z++) Sleep(216);
}
}
else
{
BackLED(OFF,OFF);
StatusLED(OFF);
MotorDir(FWD,FWD);
MotorSpeed(170,170);
}
}
return 0;
}(ungetestet)

Möglicherweise musst du deine Taster kalibrieren:

http://www.arexx.com/forum/viewtopic.php?f=19&t=1378

Gruß

mic

voxya
05.11.2011, 13:18
doch die taster funktionieren alle nur das er halt bei k5,k6 auch eine 90grad drehung macht klappt ned wenn ich dort die zeitliche begrenzung einsetze fährt er nur noch rechts also RWD,BREAK nach dem motto

voxya
05.11.2011, 13:20
#include "asuro.h"

int main(void)
{
Init ();
int z=0;
FrontLED(ON);
while(1)
{
if (PollSwitch() & 0x30)
{
MotorDir(BREAK,RWD);
MotorSpeed(0,170);
for(z=0 ; z < 270 ; z++) Sleep(216);
}
if (PollSwitch() & 0x03)
{
MotorDir(RWD,BREAK);
MotorSpeed(170,0);
for(z=0 ; z < 270 ; z++) Sleep(216);
}

else
{
MotorDir(FWD,FWD);
MotorSpeed(170,170);
}
}
return 0;
}



so meine ich das dann fährt er nur noch rechts wenn ich ihn einschalte und der mr zuckt nur noch als ob dann dort ein konflikt ist oder so

wenn ich es ohne zeitbegrenzung mache bei k5,k6 fährt er genau richtig aber halt nur solange der taster gedrückt ist (an der wand vorbei zitternd

Danke an radbruch bin jetzt schlauer geworden :-)