Init() vergessen? Zeige uns dein Programm, wenn du Glaskugelsprüche vermeiden willst.
aber als... (sorry;)aber wo ich ihn
Hallo Comunity,
Ich habe endlich meinen asuro aufgebaut. Beim Selbsttest ging alles reibungslos aber wo ich ihn das erste mal programmiert habe ( habe nur programmiert dass StatusLed rot leuchten soll ) war die enttäuschung groß, weil sich der linke motor gedreht hat (vorwäts).
Bitte helft mir wäre sehr dankbar!!!
Gruß Chris
Init() vergessen? Zeige uns dein Programm, wenn du Glaskugelsprüche vermeiden willst.
aber als... (sorry;)aber wo ich ihn
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Wenn der Selbsttest geht scheint's ja nicht an der Hardware zu liegen. Du müsstest uns also schon Deinen Code zeigen, damit wir Dir helfen können...
Und wie soll man dir helfen?
Wenn ich dir schreibe das der Fehler in Zeile 34 ist, wirst du es mir nicht glauben.
Wenn es mit dem Selbsttest funktioniert, dann musst du den Fehler im Code selbst suchen oder ihn hier hereinstellen.
Das ist ein neues programm:
sry hab ich vergessen...Code:#include "asuro.h" int main(void) { unsigned char tasterzustand; Init(); tasterzustand=PollSwitch(); while (1) StatusLED(RED); sleep(255); BackLED(ON,ON); Sleep(255); FrontLED(ON); sleep(255); return 0; if (tasterzustand > 7) // Hier macht er es nur wenn Taster K1 bis K3 gedrückt werden und zwar in beliebiger Kombination, d.h. auch alle zusammen. (Siehe Tabelle in deinem letzten Thread. einfach addieren) { MotorDir(RWD,BREAK); MotorSpeed(120,0); } else if (tasterzustand > 0 && tasterzustand <= 7) // analog zu oben nur hier K4 bis K6 { MotorDir(BREAK,RWD); MotorSpeed(0,120); } else // Hier ist keiner gedrückt (tasterzustand == 0) { MotorDir(RWD,RWD); MotorSpeed(120,120); { } return 0; }
Edit: Ich habs rübergeflasht und da hat er noch das selbe gemacht wie vorher.
Die while schleife funktioniert nicht denke ich. Jedenfall fehlt dort einer "{" klammern. Wie du das compiliert gekriegen hat ohne warnung ist mich einer rädsel.
Die erste "return 0;" gehört dort im mitten auch nicht. Die "return 0;" am ende deines program reichtst.
Klar geht sowas! Er führt dann in einer unendlichen Schleife den nächsten Befehl nach while aus. "while(1) 1+1;" ist z.B. auch gültig, aber sinnlos.Die while schleife funktioniert nicht denke ich. Jedenfall fehlt dort einer "{" klammern. Wie du das compiliert gekriegen hat ohne warnung ist mich einer rädsel.
Stimmt, aber in seinem Fall kommt er da eh erst garnicht hin.Die erste "return 0;" gehört dort im mitten auch nicht. Die "return 0;" am ende deines program reichtst.
Du hast recht. Es wurde immer beim
stecken bleiben. Das obene gepostete program kan aber nicht richtig compiliert sein weil es nicht das gleichen anzahl von "{" und "}" klammern hat. Und irgendwie muss sein Asuro an die Motorspeed befehl ran gekommen sein. Sonnst geht das linken rad nicht forwärts. Oder NXTman hat seiner Linkern Rad beöbachtung gemacht auf basis einer altere version seines Program. (vieleicht ohne das zu wissen)Code:while (1) StatusLED(RED);
Hi NXTman,
wie meine Vorredner schon sagten, der Kode stimmt so nicht.
Hab deinen Kode überarbeitet, syntaktisch und indent, aber nicht die Funktion an sich. Habe drei Stellen auskommentiert, da das semantich/syntaktisch falsch war.
Gruss,Code:#include "asuro.h" int main(void) { uint8_t tasterzustand; Init(); tasterzustand = PollSwitch(); while (1) { StatusLED(RED); sleep(255); BackLED(ON,ON); Sleep(255); FrontLED(ON); sleep(255); //return 0; // OM> das darf hier nicht stehen!! if (tasterzustand > 7) { // Hier macht er es nur wenn Taster K1 bis K3 gedrückt werden und // zwar in beliebiger Kombination, d.h. auch alle zusammen. (Siehe // Tabelle in deinem letzten Thread. einfach addieren) MotorDir(RWD,BREAK); MotorSpeed(120,0); } else if (tasterzustand > 0 && tasterzustand <= 7) { // analog zu oben nur hier K4 bis K6 MotorDir(BREAK,RWD); MotorSpeed(0,120); } else { // Hier ist keiner gedrückt (tasterzustand == 0) MotorDir(RWD,RWD); MotorSpeed(120,120); // { // OM> das darf hier nicht stehen! } }//while(1)... // OM> das hat gefehlt return 0; }
O.
Hab den selbsttest nochmal draufgeladen und da ist mir aufgefallen dass sich der linke Motor auch immer vorwärts drehen will aber wennich ihn ne sekunde festhalt(das Rad)bleibt er stehen. Woran könnte das liegen vlt ein falscher wiederstand?
Ich bin froh über die vielen antworten aber es hat mir bis jetzt leider noch nichts gebracht.
Gruß Chris
Lesezeichen