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 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; }