bau einfach ans ende while schleife in der go funktion eine tasterabfrage ein.
Hallo, ich brauche eure Hilfe :
Der Asuro fährt ja ne beliebige Strecke mit der Go Funktion ! Nun soll er aber,wenn er vor Ablauf dieser Strecke auf einen Widerstand trifft (Taster), so soll er z.B rückwärts fahren.
Wie und wo baue ich ein Interrupt ein ?
cu
bau einfach ans ende while schleife in der go funktion eine tasterabfrage ein.
Hm? Wie? Dann fährt er doch seine 12mm aus, erst dann prüft er, ob Tastert betätigt sind... Aber das wollte ich ja nicht, sonder ne Abfrage während er fährt
äh der fehler ist mir grad auch aufgefallen, und ahb deswegen mein posting entsprechend geändert
du meinst die Funktion inner asuro.c ?
Was bringt mir das denn?Ich will ihn anschließend doch irgendwelche Anweisungen geben... Geht das nicht im normalen Programm
nacdhem er festgestellt hat, das ein taster gedrückt ist fügst du return 0 ein. dann beendet er dir die funktion an der stelle, und der code wird ganz normal weiter ausgeführt.
mfg EDH
wenn du das jetzt an den anfang der programm.c (oder wie die bei dir halt heißt) copiertst, musst du gar nichts an der asuro.h ändern.
Die funktion GoTaster fäöhrt eine bestimmte strecke, bleibt aber bei einem hinderniss sofort stehen.
probier mal aus, ob das funktioniert, ich habs auf die schnelle nicht getestet.
hier der code:
mfg EDHCode:int GoTaster(int distance, int speed) { int enc_count = 0; int tot_count = 0; int diff = 0; int l_speed = speed, r_speed = speed; enc_count=abs(distance); // enc_count=distance*10000; // enc_count/=12823; Encoder_Set(0,0); // reset encoder MotorSpeed(l_speed,r_speed); if(distance<0) MotorDir(RWD,RWD); else MotorDir(FWD,FWD); while(tot_count<enc_count) { tot_count += encoder[LEFT]; diff = encoder[LEFT] - encoder[RIGHT]; if (diff > 0) { //Left faster than right if ((l_speed > speed) || (r_speed > 244)) l_speed -= 10; else r_speed += 10; } if (diff < 0) { //Right faster than left if ((r_speed > speed) || (l_speed > 244)) r_speed -= 10; else l_speed += 10; } Encoder_Set(0,0); // reset encoder MotorSpeed(l_speed,r_speed); if (PollSwitch()>0) { MotorDir(BREAK,BREAK); MotorSpeed(0,0); return 0; } Msleep(1); } MotorDir(BREAK,BREAK); Msleep(200); return 0; }
Ne, funktioniert leider überhaupt nicht...
ist das denn so schwer ?
ja das scheint schon recht diffizil zu sein.
ist das denn so schwer ?Wenn man seinen Hirn nicht einschalten kann/will ist es sicher schwer...ja das scheint schon recht diffizil zu sein.
Ein Tastendruck löst einen externen Interrupt auf Pin Int1 aus.
Vielleicht bringt es Euch weiter...
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Lesezeichen