Muss ich für delay.h ihrgend eine Dati runterladen oder einfach nur einfugen: #include "delay.h" und dann wo ichs brauch
"void _delay_ms(double ms)"
Muss ich für delay.h ihrgend eine Dati runterladen oder einfach nur einfugen: #include "delay.h" und dann wo ichs brauch
"void _delay_ms(double ms)"
Das solle eigentlich auch ohne etwas herunterzuladen mit dem Befehl: #include <avr/delay.h> gehen,
aber probiere es doch einfach aus und schau, ob der Compiler
eine Fehlermeldung ausspuckt!
Das kannst du dir übrigens auch noch durchlesen:
http://www.rn-wissen.de/index.php/Warteschleife
Da geht es um Warteschleifen und wann sie vom Compiler wegoptimiert wird.
Ganz unten steht auch etwas über die delay.h
mfg masasibe
So ich hab mal des mit der delay.h und so probiert und der Compiler hat mir dann ein Error rausgegeben:
Programm:
#include "asuro.h"
#include <avr/delay.h>
int main(void){
Init();
while(1)
MotorSpeed(112,100);
MotorDir(FWD,FWD);
StatusLED(GREEN);
while (PollSwitch()==0){
_delay_ms(200);
MotorSpeed(112,0);
MotorDir(FWD,FWD);
StatusLED(YELLOW);
FrontLED(ON);
if (PollSwitch()>0){
_delay_ms(200);
MotorDir(RWD,RWD);
MotorSpeed(112,100);
StatusLED(RED);
BackLED(ON,ON);
FrontLED(ON);}
else
_delay_ms(200);
MotorDir(FWD,FWD);
MotorSpeed(112,0);
StatusLED(YELLOW);
FrontLED(ON);}
}
/edit: ok habs problem gelöst.
Könnte jeman trotzdem noch drüber schauen
/edit: mhmm er macht nur das was in dem Ersten befehl steht
Geändert von NicMaxFen (07.02.2012 um 19:25 Uhr)
Probier mal #include <util/delay.h> dann wirds was. Btw. benutz mal die Code-Tags.
Außerdem fehlen noch geschweifte Klammern bei den if/else-Blöcken.
Dann solltest du, wenn du es ernst meinst, dir die Tutorials anschauen.Bin in dem Ganzen noch unerfahren!
Grüße,
Daniel
So ich hab jetzt noch mal ein einfaches Geschrieben. aber er fängt immer schon im Glauen Bereic an:
#include "asuro.h"
int main(void){
Init();
MotorSpeed(112,100);
MotorDir(FWD,FWD);
StatusLED(GREEN);
if (PollSwitch()>0){
MotorSpeed(112,100);
MotorDir(RWD,FWD);
BackLED(ON,ON);
FrontLED(ON);
StatusLED(RED);}
else {
MotorSpeed(100,0);
MotorDir(RWD,BREAK);
StatusLED(YELLOW);}
Sleep (255);
if (PollSwitch()>0){
MotorSpeed(112,100);
MotorDir(RWD,RWD);
StatusLED(RED);
BackLED(ON,ON);}
}
Nein, er fangt dort nicht an... das ist das Letzte was er macht. Jedenfalls, was du beobachten kann. Danach wartet er 255/72000 von einer Sekunde. Weil er vermutlich nicht gleich irgendwo anstoßt wird er die letzte Befehlen auch nicht machen. Was danach passiert ist unbekannt. Weil das Programm zu ende ist, aber die Mikrocontroller wird immer weiter seine Gehirn weiter durcharbeiten, eben wann das keine Code ist. Du sollst wirklich am ende eine Endlos-schleife einbauen, damit er keine Unsinn macht. Aber die Richtige Lösung ist das deine Code in ein Endlos-schleife gebunden ist. Weil er nun nur 2 mal die PollSwitch Test macht. Er soll das jedes Mal machen.
Geändert von Valen (07.02.2012 um 20:54 Uhr)
ok danke wie/wo soll ich dan teoretisch den Sleep einbauen damit der alles macht?
Lesezeichen