Ultraschallsensor mit Ausgabe an LEDS

Hallo Leute,

leider bin ich nicht der Coding Pro.
Der SR04 erkennt wunderbar die Höhe. Maximale Höhe ist 18cm.
Im Bereich 16-18cm soll alleine die rote LED leuchten(sofern es geht bei 18cm sogar blinken?)
Die gelbe LED im Bereich 9-15cm (alleine)
und bei 0-8cm nur die grüne LED.

Jedoch funktioniert der Sketch leider nicht so wie ich will....

Woran liegts?

#include "SR04.h"
#define TRIG_PIN 11
#define ECHO_PIN 10
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
int pin1 = 2;//Highest level (grueneLED)
int pin2 = 3;//(gelbeLED)
int pin3 = 4;//Lowest Level (roteLED)

void setup() {
   Serial.begin(9600);
   delay(1000);
pinMode (pin1, OUTPUT);
pinMode (pin2, OUTPUT);
pinMode (pin3, OUTPUT);
digitalWrite (pin1, LOW);
digitalWrite (pin2, LOW);
digitalWrite (pin3, LOW);
}

void loop() {
   a=sr04.Distance();
   Serial.print(a);
   Serial.println("cm");
   delay(1000);

if (a == 16,17,18)
digitalWrite (pin3, HIGH);
else
digitalWrite (pin3, LOW);
if (a == 9,10,11,12,13,14,15)
digitalWrite (pin2, HIGH);
else
digitalWrite (pin2, LOW);
if (a <= 8)
digitalWrite (pin1, HIGH);
else
digitalWrite (pin1, LOW);
delay(1000);
}

Nur mal einen Fehler:

if (a == 16,17,18)

geht so nicht. Dass musst Du auflösen:

if (a == 16 || a ==17 || a==18) // oder Verknüpfung

Lerne einfach die Grundlagen.

Gruß Tommy

Der SR04 funktioniert nicht unter 2cm.
Grüße Uwe

Hallo ,

versuche es mal nach dem Muster. Du kannst den Pin´s sinvolle Namen geben. Das delay ganz am ende ist zu nix nutze weg damit.

int gruen = 2;//Highest level (grueneLED)
int gelb = 3;//(gelbeLED)
int rot = 4;//Lowest Level (roteLED)

.
.
.
.


 if (a >= 16 && a <= 18){
    digitalWrite (gruen, HIGH);
    digitalWrite (gelb,LOW);
    digitalWrite (rot,LOW);   
  }
  else{
    digitalWrite (gruen, LOW);
  }

.
.
int pin_led_gruen = 2;//Highest level (grueneLED)
int pin_led_gelb = 3;//(gelbeLED)
int pin_led_rot = 4;//Lowest Level (roteLED)

Dann wissen wir auch das LED an den Ausgängen hängen.
Grüße Uwe

Danke an alle Leute,

habs nun auf die Kette gebracht. Vielleicht kann man es noch vereinfachen, aber da fehlen mir momentan noch die nötigen Skills(wenn man alle 3 Jahre mal probiert was zu programmieren, löscht man es eben automatisch...)

Hier gerne mein Sketch:

#include "SR04.h"
#define TRIG_PIN 11
#define ECHO_PIN 10
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
int pin_led_gruen = 2;//Highest level (grueneLED)
int pin_led_gelb = 3;//(gelbeLED)
int pin_led_rot = 4;//Lowest Level (roteLED)

void setup() {
   Serial.begin(9600);
   delay(1000);
pinMode (pin_led_gruen, OUTPUT);
pinMode (pin_led_gelb, OUTPUT);
pinMode (pin_led_rot, OUTPUT);
digitalWrite (pin_led_gruen,LOW);
digitalWrite (pin_led_gelb,LOW);
digitalWrite (pin_led_rot,LOW);
}

void loop() {
   a=sr04.Distance();
   Serial.print(a);
   Serial.println("cm");
   delay(1000);

if (a >= 17){
    digitalWrite (pin_led_gruen,LOW);
    digitalWrite (pin_led_gelb,LOW);
    digitalWrite (pin_led_rot,HIGH);
    delay(100);
    digitalWrite (pin_led_rot,LOW);  
  }
  else{
    digitalWrite (pin_led_rot,LOW);
  }
if (a == 13 || a == 14 || a == 15 || a == 16){
  digitalWrite (pin_led_gruen,LOW);
  digitalWrite (pin_led_gelb,LOW);
  digitalWrite (pin_led_rot,HIGH);
  }
else{
  digitalWrite (pin_led_rot, LOW);
}
if (a == 9 || a == 10 || a == 11 || a == 12){
  digitalWrite (pin_led_gruen,LOW);
  digitalWrite (pin_led_gelb,HIGH);
  digitalWrite (pin_led_rot,LOW);
  }
else{
  digitalWrite (pin_led_gelb,LOW);
}
if (a < 9){
  digitalWrite (pin_led_gruen,HIGH);
  digitalWrite (pin_led_gelb,LOW);
  digitalWrite (pin_led_rot,LOW);
  }
else {
  digitalWrite (pin_led_gruen,LOW);
  }
}

Hi

Was soll passieren, wenn der Sensor 15,3cm misst?
Laut Deinen Vorgaben ... Nichts.
WAS willst Du wirklich? (Klar kann ich mir vorstellen, was Du willst, aber Du musst Das selber auch 'sehen' können).
Edit Mein gesehenes Problem ist HIER gar Keins!

Ob die LED blinkt, an ist, langsam hoch/runter dimmt, gleichzeitig noch ein Piezo ein Martinshorn imitiert ... Alles kein Ding - aber akut eben nicht bei z.B. 15,3 cm :wink:

MfG

PS: In Deinem Sketch sind die Werte nun Andere - das Grundproblem bleibt

Hi

Verdammt - dann passt's doch (wird Ihm aber später noch auf die Füße fallen, also die Lücken - nicht hier, wird sich auch schlecht finden lassen).

MfG