-
+ Antworten
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 9 bis 16 von 28

Thema: [Wichtig]Was ist falsch?

  1. #9
    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 20:25 Uhr)

  2. #10
    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

  3. #11
    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);}
    }

  4. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.128
    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 21:54 Uhr)

  5. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2012
    Beiträge
    13
    ok danke wie/wo soll ich dan teoretisch den Sleep einbauen damit der alles macht?

  6. #14
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Nee eine Endlosschleife. Ein Sleep ist nicht endlos.

    Code:
    while ( 1 ) {
    
    DEIN CODE 
    
    }
    Grüße,
    Daniel

  7. #15
    Erfahrener Benutzer Fleißiges Mitglied Avatar von masasibe
    Registriert seit
    21.01.2011
    Beiträge
    181
    wie/wo soll ich dan teoretisch den Sleep einbauen damit der alles macht?
    Was soll er denn genau machen?

    Wenn dein Asuro sich immer umdrehen soll, wenn er vorne irgendwo anstößt, kannst du dein Programm so aufbauen:

    Motoren einschalten -> Überprüfen, ob Asuro angestoßen ist

    -> Wenn Asuro nicht angestoßen ist -> Wieder überprüfen (mit Endlosschleife)

    -> Wenn Asuro angestoßen ist -> Drehung ausführen (Du schaltest die Motoren so, dass er sich dreht und lässt den Asuro dann mit dem Sleep-Befehl so lange nichts tun bis er sich weit genug gedreht hat) -> Motoren auf vorwärts stellen -> wieder bei Schritt 2 mit dem Überprüfen beginnen

  8. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.128
    Zitat Zitat von NicMaxFen Beitrag anzeigen
    ok danke wie/wo soll ich dan teoretisch den Sleep einbauen damit der alles macht?
    Alles machen ist ein bisschen viel für ein Atmega8 Roboter.

    Er fäht nach vorne----> Stößt an----> Dreht sich---->Stößt wieder an----> Fährt rückwärts
    Das folgende Programm macht das. Aber, ist das wirklich genau das verfahren was du möchtest? Nun wird er meistens nur 2 mal ein Anstoss erkennen, und danach Rückwärts fahren.

    Code:
    #include "asuro.h"
    
    // "Er fäht nach vorne----> Stößt an----> Dreht sich---->Stößt wieder an----> Fährt rückwärts"
    
    int main(void){
    
    Init();
    
     
    // " Er fäht nach vorne"
     
    MotorSpeed(112,100);
    MotorDir(FWD,FWD);
    StatusLED(GREEN);
    
         
        
    if (PollSwitch()>0) {   // Stößt an----> Dreht sich
        MotorSpeed(112,100);
        MotorDir(RWD,FWD);
        BackLED(ON,ON);
        FrontLED(ON);
        StatusLED(RED);}
            
    for(i=0;i<200;i++) Sleep(72); // Wartet 200 milisekunden weil es dreht.
        
    // Keine ahnung was du mit das hier unter möchtest. Ist kein teil deine Aktion Beschreibung.
    // Das wurde er machen wan kein Anstoss erkannt wird. Ist aber auch ein art von Drehung!
        
    /* else {
        MotorSpeed(100,0);
        MotorDir(RWD,BREAK);
        StatusLED(YELLOW);} */ 
        
    // Obene else-Block ist aus-kommentiert.
        
    if (PollSwitch()>0){ // Stößt wieder an----> Fährt rückwärts
        MotorSpeed(112,100);
        MotorDir(RWD,RWD);
        StatusLED(RED);
        BackLED(ON,ON);}
            
    // Und nun für immer Rückwärts fahren????
        
    while(1); // Ich gehe in Zen-zustand, für immer! Doch fahre auch noch Rückwärts
        
    return 0; // Ende der Main-Funktion. Dieses Befehl soll niemals erreicht werden.
    }

+ Antworten
Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

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

Stichworte

Berechtigungen

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