und wie mach ich das mit den Pausen.
Noch ne frage wo her weis der ASuro wie lange er etwas machen soll, da gibs doch sicherlich ein befehl oder??
Gruß Jonas Weber
Ps. ich werde es editieren
ich revidier meine aussage, er rennt NICHT ins return ... editier bitte den text, da kann man sich nur verlesen!!! sieht ja grauenhaft aus
im prinzip musst du ncihts weiter machen, als pausen einzubauen ...
wenn der text vernünftig eingerückt ist (nach jeder geöffneten geshweiften klammer den text um ein tab nach rechts verschieben, nach jeder gerschlossenen wieder ein tab nach links) erkennst du die einzelnen abschnitte, in jedem abschnitt bestimmst du die fahrrichtung für beide motoren und die geschwindigkeit, wenn du dir jetzt immer die fahrrichtung vorstellst, erkennst was er in welchem block macht und musst nurnoch entsprechend pausen dazwischen machen ... ausserdem muss die geschlossene geschweifte klammer direkt nach dem " else " vor das "return 0;" verschoben werden
und wie mach ich das mit den Pausen.
Noch ne frage wo her weis der ASuro wie lange er etwas machen soll, da gibs doch sicherlich ein befehl oder??
Gruß Jonas Weber
Ps. ich werde es editieren
Zitat von cele93
/edit: bekomm das mit dem editieren nicht hin. hab deshalb ein scrennshot gemacht, wo es besser aussieht:
http://imagesup.de/picture.php?code=...orcnc42axfjnp4
![]()
öhm ne pause einzubauen gibt es viel möglichkeiten, leider hab cih mich zu lang mit dem asuro net beschäftigt als das ich das jetzt wüsste, ich würd mal in der anleitung schauen an deiner stelle, vielleicht kann dir da wer anders kurz aushelfen
wie gesagt, die geschweifte klammen nach dem else, nach dem StatusLED(RED) muss hinter die eingeschobenen blöcke ! damit die blöcke im else zweig ausgeführt werden und nciht permanent
edit hab ich schon gefunden plus rutsch das immer nach links. kp warum.
hinter welche blöcke das vertsh ich noch nicht so richtig.
Gruß Jonas Weber
ps. wie fehlenden wiederstände sind soeben bei mir eingetroffen. ich werde ihn dann mal voll fertig machen.
ach noch ne frage: kann man de halben tischtennisball auch mit sekundenkleber anbringen??
Den Funktion:Noch ne frage wo her weis der ASuro wie lange er etwas machen soll, da gibs doch sicherlich ein befehl oder??
Sleep(anzahl_von_72kHz_perioden);
steht auch im anleitung beschrieben unter 9.2.5. Den Anzahl von 72KHz Perioden darf leider nicht großer sein als 255. Und das ist gleich wie 3.5 milisekunden. Fur ein langere warte Zeit muß man diesen Sleep komando wiederholen in einer for-schleife. (9.1.5 in dem anleitung)
sekundenkleber eignet sich nicht, das ist ein kontaktkleber! also möglichst fläche auf fläche, da du nur kante auf fläche klebst, sollte es schon heißkleber oder so universalbkleber sein
Den Tischtennisball am platine kleben wurde ich auch nicht empfehlen. Ich habe ein 25mm lange M3 bolze an dem halbe Tischtennisball geklebt mit heizkleber und dan mit muttern in das loch hinter dem Atmega8 montiert. Das geht perfekt und ist leicht demontierbar. Aber den heizklebberei in den Tischtennisball habe ich seit einiger monate nochmahls versterken mussen mit sekundenkleber. Das wird nun sicher fest bleiben.
Ich habe nun auch ein erstes Programm geschrieben, jedoch habe ich eine Frage zur doppelten Abfrage der PollSwitch Funktion. Kann ich dies mit || ,, && oder ++ bewältigen?
Mein Problem die Störgeräusche der Asuro Motoren.
Hier noch das Programm:
Code:#include "asuro.h" //Tasten #define K6 PollSwitch()==1 //Taste 6 #define K5 PollSwitch()==2 //Taste 5 #define K4 PollSwitch()==4 //Taste 4 #define K3 PollSwitch()==8 //Taste 3 #define K2 PollSwitch()==16 //Taste 2 #define K1 PollSwitch()==32 //Taste 1 //Tasten Kombinationen #define K65 PollSwitch()==3 //Taste 6+5 #define K54 PollSwitch()==6 //Taste 5+4 #define K43 PollSwitch()==12 //Taste 4+3 #define K32 PollSwitch()==24 //Taste 3+2 #define K21 PollSwitch()==48 //Taste 2+1 #define K52 PollSwitch()==18 //Taste 5+2 #define K5432 PollSwitch()==30 //Taste 5+4+3+2 //Warten #define WAIT1 for (i=0; i<1000; i++) {Sleep(72);} //1 Sekunde #define WAIT2 for (i=0; i<400; i++) {Sleep(72);} //0.5 Sekunde //Fahrten #define VORWERTS StatusLED(GREEN); BackLED(ON,ON); MotorDir(FWD,FWD); MotorSpeed(124,120); #define LINKS StatusLED(YELLOW); BackLED(OFF,ON); MotorDir(RWD,RWD); MotorSpeed(124,120); WAIT1; MotorDir (FWD,RWD); WAIT2; MotorSpeed(0,0); WAIT1; #define RECHTS StatusLED(RED); BackLED(ON,OFF); MotorDir(RWD,RWD); MotorSpeed(124,120); WAIT1; MotorDir (RWD,FWD); WAIT2; MotorSpeed(0,0); WAIT1; int main(void) { unsigned int i; Init(); StatusLED(GREEN); BackLED(ON,ON); MotorDir(FWD,FWD); MotorSpeed(124,120); while (1) { if (K6) {RECHTS} else if (K5) {RECHTS} else if (K4) {RECHTS} else if (K3) {LINKS} else if (K2) {LINKS} else if (K1) {LINKS} else {VORWERTS} } }
Hallo
Ich hoffe du verlierst nicht den Überblick bei den vielen #defines ;)
Auf den ersten Blick scheint if (k6 && k6)... eine Lösung für die Mehrfachabfrage zu sein. Bei genauerer Betrachtung erkennt man aber, dass dies wohl eine Sackgasse ist. Durch die if..else..else-Schachtelung hat man pro Durchlauf nur eine Chance die Tasten richtig zu erkennen. Außerdem kosten die vielen PollSwitch()-Aufrufe richtig viel Zeit. Besser wäre wohl ein solcher Ansatz:
(nicht getestet!)Code:#include "asuro.h" #define k6 taste==1 #define k5 taste==2 #define k65 taste==3 char t1, t2, taste; int main(void) { Init(); MotorSpeed(150, 150); // Zum Testen asuro in der Hand halten! while(1) { t1=PollSwitch(); t2=PollSwitch(); if (t1 && (t1==t2)) // Taste gedrückt und zweimal die selbe Taste erkannt? { taste=t1; // Dann überprüfen welche Taste es ist if(k6) StatusLED(RED); else if(k5) StatusLED(YELLOW); else if(k65) StatusLED(GREEN); } else StatusLED(OFF); // Keine oder ungültige Taste } return(0); }
Den TT-Ball habe ich mit Heißkleber befestigt. Drei Tropfen auf die Schnittkante und mittig auf die Platine geklebt hält ewig und läßt sich bei Bedarf rückstandsfrei entfernen.
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!
Lesezeichen