es macht ja nur dann einen sinn, wenn der asuro immer weg von der wand dreht, oder? Versuche doch die taster einzeln abzufragen, sodass er wenn er links anstösst nach rechts wegdreht und umgekehrt...
Hallo Zusammen,
da mein Asuro, wenn er zu schräg auf ein Hindernis zufährt, anstossen kann, habe ich versucht den US-Code um eine Art "Taster-Kollisions-Schutz" zu erweitern:
Jetzt aber eine Frage: Wie kann ich einen Zufallsgenerator einbauen, dass der ASURO nicht immer auf die gleiche Seite ausweicht?Code:#include "asuro.h" #include "ultrasonic.h" #include "myasuro.h" #define MAXDIFF 80 int main(void) { int abstand, abstand_alt, diff; Init(); abstand = Chirp(); while(TRUE) { unsigned char i; unsigned char taste=0; abstand_alt = abstand; abstand = Chirp(); diff = abstand - abstand_alt; for(i=0;i<10;i++) { PollSwitch(); } taste=PollSwitch(); if( (abstand>15) && (abs(diff)<MAXDIFF) && (taste==0)) { StatusLED(GREEN); MotorDir(FWD, FWD); MotorSpeed(150, 150); for(i=0;i<10;i++) { PollSwitch(); } } else { StatusLED(RED); MotorDir(RWD, RWD); MotorSpeed(100, 200); Msleep(300); } } return 0; }
es macht ja nur dann einen sinn, wenn der asuro immer weg von der wand dreht, oder? Versuche doch die taster einzeln abzufragen, sodass er wenn er links anstösst nach rechts wegdreht und umgekehrt...
gruß inka
Da hast du recht, wenn aber vom US ein Hindernis erkannt wird, geht's dann nicht. Ich meine dass sich der ASURO dann "natürlicher" verhält.
verstehe ich nicht...
wenn also die abfrage <10cm positiv beantwortet wird funktioniert die abfrage der taster nicht?
gruß inka
Bei meinem Programm dreht der Asuro weg, wenn der Abstand kleiner 15 cm wird, bzw. wenn ein Taster betätigt wird. Allerdings dreht er dann immer in die gleiche Richtung.
meinst du sowas?
Code:#include "asuro.h" #include "ultrasonic.h" #include "inka.h" int main(void) { int abstand, sw, sw0, sw1, sw2; Init(); WaitforStart(); // abstand = Chirp(); while(1) { sw0=PollSwitch(); // Schalter einlesen und für eine Runde speichern sw1=PollSwitch(); sw2=PollSwitch(); if ((sw0==sw1) && (sw0==sw2)) sw=sw0; else sw=0; MotorDir(FWD,FWD); MotorSpeed(150, 150); abstand = Chirp(); StatusLED(YELLOW); if (sw==32) { StatusLED(RED); MotorDir(RWD,RWD); MotorSpeed(150, 150); Msleep(600); MotorDir(RWD,FWD); MotorSpeed(150, 150); Msleep(900); } if (sw==1) { StatusLED(RED); MotorDir(RWD,RWD); MotorSpeed(150, 150); Msleep(600); MotorDir(FWD,RWD); MotorSpeed(150, 150); Msleep(900); } else if(abstand<15) { StatusLED(RED); MotorDir(RWD,RWD); MotorSpeed(150, 150); Msleep(600); MotorDir(RWD,FWD); MotorSpeed(150, 150); Msleep(900); } else { StatusLED(GREEN); MotorDir(FWD, FWD); MotorSpeed(250, 250); } } return 0; }
gruß inka
Ja, genau das. DANKE!
Wofür braucht man "WaitForStart()"?
damit er wartet, bis er mit einem tastendruck "losgeschickt" wird und nicht sofort nach dem einschalten losrast...
ist einen ähnliche tastenabfrage wie oben, als funktion in "inka.c" und h abgelegt...
gruß inka
Gut, danke dass du einer "Programmierpflaume" wie mir etwas unter die Arme greifst. Das willkürliche Wegdrehen (rechts ODER links) bei Abstand<15 habe ich leider noch nicht m Griff...
das ist ein problem der hinderniserfassung, man hat halt nur einen sender und einen empfänger, nicht sechs taster - daher schwierig.
Und was das "unter die arme greifen" betrifft, ich bin eigentlich eine nicht wesentlich bessere "pflaume", aber du kennst sicher die story mit den blinden hünhnern"?
im forum gibt es einen "zufallsgenerator", ich glaube von M.1.R, Suche mal danach...
gruß inka
Lesezeichen