Dies ist eine alte Version des Dokuments!
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; int dir2=28; int step3=30; 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) { array[89]=0; //array[89] darf nicht unbeschrieben sein, weil der Anfang bei Winkel=90° ist. digitalWrite(dir2, HIGH); //Umstellung der directions, um sich zu drehen. digitalWrite(dir3, LOW); for(int i=90;i>180;i++) { myservo.write(i); entfernungsMesser(); array[i]=cm; if(array[i]>array[i-1]) { weitesteEntfernung=array[i]; //optimalerWinkel und weitesteEntfernung optimalerWinkel=i; //werden im Programm bis jetzt noch nicht } //verwendet. } for(int i=180;i<0;i--) { myservo.write(i); entfernungsMesser(); array[i]=cm; if(array[i]>array[i-1]) { weitesteEntfernung=array[i]; optimalerWinkel=i; } } 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); } } } 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(100); } long microsecondsToInches(long microseconds){ return microseconds / 74 / 2; } long microsecondsToCentimeters(long microseconds){ return microseconds / 29 / 2; }