Hallo Forengemeinde,
ich bin völlig neu hier, und versuche mich gerade an einer ersten Programmierung meines Arduino Uno.
Da ich vom programmieren nicht wirklich viel Ahnung habe, suchte ich mir ein wenig Code zusammen ... aber das funktioniert leider so ganz und gar nicht!
Ich hoffe, ihr könnt mir weiter helfen.
Was ich vor habe:
Mit einem HC-SR04 soll der Abstand zu einem Hindernis gemessen werden.
Liegt ein Ergebnis vor, mit einem Abstand kleiner 33cm, so sollen die jeweiligen LED's für eine Sekunde aufleuchten. Ist der Abstand größer 33cm, so soll nach 50 Millisekunden eine neue Messung getätigt werden.
Die LED's sollen nach diesem Prinzip angesteuert werden:
- liegt der Abstand zwischen 0cm und 6cm, so sollen die Leds 1 bis 10 leuchten
- liegt der Abstand zwischen 7cm und 12cm, so sollen die Leds 1 bis 7 leuchten
- liegt der Abstand zwischen 13cm und 18cm, so sollen die Leds 1 bis 4 leuchten
- liegt der Abstand zwischen 19cm und 25cm, so sollen die Leds 1 bis 2 leuchten
- liegt der Abstand über 26cm, so soll keine Led leuchten
Diesen Code habe ich geschrieben:
// HC-SR04 VCC => 5V, GND => GND
int TriggerPin = 12; // Digital 12 => HC-SR04 Trigger
int EchoPin = 13; // Digital 13 => HC-SR04 Echo
int led1 = 2; // LED 1 - 2 => rot unten
int led2 = 3; // LED 1 - 2 => rot unten
int led3 = 4; // LED 3 - 4 => blau unten/mitte
int led4 = 5; // LED 3 - 4 => blau unten/mitte
int led5 = 6; // LED 5 - 7 => orange mitte
int led6 = 7; // LED 5 - 7 => orange mitte
int led7 = 8; // LED 5 - 7 => orange mitte
int led8 = 9; // LED 8 - 10 => grün oben
int led9 = 10; // LED 8 - 10 => grün oben
int led10 = 11; // LED 8 - 10 => grün oben
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
pinMode(led10, OUTPUT);
}
void loop()
{
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, cm;
// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(TriggerPin, OUTPUT);
digitalWrite(TriggerPin, LOW);
delayMicroseconds(2);
digitalWrite(TriggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(EchoPin, INPUT);
duration = pulseIn(EchoPin, HIGH);
// convert the time into a distance
cm = microsecondsToCentimeters(duration);
if (cm >= 6)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led9, HIGH);
digitalWrite(led10, HIGH);
delay(1000);
}
else if (cm >= 12)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
delay(1000);
}
else if (cm >= 18)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
delay(1000);
}
else if (cm >= 25)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
delay(1000);
}
else if (cm >= 32)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
delay(1000);
}
else (cm >= 33);
{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
}
delay(50);
}
long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}
Spiele ich diesen Code auf den Arduino, so blinken die LED's dauernd, und nur wenn der Ultraschallsensor einen Abstand von unter 6cm erkennt, werden die LEDs alle ausgeschaltet.
Werte zw. 6 und "x" cm werden gänzlich ignoriert
Was mache ich falsch???
Gruß Chris