Als erstes mein Aufbau: Uno R3, mir l293d Shield, 3 LDR-Sensoren, 4 Räder, 9V Batteriefach
Die LDR Sensoren haben einen Ausgang für analog und für digital. Sie hängen bei mir alle an den digitalen Pins 2, 5 und 8. Der LDR an Pin 2 funktioniert tadelos. Die anderen beiden geben max. ihre Status LED aus. Die Aktionsleuchte bleibt immer aus, egal wie sehr ich den Poti drehe.
Ich vermute es liegt nicht an den Sensoren, den diesen Fall habe ich schon überprüft, der Status bleibt gleich. Ich habe auch bereits die Lötpunkte überprüft und lockere Kabel ausgetauscht.
#include <AFMotor.h>
#include <Arduino.h>
#include <SoftwareSerial.h>
//#include <HCSR04.h>
int number;
char BT_input;
char oldInput;
/*byte triggerPin = 9;
byte echoPin = 7;
int duration, distance;*/
SoftwareSerial BlueTooth(10, 11); // RX, TX
const int MOTOR_1 = 1;
const int MOTOR_2 = 2;
const int MOTOR_3 = 3;
const int MOTOR_4 = 4;
AF_DCMotor motor1(MOTOR_1, MOTOR12_64KHZ); // create motor object, 64KHz pwm
AF_DCMotor motor2(MOTOR_2, MOTOR12_64KHZ); // create motor object, 64KHz pwm
AF_DCMotor motor3(MOTOR_3, MOTOR12_64KHZ); // create motor object, 64KHz pwm
AF_DCMotor motor4(MOTOR_4, MOTOR12_64KHZ); // create motor object, 64KHz pwm
void setup() {
Serial.begin(57600);
Serial.println(F("Start..."));
BlueTooth.begin(9600);
//pinMode(triggerPin, OUTPUT);
//pinMode(echoPin, INPUT);
motor1.setSpeed(180); // set the motor speed to 0-255
motor2.setSpeed(180);
motor3.setSpeed(180);
motor4.setSpeed(180);
}
void loop() {
getData();
bluetooth();
//getNewDistance();
}
void bluetooth() {
switch (BT_input) {
case 'X': taschenlampe();break;
case 'B': car_back(); break;
case 'F': car_front(); break;
case 'L': car_left(); break;
case 'R': car_right(); break;
case 'S': car_Stop(); break;
}
}
void getData() {
while (BlueTooth.available()) {
//char myChar = Serial.read();
char myChar = BlueTooth.read();
if (isAlpha(myChar)) {
myChar = ucase(myChar);
switch (myChar) {
case 'X':
case 'B': //backward
case 'F': //forward
case 'L': //left
case 'R': //right
case 'S': //stop
Serial.print(F("Input Char: "));
Serial.println(myChar);
BT_input = myChar;
break; //gültiges Zeichen
default:
if (myChar >= ' ') {
Serial.print(F("FailChar: "));
Serial.println(myChar, HEX);
BT_input = 'S';
}
}
}
}
if (oldInput != BT_input) {
car_Stop();
delay(20); // kurze Pause schont die Antriebe!
oldInput = BT_input;
}
}
/*void getNewDistance() {
distance = 0;
digitalWrite(triggerPin, LOW);
delayMicroseconds(4);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = round(duration * .0343) / 2;
Serial.print("Distance: ");
Serial.println(distance);
}
void switchdrive() {
switch (distance) {
case 1 ... 15:
car_front();
Serial.println(F("zurueck"));
delay(1200);
drive();
Serial.println(number);
matrix_display(herz);
break;
case 16 ... 30:
car_back();
Serial.println(F("langsam vor"));
matrix_display(smile);
break;
case 31 ... 45:
car_back();
Serial.println(F("Vorwaerts"));
matrix_display(vor);
break;
default:
car_back();
Serial.println(F("default"));
matrix_display(vor);
break;
}
}*/
char ucase(const char c) {
if (c >= 'a' && c <= 'z') {
return (c + ('A' - 'a'));
}
return c;
}
void car_back() {
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void car_front() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void car_left() {
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void car_right() {
motor3.run(RELEASE);
motor4.run(RELEASE);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
void car_Stop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void taschenlampe() {
int ldrright = digitalRead(5);
Serial.println (ldrright);
int ldrmiddle = digitalRead(2);
Serial.println (ldrmiddle);
int ldrleft = digitalRead(8);
if (ldrright == 0 && ldrleft == 0 && ldrmiddle == 1) {
Serial.println("F");
car_front();
}
if (ldrright == 0 && ldrleft == 1 && ldrmiddle==0) {
Serial.println("R");
car_right();
}
if (ldrright == 1 && ldrleft == 0 && ldrmiddle==0) {
Serial.println("L");
car_left();
}
if (ldrright == 1 && ldrleft == 1 && ldrmiddle==1) {
Serial.println("S");
car_Stop();
}
delay(100);
}
Gibt es einen Grund was gegen 3 LDR Sensoren spricht? Ich hab den Eindruck die LDR's beeinflussen sich gegenseitig. Wenn ich an einem Poti drehe der aktuell nicht funktioniert, verändert sich die Helligkeit aller3 LDRs (Status LED's). Kann jetzt Einbildung sein.
Auch an analog macht er das selbe.


