-
Kollisionsprogramm
Hallo Programmiergemeinde
ich habe seit 1 woche mit dem programmieren des asuros begonnen und wollte heute ein programm entwerfen
der asuro soll vorwärts fahren bis er anstößt und dann etwa 2 sec rückwärts fahren um dann erneut nach vorne zu fahren
das programm von mir sieht so aus
Code:
#include "asuro.h"
void warten(unsigned char zeit);
int main(void)
{
//unsigned int i;
unsigned char taste;
unsigned int asd = 0;
Init();
MotorDir(FWD,FWD);
MotorSpeed(150,150);
warten(250);
while(1)
{
taste = PollSwitch();
if (taste!=0)
{
StatusLED(YELLOW);
warten(100);
asd = 1;
}
if(asd == 1)
{
StatusLED(GREEN);
MotorDir(RWD,RWD);
MotorSpeed(150,150);
warten(500);
MotorSpeed(0,0);
asd = 0;
}
else
{
StatusLED(RED);
MotorDir(FWD,FWD);
MotorSpeed(150,150);
}
}
return(0);
}
void warten(unsigned char zeit)
{
unsigned int i;
for (i = 0; i < zeit; i++)
{
Sleep(255);
}
}
jedoch der asuro fährt nach vorne und beginnt dann nur noch rücktwärts zufahren und das compilieren zeigt keine weitern fehler mehr an
mfg
-
hallo,
eigentlich sieht das ganz gut aus, ka woran das liegt. aber warum machst du 2 if abfragen? waum nicht den inhalt vov if asd==1 direkt da hin schreiben, wo asd=1 gesetzt wiird, und das else,zum ersten if.
mfg jeffrey
-
Probier mal aus dem if(asd == 1), else if (...) zu machen. Vielleicht liegt es daran.
mfg
Erik
-
danke
@jeffrey das 2 mal if war nur dazu da um die led direkt zu testen
ok und ich werd das ganze mal morgen durchgehen im praktikum
:-) cout
-
den fehler kenn ich du musst Pollswitch ungefähr 10 mal hintereinander in einer schleife abspielen und die ergebnisse speichern
und wenn sie alle gleich sind erst den befehl zum ausweichen geben
-
so in etwa:
for(i=0;i<10;i++)
taste[i]=PollSwitch();
if(taste[0] > 0 && taste[1] > 0 && taste[2] > 0 && taste[3] > 0 && taste[3] > 0 && taste[4] > 0 && taste[5] > 0 && taste[6] > 0 && taste[7] > 0 && taste[8] > 0 && taste[9] > 0){
... Source Code
}
-
ich glaube 10 mal ist etwas übertieben, 2-3 mal müssten genügen
-
anstatt:
Code:
taste = PollSwitch();
if (taste!=0)
{
StatusLED(YELLOW);
warten(100);
asd = 1;
würde ich so machen:
Code:
taste = PollSwitch();
if (taste!=0) && (PollSwitch()!=0))
{
StatusLED(YELLOW);
warten(100);
asd = 1;
da du die pollswitch funktion öfters aufrufen solltest!!!
so sollte es funktionieren!!
EDIT:
da war wohl hail schneller :P JA, 2 - 3 mal sollte reichen!! (bei 3 mal. einfach eine weitere Variable deklarieren, sie mit pollswitch gleichstellen und in der IF-Bedingung auffähren!)
-
Der grund warum ein button öfters ausgeführt werden muss ist der, weil der Kondensator einwenig braucht bis er volläuft richtig?=
-
hallo Hardest
ob der Kondensator auch eine so wichtige Rolle spielt weiß ich nicht, aber in einem anderen Tread (weiß leider nicht mehr welchem), steht, dass es hauptsächlich durch Spannungsspitzen, die von den Motoren verursacht werden, zu diesen falschen Werten bei PollSwitch() kommt
mfg hai1991