Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektews2013:wwsr:start:ausweichen
Ausweichen.ino
int trigger = 34;
int echo = 36;
int rotation=0;
int array[180];
int weitesteEntfernung;
int optimalerWinkel;
 
int step1=24;
int dir1=22;
 
int step2=26; //Rechtes Rad
int dir2=28;
 
int step3=30; //Linkes Rad
int dir3=32;
 
#include <Servo.h>
Servo myservo;
 
long duration, inches, cm;
 
void setup() {
  pinMode(step1, OUTPUT);      //Einstellen der Stepperpins
  pinMode(dir1, OUTPUT);
  pinMode(step2, OUTPUT);
  pinMode(dir2, OUTPUT);
  pinMode(step3, OUTPUT);
  pinMode(dir3, OUTPUT);
 
  Serial.begin(9600);
  myservo.attach(42);
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
}
 
void loop()
{
  digitalWrite(dir2, HIGH);
  digitalWrite(dir3, HIGH);
 
  digitalWrite(step2, HIGH);
  digitalWrite(step3, HIGH);
  delay(10);
  digitalWrite(step2, LOW);
  digitalWrite(step3, LOW);
  delay(10);                     //Von loopanfang bis hier simples Nach-Vorne-Fahren
                                 //Wird später ersetzt.  
  entfernungsMesser();           //Aufrufen der Funktion, die den Abstand zur nächsten Wand misst.
  if(cm<10) {                    
      weitesteEntfernung=0;
 
      for(int i=90;i<180;i++) {
        myservo.write(i);
        delay(30);
        entfernungsMesser();
        //Serial.println("wort");
        array[i]=cm;
        if(array[i]>weitesteEntfernung) {
          weitesteEntfernung=array[i];  //optimalerWinkel und weitesteEntfernung
          optimalerWinkel=i;            //werden im Programm bis jetzt noch nicht
          }                             //verwendet.
          Serial.println(optimalerWinkel);
        } 
      for(int i=179;i>0;i--) {
        myservo.write(i);
        delay(30);
        entfernungsMesser();
 
        array[i]=cm;
        if(array[i]>weitesteEntfernung) {
          weitesteEntfernung=array[i];
          optimalerWinkel=i;
          }
          Serial.println(optimalerWinkel);
        }
       myservo.write(90);
       if(optimalerWinkel>90) {
          digitalWrite(dir2, HIGH);
          digitalWrite(dir3, LOW);
          Serial.println("LINKS");
        }
       else {
          digitalWrite(dir2, LOW);
          digitalWrite(dir3, HIGH);
          Serial.println("RECHTS");
        }
 
      for(int j=1;j<143;j++) {          //Rechnerei mit dem Abstand und Durch-
        digitalWrite(step2, HIGH);      //messer der Räder hat ergeben, dass der
        digitalWrite(step3, HIGH);      //sich der Roboter nach 143 steps um
        delay(10);                      //90° gedreht hat.
        digitalWrite(step2, LOW);
        digitalWrite(step3, LOW);
        delay(10);
      }
      delay(100);
   }
}
 
void entfernungsMesser() {
 
  digitalWrite(trigger, LOW);
  delayMicroseconds(2);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);
 
  duration = pulseIn(echo, HIGH);
 
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);
 
  //Serial.println(cm, DEC);
 
  delay(10);
}
 
long microsecondsToInches(long microseconds){
 
return microseconds / 74 / 2;
}
 
long microsecondsToCentimeters(long microseconds){
 
return microseconds / 29 / 2;
}
projektews2013/wwsr/start/ausweichen.txt · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)