Das nächste Problem?
Das mit den millis funktioniert super. Jetzt habe ich einen Roboter mit 2 Rädern gebaut.
Erstmal nur 2 LDR Messbrücken angebaut. Das funktioniert gut. Das Problem ist, das er nicht unbedingt weiß wo vorne ist.(Die Sonne) Wenn er sich aus dem Schatten dreht fährt er von der Sonne weg, wenn das Licht gleichmäßig ist und weder rechts noch links der Grenzwert zum Drehen erreicht wird, fährt er geradeaus. Also wenn es sehr hell ist und eine weiße Wand in der Sonne glänzt fährt er darauf zu.
Ich wollte noch eine LDR Messbrücke vorne/hinten installieren.
Nur laufen jetzt ja die Millis immer eigenständig weiter. Wenn ich jetzt bedingt durch den neuen vorderen/hinteren LDR eine Wende programmiere, weiß der Arduino doch nicht, was er mit dem MotorPin machen soll. Die eine Messbrücke sagt rechtsrum, die andere linksrum!
Mit delay wäre das kein Problem.
Dann liefe ja alles der Reihe nach.
Aber dann würde, wenn er geradeaus in den Schatten fährt, nur die erste verdunkelte Messbrücke befehlen, das ihr Motor wendet. Mit Millis sind beide ja unabhängig.
Hier der Code bis jetzt.
Ich möchte erreichen, dass wenn die vorne/hinten Messbrücke den Robot drehen will obiger Loop ohne Funktion ist. Nach dem Drehen aber wieder läuft??Code:const int motorPin_1 = 10; // Motor rechts const int motorPin_2 = 9; // Motor rechts const int motorPin_3 = 12; // Motor links const int motorPin_4 = 13; // Motor links int messPin_1 = A2; // Ir Brücke--Links int messPin_2 = A3; // Ir Brücke--Rechts void setup() { pinMode(4, INPUT);// IR Sensor pinMode(3, INPUT); //IR Sensor pinMode(10, OUTPUT); //Zum 74 AC14 pinMode(9, OUTPUT); //Zum 74 AC14 pinMode(12, OUTPUT); //Zum 74 AC14 pinMode(13, OUTPUT); //Zum 74 AC14 } void loop() { unsigned long currentMillis ; int val = analogRead (A2); messPin_2 = map(val, 0, 1023, 0, 100);//Ir Links if (messPin_2 < 50) { digitalWrite(motorPin_1, HIGH);//Motor Rechts Vor digitalWrite(motorPin_2, LOW);//Motor Rechts Vor currentMillis = millis();//Zeitstempel while(millis()-currentMillis <1200); //warten xxx millis } else { digitalWrite(motorPin_1, LOW);//Motor Rechts Rück digitalWrite(motorPin_2, HIGH);//Motor Rechts Rück } { int val = analogRead (A3); messPin_1 = map(val, 0, 1023, 0, 100);//IR Rechts if (messPin_1 < 50) { digitalWrite(motorPin_3, HIGH);//Motor Links VOR digitalWrite(motorPin_4, LOW);//Motor Links VOR currentMillis = millis();//Zeitstempel while(millis()-currentMillis <1200); //warten xxx millis } else { digitalWrite(motorPin_3, LOW);//Motor Links Rück digitalWrite(motorPin_4, HIGH);//Motor Links Rück } } }
Achim







Zitieren

Lesezeichen