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.
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
}
}
}
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??
Achim
Lesezeichen