Hallo RacerD,
dieser teil muss mit in die while(1){} da er nur 10 taktzüklen ausgeführt wird.Code:for(i=0;i<10;i++) { PollSwitch(); } t=PollSwitch();
MfG Martinl
Entschuldigt meine allg. Unwissenheit zu diesem Thema, da ich noch recht neu bin.
Aber nun zu meiner Frage: Mir ist bewusst dass es zu diesem thema schon viele threats gibt, aber die nützen alle nichts (desswegen brauche ich eine privatanpassung von einem netten menschen) : ich habe hier einen prgrammcode, bei dem ich selbst nach mehrmaligem drüberschauen nicht den fehler finden konnte, denn wenn ich ihn ausführe, macht der roboter nicht das was er soll, er fährt nur geradeaus. Der Editor hat scheinbar keinen fehler gebracht.
DiV RacerDCode:#include "asuro.h" int main(void) { Init (); int cm90=16.5; int s1=10; int s2=20; int i, t; for(i=0;i<10;i++) { PollSwitch(); } t=PollSwitch(); while (1) { if (t>=1) { Encoder_Init(); while (encoder[LEFT]<=cm90*3) { MotorDir(FWD,FWD); MotorSpeed(160,0); } cm90=0; MotorDir(BREAK,BREAK); MotorSpeed(0,0); while (encoder[LEFT]<=s1*3) { MotorDir(FWD,FWD); MotorSpeed(160,160); } MotorDir(BREAK,BREAK); MotorSpeed(0,0); cm90=0; while (encoder[RIGHT]<=cm90*3) { MotorDir(FWD,FWD); MotorSpeed(0,160); } MotorDir(BREAK,BREAK); MotorSpeed(0,0); cm90=0; while (encoder[LEFT]<=s2*3) { MotorDir(FWD,FWD); MotorSpeed(160,160); } MotorDir(BREAK,BREAK); MotorSpeed(0,0); cm90=0; while (encoder[RIGHT]<=s1*3) { MotorDir(FWD,FWD); MotorSpeed(0,160); } MotorDir(BREAK,BREAK); MotorSpeed(0,0); cm90=0; while (encoder[LEFT]<=s1*3) { MotorDir(FWD,FWD); MotorSpeed(160,0); } MotorDir(BREAK,BREAK); MotorSpeed(0,0); cm90=0; } else { MotorDir (FWD,FWD); MotorSpeed(160,160); } } return 0; }
Hallo RacerD,
dieser teil muss mit in die while(1){} da er nur 10 taktzüklen ausgeführt wird.Code:for(i=0;i<10;i++) { PollSwitch(); } t=PollSwitch();
MfG Martinl
geholfen hat es nicht... aber trotzdem vielen dank
das problem liegt an dem ganzen zeugs was bei der if abfrage ausgeführt wirdl.
probier mal obs geht, wenn du erst noch encoderset(0,0) aufurfst.
wenn nich könntest du doch auch einfach go unt turn hernehmen.
...
encoderset(0,0) kennt er scheinbar nicht
was go und turn betrifft.... übt das mich ja nicht...aber gut.. ich werde es versuchen
EncoderSet(0,0)
kennt er vieleicht schon. ich bin halt zu fual dei umschalttaste zu benutzen![]()
...
ist es nicht so, dass am anfang
hier testest du ob schalter gedrückt (10 zyclen)!!for(i=0;i<10;i++)
{
PollSwitch();
}
t=PollSwitch();
dann gehst du in dei while
und in der while testest du den taster.while (1) {
if (t>=1) {
..schnipp...
} else {
MotorDir (FWD,FWD);
MotorSpeed(160,160);
}
nur wird in der while nie der taster aktualisiert und somit fährt asuro immer gerade aus ....
es sei denn, der taster würde gedrückt werden bevor!!!!!!! er losfähr.
hmm das hat martin schon geschrieben...
aber in der schleife...
teste mal
aber sag mal wass soll da genau passieren?Code:#include "asuro.h" int main(void) { Init (); int cm90=16.5; int s1=10; int s2=20; int i, t; while (1) { for(i=0;i<10;i++) { PollSwitch(); } t=PollSwitch(); if (t>=1) { //Scahlter wurde gedrückte Encoder_Init(); while (encoder[LEFT]<=cm90*3) { MotorDir(FWD,FWD); MotorSpeed(160,0); } cm90=0; //warum setzt du den cm90 auf 0? MotorDir(BREAK,BREAK); MotorSpeed(0,0); } else { MotorDir (FWD,FWD); MotorSpeed(160,160); } } return 0; }
taste gedrückt und dann....
1. while in if abfrage -->drehe rechts
dann geradeausfahren..... (2. while)while (encoder[LEFT]<=cm90*3)
{
MotorDir(FWD,FWD);
MotorSpeed(160,0); //rechts drehen
}
dann setzt du cm90 auf 0 damit ist die 3. while unsinnig
danach sieht es für mich so aus als ob die s2 und s1 viel kleiner als encoder -->while wird nicht gefahrencm90=0;
while (encoder[RIGHT]<=cm90*3)
{
MotorDir(FWD,FWD);
MotorSpeed(0,160);
}
gruß
ralf
da wird benötigt, weil bei einmaligem aufruf falsche werte drannstehen können, weil sich dieser kondensator da noch nciht entladen hat.ist es nicht so, dass am anfang
hier testest du ob schalter gedrückt (10 zyclen)!!
for(i=0;i<10;i++)
{
PollSwitch();
}
t=PollSwitch();
...
also erstmal ein großes danke an euch beide: EDH und Downad
@Downad
ok das mit dem taster IN der schleife hab ich geändert
was nun das program machen soll? nunja es sollte etwa sowas machen:
sobald er an meinen Finger (representativ für einen Gegenstand) stößt, sollte er eine rechtsdrehung machen , ein stück vorwärts fahren, links drehn, vorwärts wieder links und mit der vorderseite zum finger zeigend, also genau 180° gedreht im gegensatz zur startposition. (hoffenltich versteht das jemand)
natürlich muss er nach dem anstoßen noch ein stück zurück fahren. Aber das sollte erstmal ein versuch sein, dass die Befehlsfolge eingehalten wird.
Das ist natürlcih unsinn, was ich da geschrieben hab. t sollte 0 gesetzt werden.Zitat von Downad
Das verstehe ich nicht, beim geradeausfahren (gleiche variablen, nur beim motor 160 links sowohl rechts) ist er genau meine angegebene strecke gefahren... vllt zählt mein encoder anders?Zitat von Downad
mfg RD
naja... also bis auf kleine abweichungen sollten eigentlich alle encoder gleich zählen =)
poste mal den aktuellen code, so wie er im moment ist (nach allen korrekturen).
Lesezeichen