Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro fährt nicht nach Programm
Der Asuro soll fahren und wenn er wo gegen stößt aufhören zu fahren. Es leuchtet aber nur die Status led grün was mach ich falsch?
#include "asuro.h"
int main(void)
{
while(1)
{
if(PollSwitch()<6){
MotorDir(FWD,FWD);
MotorSpeed(150,150);
StatusLED(GREEN);
}else{
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
StatusLED(RED);
}
}
while(1)
return 0;
}
Ich bin zwar selbst neu auf dem Gebiet aber ich werde mal mitreden :) und versuchen dir zu helfen..
Als erstes fehlt über dem while(1) folgendes: Init(); (dient zur initialisierung des microkontrollers.. ohne dem befehl weiß der kontroller gar nicht was er machen soll!)
Zweitens würde ich die while-Schleife ganz unten raushauen da diese sinnlos ist und überhaupt nichts macht..
Kurz gefasst, versuchs mal hiermit:
#include "asuro.h"
int main(void){
Init();
while(1){
if(PollSwitch()<6){
MotorDir(FWD,FWD);
MotorSpeed(150,150);
StatusLED(GREEN);
}
else{
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
StatusLED(RED);
}
}
return 0;
}
Das ganze müsste so eigentlich funktionieren :)
MfG. mtzE
Sternthaler
03.05.2010, 22:23
Hallo zusammen,
ihr habt beide Recht und ein bisschen Unrecht.
Das Init() ist auf alle Fälle lebenswichtig für den Asuro.
Allerdings sollte das while(1) vor dem letzten return 0 schon drin bleiben.
Nur muss dann noch ein ; dahinter geschrieben werden, damit es das tut was es da soll.
Es ist nur ein 'Not-Stop' für das Programm für den Fall, dass der eigentlich laufende Teil mal aus der Schleife 'entwischt'. Dann kommt das Program nämlich NICHT zum return. Denn wohin soll es zurückspringen? Niemand weiss was so ein Controler dann machen wird. (Nur dummes Zeug wird das sein ;-))
Ich würde es somit so schreiben: (Das geht am besten mit [ code] vor dem Code und [ /code ] hinter dem Code. Aber die Leerzeichen in der Klammer weglassen.)
#include "asuro.h"
int main(void)
{
Init ();
while (1)
{
if (PollSwitch () < 6)
{
MotorDir (FWD, FWD);
MotorSpeed (150, 150);
StatusLED (GREEN);
}
else
{
MotorDir (BREAK, BREAK);
MotorSpeed (0, 0);
StatusLED (RED);
}
}
while (1);
return 0;
}
Und nun zur Funktion.
Ich tippe darauf, dass das Init() von mtzE schon alles gerichtet hat.
Wenn aber noch nichts läuft:
Die Status-LED wird ja vom Programm auf grün gesetzt und der Asuro sollte mit MotorSpeed(150,150); fahren.
Hier kann man als erstes mal die 150 auf 200 erhöhen. Mein Asuro fährt bei 150 auch nicht an. Manch anderer Asuro aber schon unter 150.
Und das PollSwitch () < 6 schränkt natürlich die Taster ein die zum Stop führen. Taster 1, 2, 3 (sollten ja) als Wert 1, 2, 4 liefern. Erst Taster 4 würde einen Wert von 8 liefern und damit zum Stop-Teil im Programm führen. (Taster von vorne von links nach rechts gezählt. Könnte auch anderes rum sein ;-))
Viel Erfolg
Gruß Sternthaler
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.