Also ich bin neu hier und wollte mal fragen wie ich den asuro programmieren muss damit er bei einer kolision stehen bleibt.... (also wenn man auf einen taster drückt...)
ich habe schon ein programm geschrieben aber das funktioniert nicht...
Also ich bin neu hier und wollte mal fragen wie ich den asuro programmieren muss damit er bei einer kolision stehen bleibt.... (also wenn man auf einen taster drückt...)
ich habe schon ein programm geschrieben aber das funktioniert nicht...
hallo Matze 3
eigentlich genügt eine if-abfrage zur feststellung, ob ein taster gedrückt ist
jedoch sollte man bei PollSwitch beachten, dass sie gerade bei laufendem motor manchmal einen falschen wert liefert
hier ein vorschlag, wie es funktionieren müsste:
Code:#include "asuro.h" int main(void) { Init(); unsigned char sw; while(1) { sw = PollSwitch(); if(PollSwitch() == sw) //Sicherheitsabfrage, um falsche Werte zu vermeiden MotorDir(BREAK,BREAK); } }
noch ein kleiner tipp: mit dem code-button kannst du hier deine programme schön posten
mfg hai1991
P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten
Das geht auch nicht....
kast hier mal jemand ein funktionierendes programm posten??
Hallo
Beispiele für Kollisionsprogramme findet man z.B. wenn man in der Suchfunktion des Forums nach "motorspeed AND pollswitch" sucht. Allerdings sollte man sich dabei darüber im Klaren sein, dass der asuro dann immer ungebremst gegen das Hinderniss knallt!
Dein Programm könnte man z.B. so ändern:
...dann hat die mehrfacheTastenabfrage auch einen Sinn. Ich habe das allerdings so nicht getestet. Vermutlich wird es auch nicht wie erwartet funktionieren weil die wenigsten asuros auf Anhieb die richtigen Werte liefern ("asuro AND tasten AND kalibrieren"). Zusätzliche Hinweise findet man auch im asurowiki. Der Artikel über die Tastenkalibrierung behandelt zwar die Anwendung bei der aktuellen Library, aber der Sachverhalt ist gleich. Die Formel dazu steht in asuro.c am Ende von PollSwitch().Code:#include "asuro.h" int main(void) { Init(); unsigned char sw1, sw2, sw3; while(1) { sw1 = PollSwitch(); sw2 = PollSwitch(); sw3 = PollSwitch(); if (sw1 == sw2 == sw3 == 0x01) MotorSpeed(150, 0); if (sw1 == sw2 == sw3 == 0x02) MotorSpeed(200, 0); if (sw1 == sw2 == sw3 == 0x04) MotorSpeed(250, 0); if (sw1 == sw2 == sw3 == 0x08) MotorSpeed(0, 150); if (sw1 == sw2 == sw3 == 0x10) MotorSpeed(0, 200); if (sw1 == sw2 == sw3 == 0x20) MotorSpeed(0, 250); } }
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
kann mir vieleicht jemand hier ein programm posten mit dem ich asuro über infra rot fernsteuern kann??
also das ich den mit den tasten w, a, s, d steuern kann???
weil die tasten funktionieren jetzt...
hallo
ich will nicht meckern, aber dieses forum ist eigentlich dazu da, um bei problemen zu helfen, nicht um sich fertige programme schreiben zu lassen.
versuch es lieber zu erst selbst, poste dein programm fals es nicht klappt und dir wird sicher geholfen. zu dem lernt du selber viel mehr
als alternative kannst du aber auch die formussuche benutzen. da gibts sicher schon einige beiträge mit fertigen programmen
mfg hai1991
P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten
ja also ich hab schon mal so ein programm geschrieben....nur des ging nicht.... also der asuro hat garnichts gemacht...
ich hab des nach der anleitung von der asuro cd geschrieben...
könntest du das vl posten?
ansonsten hier eine idee wie es vl. funktionieren könnte:
den code zu meinem (hoffentlich richtigen) muster kannst du dir erstmal selber überlegen. bei problemen kannst du natürlich fragenCode:int main() { while(1) { Zeichen lesen mit switch dem entsprechend handln (motordir und -speed) vl kurze pause } while(1);
PS: ich weiß zwar nicht wie viel erfahrung du mit C und robotik hast, aber ich würde dir raten, erst mit linienfolgen, "figuren fahren" oder andere "leichte aufgaben" an zu fangen.
außer du willst unbedingt über hyperterminal steuern
wie schon erwähnt, wenn du fragen hast melde dich
also ich hab eigentlich nicht sehr viel erfahrung mit c....
des programm hab ich nicht mehr....
aber des ging ungefäh so..:
SerRead(ir,1,0);
if (ir == w){
MotorDir(FWD,FWD);
MotorSpeed(100, 100);
}
if (ir == s){
MotorDir(RWD,RWD);
MotorSpeed(100,100)
}
...
...
...
ich glaube eigenlich dass die ir steuerung eifach ist...
so, der erste fehler den ich sehe:
wenn nach einem einzellnen buchstaben abfragen willst, musst du ihn unter einfache anführungszeichen ' setzen. zb so:
if (ir == 'w')
kurz zur erklärung:
buchsaben(-ketten) werden im ASCII-code gespeichert. dh anstatt des zeichens wird in der variable eine zahl von 0 - 255 abgespeichert, je nach buchstaben und wenn du nun einen buchstaben in ' schreibst wird nach der entsprechenden zahl abgefragt.
weiters wäre noch interessant welchen typ dein ir hat.
mfg hai1991
P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten
Lesezeichen