Jepp, es muss natürlich == heißen! Prima erkannt! Copy&Paste defekt?
Das ä/e lenkt zu sehr vom eigentlichen Thema ab...
ich weis, dass es vielleicht pedantisch wirkt, aber es heisst vorwÄrts also Ä oder AE aber je öfter ich "vorwerts" lese und wenn es auch noch kopiert wird, fangen sich mir echt an die fußnägel zu kräuseln ..ich weis das ich auch manchmal schwer vergreife, aber nicht bös gemeint
ich würde aber auch auf die fehlenden klammern tippen, zum einrücken des codes noch ein kleiner tipp
Code:returntype_t methodename (parametertype_t parameter name) { dosth(); return value_of_returntype_t; } alternativ void methode(void) { doSth(); return; // return ohne einen parameter }
Jepp, es muss natürlich == heißen! Prima erkannt! Copy&Paste defekt?
Das ä/e lenkt zu sehr vom eigentlichen Thema ab...
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Das mit den Impulsen bei zu hoher Drehzahl. Ist das ne Vermutung oder ist das so? Man könnte doch den MotorSpeed "langsam" (innerhalb einer Sekunde oder sowas) herunterregeln, dann MotorDir umschalten und dann wieder hochregeln. Würde das was bringen? Oder ich stell allgemein den MotorSpeed runter, aber dann flitzt er nicht mehr soDas direkte Umschalten der Motordrehrichtung bei hoher MotorSpeed erzeugt möglicherweise Impulse die den asuro reseten. Oder Akkus leer/Wackler in der Spannungsversorgung (Ein/Aus-Schalter).
Also Batterien sind voll und Wackler stell ich keinen fest. Weil das Programm an sich scheint ja zu funktionieren.
Ich habe nochmals am Programm weiter gearbeitet. Nun ist Meine Frage:
Kann man Odometrie und Line gemeinsam benutzen?
Momentan will ich nur je einer der beiden Werte auslesen.Code:int lData[2], oData[2]; l1 = (lData[1]); o1 = (oData[1]);
Dies Funktioniert auch mit der Odometrie, leider reagiert der ASURO nicht auf Line.
[Edit]
Hat sich erledigt, habe es herausgefunden
Hier Ist nun mein fertiges Programm es wurde getestet und Funktioniert einwandfrei.
Szenario: Weisses Quadrat mit Schwarzem Rand. Darin befinden sich Hindernisse.
Der Asuro bleibt im Quadrat. Wenn er mit einem Gegenstand kollidiert, weicht er diesem aus. Die Tasten K1 und K6 sind definiert, restliche Ausweichaktionen sind zufällig (Odometrie und Radstellung).
Code:#include "asuro.h" //Tasten #define K6 taste==1 //Taste 6 #define K1 taste==32 //Taste 1 //Warten #define WAIT1 for (i=0; i<1000; i++) {Sleep(72);} //1 Sekunde #define WAIT2 for (i=0; i<400; i++) {Sleep(72);} //90 Grad-Kurve //Fahrten int i,o1,l1; int lData[2], oData[2]; char t1,t2,t3, taste; void vorwaerts (void) {StatusLED (GREEN); BackLED (OFF,OFF); MotorDir (FWD,FWD); MotorSpeed (124,120);} void links (void) {StatusLED (RED); BackLED (ON,OFF); MotorSpeed (0,0); WAIT1; MotorDir (RWD,RWD); MotorSpeed (124,120); WAIT1; MotorDir (FWD,RWD); WAIT2; MotorSpeed(0,0); WAIT1; } void rechts (void) {StatusLED (RED); BackLED (OFF,ON); MotorSpeed (0,0); WAIT1; MotorDir (RWD,RWD); MotorSpeed (124,120); WAIT1; MotorDir (RWD,FWD); WAIT2; MotorSpeed (0,0); WAIT1;} //Start int main(void) { Init(); while (1) { l1 = (lData[1]); o1 = (oData[1]); t1 = PollSwitch(); t2 = PollSwitch(); t3 = PollSwitch(); FrontLED(ON); LineData (lData); OdometrieData (oData); if (l1 < 50) { if (o1 > 600) {rechts();} else {links();} } else if (t1 && (t1=t2) && (t1=t3)) { taste=t1; if (K6) {rechts();} else if (K1) {links();} else { if (o1 > 600) {rechts();} else {links();} } } else {vorwaerts();} } return (0); }
hey das programm ist der hammer du hast es voll drauf im gegensatz zu mir -.-
Gruß Jonas Weber
ps. mach weiter so!!!!!
Du lehrst schnell. Nur ein par kleinigkeiten.
Diesen variablen declarationen gehoren eigentlich im main funktion. Nur wenn sie 'global' benutz werden (das heist jeder function muss zugang haben oder andern konnen) mussen sie ausen die main funktion deklariert werden. Sondern konnte man damit fehlerhafte Code produzieren wenn mehrere funktionen auch die variablen i, t1, t2, t3, taste, lData[], oData[] in ihren code anrufen. (lies mal uber "Gültigkeitsbereich" in diesem C-tutorial hier im Roboternetz: http://www.rn-wissen.de/index.php/C-Tutorial)Code:int i,o1,l1; int lData[2], oData[2]; char t1,t2,t3, taste;
Diesen vet gedruckte Zeilen wurde ich umdrehen. Erst mal die lData und oData mit Werte einstellen im LineData und OdometriData funktionen, und danach den Rechter Werten in i1 und o1 ubertragen. Am anfang des ausfuhren einer Programm kan jeder speicherplatz einer unbekante werte haben. Die sind nicht immer 0 (vieleicht schon 'immer nicht 0'), oder eine sichere wert die das program nicht absturzen lasst. Bei dem ersten eintrit der While-schleife werden diesen unsichere werten im speicherplatz im nachsten If's verglichen. Deine If's hier sind nicht kritisch, aber was wen da einer Wurzel-funtion steht der etwas von einer negatiefe werte machen mus? Das ist unmoglich! (na ja, ohne 'komplizierte' mathematikwhile (1)
{
l1 = (lData[1]);
o1 = (oData[1]);
t1 = PollSwitch();
t2 = PollSwitch();
t3 = PollSwitch();
FrontLED(ON);
LineData (lData);
OdometrieData (oData);
)
Eigentlich sind die Variabelen l1 und o1 uberflussich. Du konnte hier auch (oData[1]>600) und (lData[1]<50) hinter if's setzen.Code:if (l1 < 50) { if (o1 > 600) {rechts();} else {links();} }
hey,
ich habe dieses programm hier:
das programm kopiere ich doch in die datei test.c (im ordner first try) [oder nicht?] dann klick ich auf tools>make [errors: none] ok, dann an die seite legen das programmers notepad2 und das flashtool öffnen: text.hex aus dem ordner first try auswählem programm drücken asuro anschalten und rüber flaschen !!! ok, wenn es fertig ist alles grün !!!! dan asuro aus und wieder an machen [alles soweit richtig, oder muss ich im programmers notepad 2 auf speichern befor ich das flash-tool benutze????] wenn der asuro angeschaltet wird geht die status led sofort auf GELB, dann auf grün, und bleibt die ganze zeit grün.....Code:#include "asuro.h" int main(void) { Init(); // fein :) while(1) { if (PollSwitch()==0) { MotorDir(FWD,FWD); MotorSpeed(100,100); BackLED(ON,ON); FrontLED(ON); StatusLED(RED); } else { MotorDir(FWD,FWD); MotorSpeed(0,0); StatusLED(RED); } // Egal was PollSwitch() zurückliefert, ab hier leuchtet die StatusLED rot { MotorDir(RWD,RWD); MotorSpeed(150,150); BackLED(ON,ON); } // spätestens ab hier sind die BackLEDs an { MotorDir(BREAK,RWD); MotorSpeed(0,150); BackLED(ON,ON); FrontLED(ON); } // und nun ist auch die FrontLED sicher eingeschaltet { MotorDir(FWD,FWD), MotorSpeed(150,150); } // und der asuro sollte nun mit 150 nach vorne düsen } return 0; }
ich weiß nicht was das problem ist !!!!
hoffe, dass ihr mir helfen könnt !!!!
gruß marcel
[Edit] Einrückungen und Kommentare im Code eingefügt von radbruch
Den test.c muss gespeichert werden vordem es compiliert wird ("tools/make"). Es hat keinen sin gleich vordem du den flash programme braucht. Weil die test.hex nicht geandert wird dadurch.
Das den Statusled nur gelb und grun leuchtet sagt mir das den geflashten test.hex von den ungeanderten firsttry programme ist. Deinem program macht den statusled im jedenfall rot. (rot bei irgend einer taster geprellt, oder rot bei keiner taster geprellt) Und wird danach niemahls auf eine andere farbe eingestellt. Kuck mal (im Windows Explorer venster, oder datei eigenschaffen) ob dem 'gespeichert auf" oder "geandert auf" zeiten gleich sind an das moment wen du es zu letzten compiliert hat.
Nur einer weitere anweisung fur dein program. Du verwendest keinen wartezeiten in deinem program. Die MotorDir, MotorSpeed und Backled, Frontled funktionen enden sehr schnell. Dadurch wird deinem asuro in einer fraktion einer sekunde wieder umschalten im ruckwartsgang oder stehenbleiben. Aber den radern haben dan nocht kaum gedreht, oder gar nichts.
Auch wurde ich selbst die backleds nur anschalten wenn den motoren gebremst werden (MotorSpeed auf 0, oder MotorDir auf Break ). Damit kannst du sehen was Asuro versucht zu machen. Dein program lasst sie leuchten an jedem stelle. Wenn irgend etwas fehlt mit den MotorDir oder MotorSpeed funktionen kannst du nicht merken an welcher stelle er is in das program.
naja, ich verstehe nur bahnhof (kann das mal jm. auf HOCHdeutsch) erkären und nicht wie valen, diese "sprache" versteh ich net, das ist z.T deutsch z.T was weiß ich was
gruß marcel
ps. ich wäre dankbar, wnn mir mal jm. ein programm (.hex) geben könnte
Verzeihung, aber deutsch ist nicht meiner mutter sprache. Und versuche nur zu helfen. Danke.
Lesezeichen