-
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: [Wichtig]Was ist falsch?

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

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

  3. #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?

  4. #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

  5. #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

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.075
    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.
    }

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2012
    Beiträge
    13
    Ich danke ich probiere das dann mal aus und schau ml was raus kommt

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2012
    Beiträge
    13
    Der Gibt mir jetzt ein error raus vllt muss ich noch irgend was einfügen:
    Programm:
    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); 
    if (PollSwitch()>0){      
    MotorSpeed(112,100);     
    MotorDir(RWD,RWD);     
    StatusLED(RED);     
    BackLED(ON,ON);}                
    while(1);       
    return 0;  }
    Errorcode:
    Code:
    avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
    test.c: In function `main':
    test.c:13: error: `i' undeclared (first use in this function)
    test.c:13: error: (Each undeclared identifier is reported only once
    test.c:13: error: for each function it appears in.)
    test.c:22: error: parse error at end of input
    make: *** [test.o] Error 1

  9. #19
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Geh in Zeile 13 und guck was du da mit dem i machst. Tippfehler ? Sollte es nicht definiert sein ( Was ja in der Fehlerbeschreibung steht) dann definiere es vorher.

    vor

    for(i=0;i<200;i++) Sleep(72);

    int i;

    einfügen
    Grüße,
    Daniel

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2012
    Beiträge
    13
    Jetzt hab ich den Error weg und auch schon geflashed aber er fährt nur vorwärts und wenn ich denn Taster drücke machter er garnix

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ä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
  •