-         

Ergebnis 1 bis 10 von 10

Thema: Hilfe bei Programm

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    18

    Hilfe bei Programm

    Anzeige

    Ich hab ein Linienfolgeprogramm geschrieben, aber gewisse Probleme damit er merkt zwar, dass er rechts oder links von der Linie abkommt (dass merk ich weil er die LEDs ändert), aber er ändert die Umdrehungen von den Motoren nicht und dann dreht er sich die ganze Zeit im Kreis.
    Code:
    #include "asuro.h"
    #include <stdlib.h>
    #include <stdio.h>
    
    #define OFF_LEFT  -1
    #define ON_LINE   0
    #define OFF_RIGHT +1
    #define VARIA  400 
    #define SPEED 254
    #define SLOWSPEED 220
    
    unsigned int data[2];
    int Offset;
    int left,right;
    
    void Left (void)
    {
      left  -= 1;  
      if (left < SLOWSPEED) left = SLOWSPEED;
    }
    
    void Right (void)
    {
      right  -= 1;
      if (right < SLOWSPEED) right = SLOWSPEED;
    }
    
    
    int main(void)
    {
    	int inlines;
    	int j=0;
    	int position;
    	Init();
    	FrontLED(ON);   
    	StatusLED(GREEN);
    	LineData(data);
    	Offset = data[0] - data[1];
    	left = right =SPEED;
    	MotorDir(FWD,FWD);
    	MotorSpeed(0,0);
      while(1){
        LineData(data);
        inlines = (data[0] - data[1]) - Offset;
    	if (inlines > 4)
        {
          StatusLED(GREEN);
          Left();
          BackLED(OFF,ON);
          position=0;
        }
    	else if (inlines < -4)
        {
          StatusLED(GREEN);
          Right();
          BackLED(ON,OFF);
          position=1;
        }
    	else {
         StatusLED(RED);
         left = right =SPEED;
         BackLED(OFF,OFF);
         position=3;
    }
    if(position=0){MotorSpeed(left,SPEED);}
    else if(position=1){MotorSpeed(SPEED,right);}
    else{ MotorSpeed(SPEED,SPEED);}
      }
      return 0;
    }

    Hoffentlich könnt ihr mir helfen.
    [/code]

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    18
    Ich war schon mal so weit, dass es funktioniert hat, aber dann hab ich was verändert und seitdem geht nichts mehr

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Das ganze läuft viel zu schnell ab.
    Du erhöhst die Geschwindigkeit so schnell, da können die trägen Motoren niemals folgen. Bau da also mal eine kräftige Verzögerung ein(ein paar ms pro Schleifendurchlauf).
    Ein weiteres Problem ist, dass du beide Motoren hochdrehen lässt und dann wenn sie sich sehr schnell drehen auf einmal wieder zurückschaltest.
    Lass die Motoren lieber mit gemütlichen 120 laufen. Und dann ändere entweder beide Motorgeschwindigkeiten gegengleich, oder einfacher, nur einen Motor. Also z.B. links immer 120, rechts variabel aber eben auch um die 120 pendelnd.
    Grüße,
    Harri

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    18
    danke, ich werd mal eine Dummyschleife einbauen und die Motoren langsamer fahren lassen

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Naja, Dummy Schleifen brauchst du zum Zeitverzögern nicht, dafür kannst du eh auf die Sleep Funktion zurückgreifen.
    Grüße,
    Harri

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    23.08.2007
    Beiträge
    61
    benutz keine dummyschleifen, sondern die Funktion Sleep aus der asuro.h

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    18
    ich hab den fehler gefunden

    beim abändern dürfte ich bei den ifs immer ein = zuviel gelöscht haben und deswegen ging es vorher und jetzt nicht

    ich hab position am anfang bei if(position=0) immer auf 0 gesetzt und bin in die Anweisung des ifs reingegangen

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    18
    ich stell mal das fertige programm rein

    bei mir funktioniert es auf meiner selbstgebauten strecke mit einer Linienbreite von ca. 1,5 cm

    Code:
    #include "asuro.h"
    #include <stdlib.h>
    #include <stdio.h>
    
    #define OFF_LEFT  -1
    #define ON_LINE   0
    #define OFF_RIGHT +1 
    #define SPEED 170
    
    unsigned int data[2];
    int Offset;
    int SLOWSPEED=SPEED;
    
    int main(void)
    {
    	int inlines;
    	int i=0;
    	int j=0;
    	int position;
    	Init();
    	FrontLED(ON);   
    	StatusLED(GREEN);
    	LineData(data);
    	Offset = data[0] - data[1];
    	MotorDir(FWD,FWD);
    	MotorSpeed(SPEED,SPEED);
      while(1){
        LineData(data);
        inlines = (data[0] - data[1]) - Offset;
    	if (inlines > 4)
        {
          StatusLED(GREEN);
          BackLED(OFF,ON);
          position=0;
        }
    	else if (inlines < -4)
        {
          StatusLED(GREEN);
          BackLED(ON,OFF);
          position=1;
        }
    	else {
         StatusLED(RED);
         BackLED(OFF,OFF);
         position=3;
    }
    if(position==0){MotorSpeed(SLOWSPEED-84,SPEED);}
    else if(position==1){MotorSpeed(SLOWSPEED+84,SPEED);}
    else{ MotorSpeed(SPEED,SPEED);}
      }
      return 0;
    }
    Wenn ihr Verbesserungsvorschläge habt wäre ich euch sehr dankbar wenn ihr sie reinpostet. (Dann verbessert sich meine Note in Prozessregelung)

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Du könntest vielleicht deinen Nickname von ". . . . ." in "?????" ändern.
    *grübel*

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Ich würde an deiner Stelle den Look des Programms überarbeiten, es ist quasi nicht zu sehen welche Klammer zu welchem Block gehört. Bei einem guten Programm sieht man sowas auf den ersten Blick.
    Also einrücken und einheitliche Klammersetzung!

    Sowas wirkt sich normalerweise sehr positiv auf Noten aus, ohne dass man viel tun muss
    Grüße,
    Harri

Berechtigungen

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