- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Probleme mit Turn - unendliches Drehen ?!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Beiträge
    20

    Probleme mit Turn - unendliches Drehen ?!

    Hallo, ich habe hier ein Programm mit dem AVR Studio geschrieben. Es macht aus das ,was ich will. Es fährt solange, bis er auf eine schwarze Stelle trifft, dann leuchtet kurz die Status LED rot, anschließend gelb und bleibt dort die ganze Zeit stehen. Nun möchte ich, dass der Asuro sich um 90° dreht,was aber nicht funktioniert, denn er dreht sich unendlich .


    Code:
    #include "asuro.h"
    
    int main(void)
    {
    unsigned int data[2]; //Speicher bereit stellen
    int zeit=0;
    Init();               
    FrontLED(ON); 
    LineData(data);
      
    MotorDir(FWD,FWD);        // Vorwärts fahren lassen,
    MotorSpeed(110,100);      //mit dieser Geschwindigkeit 
    
    
    
    while(1) {
    LineData(data);
    if(data[0]<50 || data[1]<50){StatusLED(RED);for(zeit=0;zeit<200;zeit++){Sleep(220);}
    }
    if(zeit==200){
    StatusLED(YELLOW);
    MotorDir(BREAK,BREAK);MotorSpeed(0,0);for(zeit=0;zeit<200;zeit++){Sleep(120);}
    
    
    }
    
    Turn(90,120);Sleep(200);
    }
    
    
    
    
    
    return 0;
    
    
    }
    Was mache ich falsch? Könnt ihr mir helfen?

    Dann hätte ich noch eine Frage : warum funktioniert es nicht ,wenn ich
    Code:
    if(zeit==200){
    StatusLED(YELLOW);
    MotorDir(BREAK,BREAK);MotorSpeed(0,0);for(zeit=0;zeit<200;zeit++){Sleep(120);}
    }
    außerhalb der while(1){} Schleife schreibe ? Denn daran könnte es liegen, dass Turn nicht richtig funktioniert..


    ThX schonmal für eure Hilfe

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    (1) vor turn() musst du Encoder_Init(); aufrufen
    (2) wenn du den code von oben rausnimmst, hast du in der while schleife nichts was deienen asuro zum stoppen veranlassen könnt

    mfg EDH

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Beiträge
    20
    OmG bin ich plöd !
    //EDIT2

    Ja daran lag es....schöndankeee EDH !
    Wie bekomme ich s nun hin,dass er bis zum Ende der schwarzen Fläche fährt und dann anhält ?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    probier mal aus, ob das hier geht

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	int data[2];
    	Init();
    	Encoder_Init();
    	FrontLED(ON);
    	while(1) {
    		StatusLED(GREEN);
    		MotorDir(FWD,FWD);
    		MotorSpeed(150,150);
    		LineData(data);
    		while(data[0]>50 && data[1]>50) {
    			LineData(data);
    		}
    		StatusLED(YELLOW);
    		LineData(data);
    		while(data[0]<100 && data[1]<100) {
    			LineData(data);
    		}
    		StatusLED(RED);
    		Turn(90,130);
    	}
    	return 0;
    }

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Beiträge
    20
    Danke für deine Mühe, aber es funktioniert nicht. So wendet er direkt die Turn Funktion an, egal ob weiße oder schwarze Fläche, ohne erst einmal nach vorne zu fahren ...

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    ich den code aus dem posting oben jetzt so verändert, das es eigentlich gehen müsst
    ACHTUNG: es kann sein, das du die helligkeitswerte für den liniensensor bei dir noch einwenig anpassen musst.

    mfg EDH

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Beiträge
    20
    Hallo ! Danke nochmal EDH, aber er macht nicht,dass was ich will... egal muss ich wohl selber hinkriegen , kannst du mir erklären, was das hier zu bedeuten hat


    while(data[0]<50 && data[1]<50) {
    LineData(data);
    }


    Was führen denn diese von dir angewandten Schleifen aus? Was davor oder dahinte steht ?

    Eine Frage noch: Das Programm soll später in eine Funktion geschrieben werden. Dann will ich nur einmal aufrufen ... also das er nur einmal die schwarze Linie findet ,sich dreht, dann weiterfährt und anhält. Anschließend soll dieses Programm für beendet erklärt werden, somit mit der nächsten Funktion ,damit einem anderen Prozess weitermachen. Geht das? ich habe bedenken, weil da ja diese while(1) Schleife ist.

    danke schonmal

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    tja äh bei mir hat das programm funktioniert...


    (1) durcvh die schleife fragt er solange die liniensensoren ab, bis er irgenbdwann auf einen schwarze linie trifft

    (2) nehm einfach dei while schleife raus, dann wird das ganze nur einaml ausgeführt

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Beiträge
    20
    Wenn ich die While(1) Schleife rausnehme, dann fährt er nur noch geradeaus und hält bei einer schwarzen Fläche überhaupt nicht an.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    ich hab mich da wohl ein wenig missverständlich ausgedrückt. nicht die komplette while schleife
    ddu löschts aus dem code nur while(1) , und die zwei kklammern, so dass dann der code ind der schleife noch da stheht , aber es keine while schleife mehr ist

    mfg EDH

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress