-
Länger zurückfahren
Hab heute meinen asuro zusammengbaut und wollte dann dieses Programm schreiben:
Code:
#include "asuro.h"
int main(void)
{
Init();
MotorSpeed(0,255);
FrontLED(ON);
while(1)
{
if (PollSwitch()==0)
{
MotorDir(FWD,FWD);
BackLED(ON,ON);
StatusLED(GREEN);
}
else
{
MotorDir(RWD,RWD);
BackLED(OFF,OFF);
StatusLED(RED);
}
}
}
aber jetzt soll er ja nicht nur solange rückwärts fahren bis der Taster nicht mwhr gedrückt wird sondern noch für ein paar Sekunden länger.
Hab schon in der Anleitung nachgeschaut aber nicht gefunden wie ich das mache.
-
Grüß dich,
du musst da eine ZeitVerzögerung einbauen, was beseutet, dass wärend der zeit der uC nichts macht, aber seine Ausgänge noch geschaltet bleiben, wie sie vor der ZeitVerzögerung waren.
Schreib einfach hinter MotorDir(RWD,RWD); Msleep(1000); ->das bewirkt, dass der uC für 1000ms also 1s wartet und er somit 1s rückwerts fährt.
Die Funktion Msleep() ist keine Standardfunktion, sie basiert aus Sleep() kannst ja mal beides Nachschlagen, bei Sleep musst du nur beachten, dass z.B.: Sleep(216) 3ms sind, warum das so ist kannste nachlesen.
MfG Mr.Roboto
-
ich bing eigentlich recht überzeugt dass Sleep() in der anleitung drinsteht... wirklich nachlesen!!
-
ja klar, Sleep() ist drin, aber Msleep() nicht, das is doch ne hinzugefügt Funktion, damit man nicht immer tausende Schleifen die die Sleep()-Funktion für z.B. 1000x1ms aufrufen schreiben muss. sondern nur eine Zeile hat.
-
Thx
Ja es stimmt, Sleep steht wirklich in der Anleitung, habs wohl mehrmals überlesen ^^.
-
so hab mal probiert ein programm zu schreiben aber es klappt irgendwie nicht so richtig kann mir mal eben wer helfen wenns am asuro ist wartet er dann nämlich nicht :(
Code:
#include "asuro.h" // NoHit
int main(void)
{
char message[]="Asuro starting NoHit\n";
char message1[]=".";
char message2[]="R";
char message3[]="L";
char message4[]="B";
Init();
MotorDir(FWD,FWD);
MotorSpeed(255,255);
FrontLED(ON);
SerWrite(message,sizeof(message));
while(1)
{
if(PollSwitch()==0)
{
MotorDir(FWD,FWD);
MotorSpeed(255,255);
BackLED(ON,ON);
StatusLED(GREEN);
SerWrite(message1,sizeof(message1));
}
else
{
if(PollSwitch()<=7)
{
MotorDir(RWD,FWD);
MotorSpeed(255,255);
StatusLED(YELLOW);
BackLED(OFF,ON);
SerWrite(message2,sizeof(message2));
Sleep(72*5000);
}
else if(PollSwitch()==8||PollSwitch()==16||PollSwitch()==32)
{
MotorDir(FWD,RWD);
MotorSpeed(255,255);
StatusLED(YELLOW);
BackLED(ON,OFF);
SerWrite(message3,sizeof(message3));
Sleep(72*5000);
}
else
{
MotorDir(RWD,RWD);
MotorSpeed(255,255);
StatusLED(RED);
BackLED(OFF,OFF);
SerWrite(message4,sizeof(message4));
Sleep(72*5000);
}
}
}
}
EDIT V0.2 klappt auch ned :
Code:
#include "asuro.h" // NoHit
int main(void)
{
char message[]="Asuro starting NoHit\n";
char message1[]=".";
char message2[]="R";
char message3[]="L";
char message4[]="B";
int sleep;
Init();
MotorDir(FWD,FWD);
MotorSpeed(255,255);
FrontLED(ON);
SerWrite(message,sizeof(message));
while(1)
{
if(PollSwitch()==0)
{
MotorDir(FWD,FWD);
MotorSpeed(255,255);
BackLED(ON,ON);
StatusLED(GREEN);
SerWrite(message1,sizeof(message1));
}
else
{
if(PollSwitch()<=7)
{
MotorDir(RWD,FWD);
MotorSpeed(255,255);
StatusLED(YELLOW);
BackLED(OFF,ON);
SerWrite(message2,sizeof(message2));
for(sleep=0;sleep<2000;sleep++)
Sleep(72);
}
else if(PollSwitch()==8||PollSwitch()==16||PollSwitch()==32)
{
MotorDir(FWD,RWD);
MotorSpeed(255,255);
StatusLED(YELLOW);
BackLED(ON,OFF);
SerWrite(message3,sizeof(message3));
for(sleep=0;sleep<2000;sleep++)
Sleep(72);
}
else
{
MotorDir(RWD,RWD);
MotorSpeed(255,255);
StatusLED(RED);
BackLED(OFF,OFF);
SerWrite(message4,sizeof(message4));
for(sleep=0;sleep<2000;sleep++)
Sleep(72);
}
}
}
}
-
@so gehts
Code:
#include "asuro.h" // NoHit
int main(void)
{
char message[]="Asuro starting NoHit\n";
char message1[]=".";
char message2[]="R";
char message3[]="L";
char message4[]="B";
int sleep;
int a;
int e;
Init();
MotorDir(FWD,FWD);
MotorSpeed(255,255);
FrontLED(ON);
SerWrite(message,sizeof(message));
while(1)
{
if(PollSwitch()==0)
{
MotorDir(FWD,FWD);
MotorSpeed(255,255);
BackLED(ON,ON);
StatusLED(GREEN);
SerWrite(message1,sizeof(message1));
}
else
{
if(PollSwitch()<=7)
{
MotorDir(RWD,FWD);
MotorSpeed(255,255);
StatusLED(YELLOW);
BackLED(OFF,ON);
SerWrite(message2,sizeof(message2));
for(sleep=0;sleep<2000;sleep++)
{Sleep(72);}
}
else if(PollSwitch()==8||PollSwitch()==16||PollSwitch()==32)
{
MotorDir(FWD,RWD);
MotorSpeed(255,255);
StatusLED(YELLOW);
BackLED(ON,OFF);
SerWrite(message3,sizeof(message3));
for(a=0;a<2000;a++)
{Sleep(72);}
}
else
{
MotorDir(RWD,RWD);
MotorSpeed(255,255);
StatusLED(RED);
BackLED(OFF,OFF);
SerWrite(message4,sizeof(message4));
for(e=0;e<2000;e++)
{Sleep(72);}
}
}
}
}
Also für den Inhalt der for schleifen immer ein { davor und ein } dannach.
Und mehrere Variablen verwenden.
-
for(e=0;e<2000;e++)
{Sleep(72);}
--------------------------------
schreib das mal anders, das ist nisht sehr übersichtlich.
schreib lieber for(e=0;e<2000;e++)
{
Sleep(72);
}
ODER wenn nur eine Anweisung in der for-schleife steht kannst du die klammern auch weglassen, weil der compiler, nur die nächste zeile nach der for-Schleife als auszuführenden code betrachtet. Ich würde aber Variante 1 benutzen
-
ich hatte es ja ohne die {...} sondern die nächste zeile das hat aber irgendwie nicht geklappt
merkwürdig fiunde ich das e++ das gibt es doch in ansi C nicht sondern erst in c++ ??? warum ist es da verfügbar kann man dann auch OOP coden Klassen etc.?
-
e++ geht auch in ansi c, das ist nur zur namensgebungvon c++ geworden... das passt schon. zumindest sind die compiler mittlerweile großzügig genug =)
und so kleine anweisungen kann mal so schreiben:
for(e=0;e<2000;e++) Sleep(72);