Arduino reagiert nicht wie er soll nach Hardwareänderung

Aktuell baue ich ein Carrera Auto was autonom fahren soll. Dafür benutze ich einen DC Motor und einen Lichtsensor der bei reflektierenden Klebestreifen reagieren soll. Mit nur einem Lichtsensor hat das auch geklappt. Das Auto ist so lange top speed gefahren bis der Lichtsensor einen Klebestreifen erfasst hat, wodurch das Auto dann gebremst hat. Um das ganze zu erweitern habe ich einen zweiten Lichtsensor drangebaut. Der Plan ist, dass das Auto ohne Klebestreifen eine Geschwindigkeit hält, mit der es durch die Kurven kommt. Wenn der zweite Lichtsensor einen Klebestreifen erfasst, soll das Auto auf Höchstgeschwindigkeit kommen, wobei der erste Sensor immernoch das Auto zum bremsen bringt.
Aktuell funktioniert jedoch garnichts. Mit dem Code wo der erste Sensor funktioniert hat, reagiert das Auto nicht mehr so wie es soll. Wenn ich den Code so umänder, dass auch der zweite Sensor erfasst werden sollte, ändert sich nichts. Das Auto macht einfach was es will.

Hier einmal der Code wo der erste Sensor funktioniert hat:

//Motor
const int motorPin1 = 10;
const int motorPin2 = 9;
const int LichtsensorPin = A0;
int VMax = 255;

//Werte vom Sensor
int ReferenzWert = 0;

void setup() {
Serial.begin(9600);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(LichtsensorPin, INPUT);
ReferenzWert = analogRead(LichtsensorPin);
Serial.println(ReferenzWert);
}
void loop() {
analogWrite(motorPin1, VMax);
ReferenzWert = analogRead(LichtsensorPin);
if(ReferenzWert < 300) {
VMax = 169;
}
else {
VMax = 0;
}
delay(100);

}

Hier der Code mit beiden Sensoren:

//Anschlüsse
const int motorPin1 = 10;
const int motorPin2 = 9;
const int LichtsensorPin1 = A0;
const int LichtsensorPin2= A1;

//Motor
int VMax = 255;

//Lichtsensor
int LichtWert1;
int LichtWert2;

void setup() {

Serial.begin(9600);

pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);

pinMode(LichtsensorPin1, INPUT);
pinMode(LichtsensorPin2, INPUT);
}

void loop() {

LichtWert1 = analogRead(LichtsensorPin1);
LichtWert2 = analogRead(LichtsensorPin2);

if(LichtWert1 < 300) {
analogWrite(motorPin1, VMax);
VMax = 169;
}
else {
analogWrite(motorPin1, VMax);
VMax = 0;
}
do {
analogWrite(motorPin1, VMax);
VMax = 255;
} while (LichtWert2 > 300);
delay(100);
}

geh mal in deinen Post und markiere den ersten Code - dann klick auf das </> Symbol - und dann das nochmal mit dem anderen Code.
Danke
Und dann beschreib mal, was das für Lichtsensoren sind.
(Type, Woher?, Datenblatt?)

Du sagst Deinen Analogpins, das sie digital sein sollen... Warum?
Und überschreibst Deine erste Auswertung mit der zweiten...

Das sieht schon mal nach der falschen Reihenfolge aus.

Die Logik Deines Programms sieht etwas verquer aus. Berechne doch erst die neue VMax und stelle erst danach den Motor ein.

Auch mir fehlen die Code Tags um Deinen Code :frowning:

in dieser While-Schleife gibt es keine Aktualisierung der Variable LichtWert2
Das bedeutet solange Lichtwert2 kleiner als 300 ist dann geht es in die Schleife rein und dann bleibt dein Programm ewig in der Schleife drin weil innerhalb der Schleife keine neuen Messwerte für LichtWert2 eingelesen werden.
vgs

Wie kommst du auf die lustige Idee, dass sich LichtWert2 in der Schleife jemals ändern wird?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.