Roboter prog. funktioniert nicht

Hallo
Ich hbae mir einen roboter selbst gebaut, die Hardware funktioniert (mehrmals getestet). Ich habeals Motor treiber schaltung einfach die von dem robot rover von robotschop.com abgekupfert. Alls abstandssensoren habe ich den GP2Y0D810ZOF (digitaler ir entfernungsmesser von sharp) genommen. Ansosten habe ich noch den Arduino Uno in verwendung. Die aufgabe von dem Programme ist: durch die Gegend zu fahren ohne anzustoßen. Doch es funktioniert einfach nicht! Ich habe alles mögliche ausprobiert aber es wiel nicht. Kann mir vielleicht jemand helfen?
Der MotorSpeed gibt an wie schnel der Motor sich drehen soll. Wenn MotorControll LOW ist dreht sich der Motor vorwährts, bei HIGH ist das gegenteil.

Dies ist eine vereinfachte Version von dem fertigen Programm:

Der Roboter fehrt und fert einfach und reagiert nicht. Die LED leute die ganze zeit.

  int MotorSpeedL = 5;
  int MotorSpeedR = 6;
  int MotorControlL = 7;
  int MotorControlR = 4;
  
  volatile boolean Gegenstand_links;
  volatile boolean Gegenstand_rechts;
  
  int led = 13;
  volatile int state = LOW;

void setup()
{
  pinMode(led, OUTPUT);
  attachInterrupt(0, setze_status_Gegenstand_links, FALLING);
  attachInterrupt(1, setze_status_Gegenstand_rechts, FALLING);
  Gegenstand_links  = false;
  Gegenstand_rechts = false;
}

void loop()
{

  if(Gegenstand_rechts == true);{
      digitalWrite (MotorControlL, LOW);
      digitalWrite (MotorControlR, LOW);
      digitalWrite (MotorSpeedL, 200);
      digitalWrite (MotorSpeedR, 200);
      delay(600);
      digitalWrite (MotorSpeedL, 0);
      digitalWrite (MotorSpeedR, 0);
      Gegenstand_rechts = false;
      Gegenstand_links = false;
      digitalWrite(led, LOW);
  }
   if(Gegenstand_links == true);{
      digitalWrite (MotorControlL, LOW);
      digitalWrite (MotorControlR, LOW);
      digitalWrite (MotorSpeedL, 200);
      digitalWrite (MotorSpeedR, 200);
      delay(600);
      digitalWrite (MotorSpeedL, 0);
      digitalWrite (MotorSpeedR, 0);
      Gegenstand_rechts = false;
      Gegenstand_links = false;
      digitalWrite(led, LOW);
  }
}

 void setze_status_Gegenstand_links(){
    digitalWrite(led, HIGH);
     Gegenstand_links = true;
  }
 
  void setze_status_Gegenstand_rechts(){
    digitalWrite(led, HIGH);
    Gegenstand_rechts = true;
  }

Dies ist das eig. fertige Programm:
Der Roboter fährt immer gerade aus und reagiert nicht.

  int led = 13;  
  int MotorSpeedL = 5;  
  int MotorSpeedR = 6;  
  int MotorControlL = 7;  
  int MotorControlR = 4;
  
  int sensorLinks = 3;
  int sensorRinks = 2;
  
  volatile boolean Gegenstand_links;
  volatile boolean Gegenstand_rechts;  
  
  void setup(){
    pinMode (MotorSpeedL, OUTPUT);
    pinMode (MotorSpeedR, OUTPUT);
    pinMode (MotorControlL, OUTPUT);
    pinMode (MotorControlR, OUTPUT);
    attachInterrupt(0,setze_status_Gegenstand_rechts, CHANGE);
    attachInterrupt(1,setze_status_Gegenstand_links, CHANGE);
    Gegenstand_links  = false;
    Gegenstand_rechts = false;
  }
  
  
  void loop(){    
    vorwaerts_fahren(100, 255);    
      if(Gegenstand_links == true){
        zurueck_fahren(300, 200);
        rechts_schwenk(2500, 200);
        Gegenstand_links = false;
        digitalWrite(led, LOW);
      }
      if(Gegenstand_rechts == true){
        zurueck_fahren(300, 200);
        links_schwenk(2500, 200);
        Gegenstand_rechts = false;        
        digitalWrite(led, LOW);
      }
  }
  
   int zurueck_fahren(int dauer, int geschwindigkeit)
  {
      digitalWrite (MotorControlL, HIGH);
      digitalWrite (MotorControlR, HIGH);
      digitalWrite (MotorSpeedL, geschwindigkeit);
      digitalWrite (MotorSpeedR, geschwindigkeit);
      delay(dauer);
      digitalWrite (MotorSpeedL, 0);
      digitalWrite (MotorSpeedR, 0);
      return 0;
  }
  
  int vorwaerts_fahren(int dauer, int geschwindigkeit)
  {
      digitalWrite (MotorControlL, LOW);
      digitalWrite (MotorControlR, LOW);
      digitalWrite (MotorSpeedL, geschwindigkeit);
      digitalWrite (MotorSpeedR, geschwindigkeit);
      delay(dauer);
      digitalWrite (MotorSpeedL, 0);
      digitalWrite (MotorSpeedR, 0);
      return 0;
  }

 int rechts_schwenk(int dauer, int geschwindigkeit)
  {
      digitalWrite (MotorControlL, HIGH);
      digitalWrite (MotorControlR, LOW);
      digitalWrite (MotorSpeedL, geschwindigkeit);
      digitalWrite (MotorSpeedR, geschwindigkeit);
      delay(dauer);
      digitalWrite (MotorSpeedL, 0);
      digitalWrite (MotorSpeedR, 0);
      return 0;
  }
  
  int links_schwenk(int dauer, int geschwindigkeit)
  {
      digitalWrite (MotorControlL, LOW);
      digitalWrite (MotorControlR, HIGH);
      digitalWrite (MotorSpeedL, geschwindigkeit);
      digitalWrite (MotorSpeedR, geschwindigkeit);
      delay(dauer);
      digitalWrite (MotorSpeedL, 0);
      digitalWrite (MotorSpeedR, 0);
      return 0;
  }
  
  void setze_status_Gegenstand_links(){
    digitalWrite(led, HIGH);
    //Gegenstand_links = true;
  }
 
  void setze_status_Gegenstand_rechts(){
    digitalWrite(led, HIGH);
    //Gegenstand_rechts = true;
  }

Hoffe jemand hat eine Idee was das Problemm sein könnte. Freue und bedanke mich jetzt schon für und auf die Antworten LG Seykool

Außer, daß es nicht schlecht wäre, wenn Du ein paar Worte verlieren würdest, wie Dein Robotter aussieht und wie Du ihn ansteuerst:
Ich nehme mal an er hat 2 Motore und wird über 2 H-Brücken angesteuert.

Das erste Sketch, richtig geschrieben, kann eigentlich gar nicht funktionieren, da sich die Motore nur drehen, wenn ein Sensor ein Hindernis erfaßt. Aber Du hast einen Fehler gemacht:

if(Gegenstand_rechts == true);{
      ...
  }

Da darf kein Strichpunkt nach dem if sein, da dieser die if-Bedingung beendet. Alle Funktionen in den geschwungenen Klammern werden ausgeführt, da sie nicht an die if-Bedingung geknüpft sind.

Ich würde auf keinen Fall die Sensoren durch Interruptaufrufe abfragen, sonder einfach in der if Bedingung (ich glaube zu verstehen daß der Sensor LOW gibt wenn er einen Gegenstand erfaßt):

if(sensorLinks == LOW){
      ...
  }

Zum 2. Sketch:
In den Interruptroutinen setzt Du ja keine Variable, die Du dann, kontrollierst um eine Kurve zu fahren darum fährt der Roboter geradeaus.

void setze_status_Gegenstand_links(){
    digitalWrite(led, HIGH);
    //Gegenstand_links = true;
  }

Außerdem fehlt die Funktion pinMode() für das LED.

Grüße Uwe

Srry wegen den fehlenden angaben :~ ich war in zeit druck wollte den post aber noch machen bevor ich weg fahre :..
Also der Roboter hat 2 Motoren und 2 Ketten, dazwischen ist ein zahnrad getriebe. Er ist in etwa ab gesehen von material und auch ein wenig der Masse, der selbe wie dieser hir: http://www.robotshop.com/eu/dfrobotshop-rover-tracked-robot-basic-kit-15.html
Auserdem muss ich leider korigieren bei dem 2. sktech fährt er einfach immer 180C nach rechts dan nach links dan nach recht.....
Mein handy kann irgent wie keine verbindung zum PC herstelllen sonst hätte ich auch bilder reingestellt :stuck_out_tongue_closed_eyes:
okay das im ersten sketch war echt dumm heit von mir :fearful: doch erfunktioniert jetzt auch schon mal herzlichen danke :slight_smile:
Doch der andere Sketch funktioniert einfach nicht :stuck_out_tongue_closed_eyes:, er fährt einfach immer 180C nach rechts dan nach links dan nach recht..... Ich verstehe einfach nicht warum ?? trotz korektur...
Vielleicht hat ja jemand eine Idee was mein Problem ist.

Würde mich sehr freuhen

LG Seykool

Eine Sache die mir aufgefallen ist, wäre das setzen der Geschwindigkeit.
z.B.

   int zurueck_fahren(int dauer, int geschwindigkeit)
  {
      digitalWrite (MotorControlL, HIGH);
      digitalWrite (MotorControlR, HIGH);
      digitalWrite (MotorSpeedL, geschwindigkeit);
      digitalWrite (MotorSpeedR, geschwindigkeit);
      delay(dauer);
      digitalWrite (MotorSpeedL, 0);
      digitalWrite (MotorSpeedR, 0);
      return 0;
  }

digitalWrite() schreibt entweder HIGH oder LOW auf einen Ausgang. Ist das so gewollt, das die Motoren immer 100% drehen oder gar nicht? Sollte das per PWM gemacht werden, hast Du leider die falsche Funktion genutzt. "analogWrite()" ist da dein Freund. Die Pins die verwendet werden sind zumindest schonmal PWM Ausgänge.

Hi,

mal was generelles: Wenn du von einer Funktion keinen Rückgabewert verlangst (also eine reine Subroutine ansprichst), dann benutze einfach "void das_ist_mein_funktionsname(int mein_parameter){} und lass das "return 0;" weg. 1. ist es gut sich anzugewöhnen zwischen Funktionen und Subroutinen zu unterscheiden und 2. sparst du dir immer ein paar Byte an Speicherplatz.

Okay herzlichen danke für diese Grundkenntnise. Hab halt mit der Arduino sache neben der schule leider noch nicht so viel gemacht :blush:
Ich habe das Programm jetzt dem entsprechend umgeschrieben doch es funktioniert immer noch nicht. Also der roboter fährt 1 sec. nach hinten dan dreht er sich ímmer nach rechts dan ach links usw. bei jedem richtung wechsel fährt er noch mal 1 sec rückwährts.... Die LED leuchtet nicht.

Freundliche Grüße Seykool

Dann poste doch das angepasste Programm nochmal. Fehler in einer Software zu finden ist keine einmalige Sache, sondern ein kontinuierlicher Prozess. Schritt für Schritt werden Fehler gefunden und verbessert. Irgendwann geht es dann.

Okay danke für den tipp:D

Also der Robter fährt immer rechtes rum dan kurtz nach hinten dan links rum dan wider kurtz nach hinten und immer so weiter :frowning:

Liebe grüße Seykool

int led = 13;

int MotorSpeedL = 5;

int MotorSpeedR = 6;

int MotorControlL = 7;

int MotorControlR = 4;

int sensorLinks = 3;
int sensorRinks = 2;

volatile boolean Gegenstand_links;
volatile boolean Gegenstand_rechts;

void setup(){
pinMode (MotorSpeedL, OUTPUT);
pinMode (MotorSpeedR, OUTPUT);
pinMode (MotorControlL, OUTPUT);
pinMode (MotorControlR, OUTPUT);
attachInterrupt(0,setze_status_Gegenstand_rechts, CHANGE);
attachInterrupt(1,setze_status_Gegenstand_links, CHANGE);
Gegenstand_links = false;
Gegenstand_rechts = false;
}

void loop(){

vorwaerts_fahren(100, 255);

if(Gegenstand_links == true){
zurueck_fahren(300, 200);
rechts_schwenk(2500, 200);
Gegenstand_links = false;
digitalWrite(led, LOW);
}
if(Gegenstand_rechts == true){
zurueck_fahren(300, 200);
links_schwenk(2500, 200);
Gegenstand_rechts = false;
digitalWrite(led, LOW);
}
}

void zurueck_fahren(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, HIGH);
digitalWrite (MotorControlR, HIGH);
analogWrite (MotorSpeedL, geschwindigkeit);
analogWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
analogWrite (MotorSpeedL, 0);
analogWrite (MotorSpeedR, 0);

}

void vorwaerts_fahren(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, LOW);
digitalWrite (MotorControlR, LOW);
analogWrite (MotorSpeedL, geschwindigkeit);
analogWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
analogWrite (MotorSpeedL, 0);
analogWrite (MotorSpeedR, 0);

}

void rechts_schwenk(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, HIGH);
digitalWrite (MotorControlR, LOW);
analogWrite (MotorSpeedL, geschwindigkeit);
analogWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
analogWrite (MotorSpeedL, 0);
analogWrite (MotorSpeedR, 0);

}

void links_schwenk(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, LOW);
digitalWrite (MotorControlR, HIGH);
analogWrite (MotorSpeedL, geschwindigkeit);
analogWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
analogWrite (MotorSpeedL, 0);
analogWrite (MotorSpeedR, 0);

}

void setze_status_Gegenstand_links(){
digitalWrite(led, HIGH);
Gegenstand_links = true;
}

void setze_status_Gegenstand_rechts(){
digitalWrite(led, HIGH);
Gegenstand_rechts = true;
}

Bitte beim nächsten Posten die "code" Tags verwenden. Das macht das Lesen einfacher.

Du hast noch immer nicht beachtet, was Uwe bereits sagte: Verzichte doch bitte auf die Interruptroutinen! Ein einfaches Pollen (Abfrage nach hindernissen in der loop) ist hier wohl angebrachter. Der Grund: Dir fehlt schlichtweg die Programmiererfahrung, um abzuschätzen, was du mit den Interrupten eigentlich bewirkst. Beispielsweise sind diese auf CHANGE gesetzt, soll das tatsächlich so sein? Wenn ja, warum?

Ok, ich würde erstmal schrittweise vorgehen.

  1. Schritt: keine Gegenstandserkennung. "Nur" ein dummes Sketch, das die Funktionen "vorwärts fahren", "rückwärts fahren", "links rum" und "rechts rum" testet. Damit kannst Du schon mal ausschliessen, das hier ein Fehler drin steckt.

  2. Schritt: keine Bewegung. Nur die Sensoren per Interrupt abfragen und den Status in der Loop nach serial ausgeben. Damit kannst Du prüfen, ob die Sensoren so arbeiten wie Du es erwartest.

Danach kann dann wieder alles zusammengebaut werden.

Wegen den Interrupt: das Programm soll ja später noch vil mehr machen und wen es dan gerade in void loop an einer anderen stelle ist fährt er gegen die wand. Also fals das net stimmt das hat mir mein Vatter so beschrieben.
Wie verwende ich die code tags? bin nen neuling was forem angehen :frowning:

Und mit dem einzelen testen das habe ich alles schon gemacht jede funktion vorwährts rückwährst rechts rum links rum.... wenn der Interrupt nur ne LED an machen soll und dan wider aus macht er das auch, Nur wen er auch noch fahren soll dan irgent wie nicht.

Freundliche grüße Seykool

Ob Du nun per Interrupt speicherst, ob ein Hinderniss erkannt wurde und das nur einmal im Loop auswertest, oder ob du an der entsprechenden Stelle prüfst, ob ein Hindernis da ist, ist egal. Durch die Interrupt Routine reagierst Du ja trotzdem nicht schneller.
Du kannst im übrigen den Roboter auch so stellen, das die Räder "in der Luft" hängen und nur drehen, ohne das eine Bewegung stattfindet. Dann kannst du den Arduino per USB Kabel an die serielle Konsole stecken und einfach mal debugausgaben der einzelnen Variablen und Zustände deines Programms ausgeben.Hindernisse kannst du an den Sensoren mit der Hand simulieren.

Klar soll der Roboter später mal mehr können, trotzdem solltest du so programmieren, dass die loop möglichst schnell abgearbeitet werden kann. Und das Pollen kostet kaum Zeit. Wenn du denkst, damit irgendwann eine unsaubere Programmierung ausgleichen zu können, wenn du jetzt für solch trivialen Sachen Interrupte verwendest (die du evtl. später für wirklich komplizierte Dinge brauchen könntest ;)), dann liegst du komplett falsch.
Und eine Frage bist du mir schuldig geblieben: Warum CHANGE?

okay also Mit dem CHANGE hat es auf sich das mein Vatter mel versucht hat es zu machen. Und ich wusste nicht das es noch auf CHANGE ist aber das tut eig auch nicht zur Sache den es reagiert ja so oder so nicht.
Mit dem seriall dings debug geht nicht weil die Motoren bis zu 800ma ziehen und durch USB nur 500 gehen können.Deshalb mache ich das immer mir einer speciellen strom versorgung.Und selbst wenn damit hab ich noch nie was gemacht und dan würde es erst recht nicht funktionieren, den ich bin im arduino buch noch net so weit :D.

Ich habe das Programm jetzt ohne Interrupts mal getestet jetzt fährt der Roboter nur grade aus reagiert aber immer noch nicht egal wie lange ich die hand vor den Sensorhalt :frowning:

  int led = 13;
  
  int MotorSpeedL = 5;
  
  int MotorSpeedR = 6;
  
  int MotorControlL = 7;
  
  int MotorControlR = 4;
  
  int sensorLinks = 3;
  int sensorRinks = 2;
  
  
  void setup(){
    pinMode (MotorSpeedL, OUTPUT);
    pinMode (MotorSpeedR, OUTPUT);
    pinMode (MotorControlL, OUTPUT);
    pinMode (MotorControlR, OUTPUT);
    pinMode (sensorRinks, INPUT);
    pinMode (sensorLinks, INPUT);
  }
  
  
  void loop(){
    
    vorwaerts_fahren(100, 255);
    
    
      if(sensorLinks == LOW){
        zurueck_fahren(300, 200);
        rechts_schwenk(2500, 200);
        digitalWrite(led, LOW);
      }
      if(sensorRinks == LOW){
        zurueck_fahren(300, 200);
        links_schwenk(2500, 200);
        digitalWrite(led, LOW);
      }
  }
  
   void zurueck_fahren(int dauer, int geschwindigkeit)
  {
      digitalWrite (MotorControlL, HIGH);
      digitalWrite (MotorControlR, HIGH);
      analogWrite (MotorSpeedL, geschwindigkeit);
      analogWrite (MotorSpeedR, geschwindigkeit);
      delay(dauer);
      analogWrite (MotorSpeedL, 0);
      analogWrite (MotorSpeedR, 0);

  }
  
  void vorwaerts_fahren(int dauer, int geschwindigkeit)
  {
      digitalWrite (MotorControlL, LOW);
      digitalWrite (MotorControlR, LOW);
      analogWrite (MotorSpeedL, geschwindigkeit);
      analogWrite (MotorSpeedR, geschwindigkeit);
      delay(dauer);
      analogWrite (MotorSpeedL, 0);
      analogWrite (MotorSpeedR, 0);

  }

 void rechts_schwenk(int dauer, int geschwindigkeit)
  {
      digitalWrite (MotorControlL, HIGH);
      digitalWrite (MotorControlR, LOW);
      analogWrite (MotorSpeedL, geschwindigkeit);
      analogWrite (MotorSpeedR, geschwindigkeit);
      delay(dauer);
      analogWrite (MotorSpeedL, 0);
      analogWrite (MotorSpeedR, 0);
     
  }
  
  void links_schwenk(int dauer, int geschwindigkeit)
  {
      digitalWrite (MotorControlL, LOW);
      digitalWrite (MotorControlR, HIGH);
      analogWrite (MotorSpeedL, geschwindigkeit);
      analogWrite (MotorSpeedR, geschwindigkeit);
      delay(dauer);
      analogWrite (MotorSpeedL, 0);
      analogWrite (MotorSpeedR, 0);
      
  }

Du wusstest nicht, dass die Interrupte auf CHANGE gesetzt sind? Kennst du deinen Code nicht? Steht doch im Klartext dort. Meinst du nicht, dass man da auf eine steigende oder fallende Flanke reagieren sollte, und eben nicht auf beide?
Und wie mkl schon bemerkte: Wenn du die Interrupte benutzt, um doch nur ein Flag zu setzen und in der loop dieses Flag auswertest, kannst du auch gleich pollen.

Nachtrag: Wo ist dein digitalRead, dass du mitbekommst, wann der Sensor anspringt? Variablenbezeichnungen prüfen, im neuen Code steht statt Rechts bspw. Rinks...

Einfach mal kleinere Brötchern backen, so ein Sketch muss sich auch entwickeln. Und da gehört das debuggen über die serielle Schnittstelle bzw. USB dazu. Deine Argumentation, dass das in deinem Fall nicht geht, stimmt nur bedingt.
Zum einen sehen die Spezifikationen vom USB nur 100 mA vor, erst bei expliziter Anmeldung kommen 500 mA raus (USB 3.0 schafft mehr, afair 900 mA). Dann wurde bereits vorgeschlagen, stückchenweise vorzugehen: um die Sensoren zu testen, muss kein Motor anspringen, da tut es auch eine LED. Und last but not least kannst du sehr wohl USB und eine zusätzliche Spannung für die Motoren verwenden - Masseverbindung ja, unterschiedliche Potentiale verbinden nein.
Mit dem Arduino ist eine einsteigerfreundliche Plattform entstanden, aber gewisse Grundlagen braucht man trotzdem.

Und nicht von neunmalklugen Membern zurückschrecken. :wink: Lieber direkt fragen: was macht der und der Code, der mir vorgegeben wurde/den ich mir kopiert habe.

Ich wusste schon das es auf CHANGE steht ich hab halt mal rum probiert Um zu schaun ob arduino überhaupt reagirt und es dabei dan halt gelassen weil ich gedacht habe so lange es nicht reagiert ich es egal, und dan hab ich halt beim posten vergessen das es noch auf CHANGE steht. Natürlich weiss ich das es eigenltich auf FALLING stehen solte. Also das mit dem flag und dem pollen ist mir auch irgent wie klar geworeden auch wenn ich nicht ganz weis was die beiden Wörter genau heiße :frowning: . Das DigitalRead hab ich vergessen doch bei diemsem Sketch hab ich alles richtig gemacht DEN ER FUNKTIONIERT :stuck_out_tongue: :slight_smile: XD :). Was mich aber noch interesieren würde ist: was muss ich für das Serielle debugen machen ? und wie muss ich was anschlissen?

Ich bedanke mich ganz herzlich bei allen die mir geholfen haben

Freundliche und glückliche Grüße Seykool

int MotorSpeedL = 5;

int MotorSpeedR = 6;

int MotorControlL = 7;

int MotorControlR = 4;

int sensorLinks = A2;
int sensorRechts = A3;


void setup(){
pinMode (MotorSpeedL, OUTPUT);
pinMode (MotorSpeedR, OUTPUT);
pinMode (MotorControlL, OUTPUT);
pinMode (MotorControlR, OUTPUT);
pinMode (sensorRechts, INPUT);
pinMode (sensorLinks, INPUT);
}


void loop(){

vorwaerts_fahren(500, 255);

if(analogRead (sensorLinks) < 200){
zurueck_fahren(300, 200);
links_schwenk(2500, 200);
}
if(analogRead (sensorRechts) < 200){
zurueck_fahren(300, 200);
rechts_schwenk(2500, 200);
}
}

void zurueck_fahren(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, HIGH);
digitalWrite (MotorControlR, HIGH);
analogWrite (MotorSpeedL, geschwindigkeit);
analogWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
analogWrite (MotorSpeedL, 0);
analogWrite (MotorSpeedR, 0);
}

void vorwaerts_fahren(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, LOW);
digitalWrite (MotorControlR, LOW);
analogWrite (MotorSpeedL, geschwindigkeit);
analogWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
analogWrite (MotorSpeedL, 0);
analogWrite (MotorSpeedR, 0);
}
void rechts_schwenk(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, HIGH);
digitalWrite (MotorControlR, LOW);
analogWrite (MotorSpeedL, geschwindigkeit);
analogWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
analogWrite (MotorSpeedL, 0);
analogWrite (MotorSpeedR, 0);

}

void links_schwenk(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, LOW);
digitalWrite (MotorControlR, HIGH);
analogWrite (MotorSpeedL, geschwindigkeit);
analogWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
analogWrite (MotorSpeedL, 0);
analogWrite (MotorSpeedR, 0);

}