- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 28

Thema: [Wichtig]Was ist falsch?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von masasibe
    Registriert seit
    21.01.2011
    Beiträge
    181
    Bitte keine solche Eile!

    Du kannst das z.B. mit einer Wartefunktion der delay.h Bibliothek machen.
    Wenn der Asuro vorne angestoßen ist, setzt du die Motoren so, dass der Asuro
    die Kurve fährt und führst dann einen Wartebefehl aus. Du musst halt ausprobieren
    wieviel Zeit dein Asuro braucht um sich so weit zu drehen wie du möchtest.
    Nach dem Wartebefehl setzt du dann die Motoren wieder auf vorwärts oder rückwärts
    oder wie du das halt möchtest usw.
    Vorteil der Wartefunktion ist, dass man das sehr schnell und einfach programmieren kann.
    Der Nachteil ist aber, dass der Asuro sich´, während der Wartebefehl ausgeführt wird,
    um nichts anderes kümmern kann.


    Die andere Möglichkeit wäre die Verwendung eines Timers. Ein Timer löst immer nach einer
    gewissen Zeit eine bestimmte Routine die sogenannte Interrupt-Service Routine aus und so
    könntest du auch den Asuro eine gewisse Zeit drehen und dann wieder vorwärts fahren lassen.
    Über die genaue Verwendung eines Timers liefert dir Google die Antwort!

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2012
    Beiträge
    13
    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)"

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von masasibe
    Registriert seit
    21.01.2011
    Beiträge
    181
    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

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2012
    Beiträge
    13
    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)

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    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.

    Bin in dem Ganzen noch unerfahren!
    Dann solltest du, wenn du es ernst meinst, dir die Tutorials anschauen.
    Grüße,
    Daniel

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2012
    Beiträge
    13
    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);}
    }

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    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)

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 07.08.2008, 16:38
  2. Zeitschaltuhr ( Wichtig )
    Von Enten Züchte im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 23.06.2008, 16:44
  3. WICHTIG!! Problem mit AVR-GCC
    Von Nigthlord im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 28.10.2007, 20:36
  4. Spannungsregler wichtig!
    Von csommi im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 10.03.2006, 13:07
  5. Teamspek für RN WICHTIG!!!!!
    Von dundee12 im Forum Offtopic und Community Tratsch
    Antworten: 7
    Letzter Beitrag: 27.09.2005, 22:50

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen