7 Segment Anezeige Zeigt komisch an

Ich möchte eine Entfernung mit ein Ultraschall Sensor ausmessen und dies auf den serielen monitor und auf eine 7 Segment Anzeige anzeigen lassen jedoch funktioniert alles bis auf die 7 Segmente Anzeige diese zeigt die Zahlen doch leuchtet nur einzelne Segmente durch. Wo könnte das Problem liegen?

#include "SevSeg.h" //Die vorher hinzugefügte Library laden
SevSeg sevseg; //Ein sieben Segment Objekt initialisieren

int trigger=A0; 
int echo=A1; 
long dauer=0; 
long entfernung=0;
int LED = A2;

void setup()
{
byte numDigits = 4; //Hier wird die Anzahl der Ziffern angegeben
byte digitPins[] = {2, 3, 4, 5}; //Die Pins zu den Ziffern werden festgelegt
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; //Die Pins zu den //Segmenten werden festgelegt
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins); 

Serial.begin (9600); //Serielle kommunikation starten, damit man sich später die Werte am serial monitor ansehen kann.
pinMode(trigger, OUTPUT); // Trigger-Pin ist ein Ausgang
pinMode(echo, INPUT); // Echo-Pin ist ein Eingang
pinMode(LED, OUTPUT) ;
}

void loop()
{
 {
   sevseg.setNumber(entfernung); // Wert ans Display schicken
  sevseg.refreshDisplay(); 
  sevseg.setBrightness(100);
 }

digitalWrite(trigger, LOW); //Hier nimmt man die Spannung für kurze Zeit vom Trigger-Pin, damit man später beim senden des Trigger-Signals ein rauschfreies Signal hat.
delay(5); //Dauer: 5 Millisekunden
digitalWrite(trigger, HIGH); //Jetzt sendet man eine Ultraschallwelle los.
delay(10); //Dieser „Ton“ erklingt für 10 Millisekunden.
digitalWrite(trigger, LOW);//Dann wird der „Ton“ abgeschaltet.
dauer = pulseIn(echo, HIGH); //Mit dem Befehl „pulseIn“ zählt der Mikrokontroller die Zeit in Mikrosekunden, bis der Schall zum Ultraschallsensor zurückkehrt.
entfernung = (dauer/2) * 0.03432; //Nun berechnet man die Entfernung in Zentimetern. Man teilt zunächst die Zeit durch zwei (Weil man ja nur eine Strecke berechnen möchte und nicht die Strecke hin- und zurück). Den Wert multipliziert man mit der Schallgeschwindigkeit in der Einheit Zentimeter/Mikrosekunde und erhält dann den Wert in Zentimetern.
if (entfernung >= 500 || entfernung <= 0) //Wenn die gemessene Entfernung über 500cm oder unter 0cm liegt,…
{
Serial.println("Kein Messwert"); //dann soll der serial monitor ausgeben „Kein Messwert“, weil Messwerte in diesen Bereichen falsch oder ungenau sind.
}
else //  Ansonsten…
{
Serial.print(entfernung); //…soll der Wert der Entfernung an den serial monitor hier ausgegeben werden.
Serial.println(" cm"); // Hinter dem Wert der Entfernung soll auch am Serial Monitor die Einheit "cm" angegeben werden.
 
}
delay(100); //Das delay von einer Sekunde sorgt in ca. jeder neuen Sekunde für einen neuen Messwert.

if (entfernung <20 ) //Wenn der Sensorwert unter 20 beträgt
{
digitalWrite(LED, HIGH); //…soll die LED leuchten…
}

else //andernfalls…
{
digitalWrite(LED, LOW); //….soll sie nicht leuchten.
}
}

rmznmrtatsy:
Ich möchte eine Entfernung mit ein Ultraschall Sensor ausmessen und dies auf den serielen monitor und auf eine 7 Segment Anzeige anzeigen lassen jedoch funktioniert alles bis auf die 7 Segmente Anzeige diese zeigt die Zahlen doch leuchtet nur einzelne Segmente durch.

Wasislos? Ich verstehe nur Bahnhof. Bitte beschreibe verständlich, was das Problem ist.

Gruß

Gregor

Wenn Du deinen Sketch in Codetags (*1) packst, nachdem Du STRG-T in der IDE gedrückt hast, liest hier bestimmt noch der eine oder andere mit.

Ich hab das mit meiner (abweichenden) Einstellung mal gemacht; und mir fällt auf, das Du im loop() bei jedem Durchlauf die Anzeige aktuallisierst.
Bei der Geschwindigkeit hat die Anzeige nicht einmal einen Hauch einer Chance eine komplette Ausgabe zu bewerkstelligen.
Das gibt dann den von Dir geschilderten Effekt.

#include "SevSeg.h" //Die vorher hinzugefügte Library laden
SevSeg sevseg; //Ein sieben Segment Objekt initialisieren

int trigger = A0;
int echo = A1;
long dauer = 0;
long entfernung = 0;
int LED = A2;



void setup()
  {
  byte numDigits = 4; //Hier wird die Anzahl der Ziffern angegeben
  byte digitPins[] = {2, 3, 4, 5}; //Die Pins zu den Ziffern werden festgelegt
  byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; //Die Pins zu den //Segmenten werden festgelegt
  sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins);
  Serial.begin(9600);  //Serielle kommunikation starten, damit man sich später die Werte am serial monitor ansehen kann.
  pinMode(trigger, OUTPUT); // Trigger-Pin ist ein Ausgang
  pinMode(echo, INPUT); // Echo-Pin ist ein Eingang
  pinMode(LED, OUTPUT) ;
  }

void loop()
  {
    {
    sevseg.setNumber(entfernung); // Wert ans Display schicken
    sevseg.refreshDisplay();
    sevseg.setBrightness(100);
    }
  digitalWrite(trigger, LOW); //Hier nimmt man die Spannung für kurze Zeit vom Trigger-Pin, damit man später beim senden des Trigger-Signals ein rauschfreies Signal hat.
  delay(5); //Dauer: 5 Millisekunden
  digitalWrite(trigger, HIGH); //Jetzt sendet man eine Ultraschallwelle los.
  delay(10); //Dieser „Ton" erklingt für 10 Millisekunden.
  digitalWrite(trigger, LOW);//Dann wird der „Ton" abgeschaltet.
  dauer = pulseIn(echo, HIGH); //Mit dem Befehl „pulseIn" zählt der Mikrokontroller die Zeit in Mikrosekunden, bis der Schall zum Ultraschallsensor zurückkehrt.
  entfernung = (dauer / 2) * 0.03432; //Nun berechnet man die Entfernung in Zentimetern. Man teilt zunächst die Zeit durch zwei (Weil man ja nur eine Strecke berechnen möchte und nicht die Strecke hin- und zurück). Den Wert multipliziert man mit der Schallgeschwindigkeit in der Einheit Zentimeter/Mikrosekunde und erhält dann den Wert in Zentimetern.
  if (entfernung >= 500 || entfernung <= 0) //Wenn die gemessene Entfernung über 500cm oder unter 0cm liegt,…
    {
    Serial.println("Kein Messwert"); //dann soll der serial monitor ausgeben „Kein Messwert", weil Messwerte in diesen Bereichen falsch oder ungenau sind.
    }
  else //  Ansonsten…
    {
    Serial.print(entfernung); //…soll der Wert der Entfernung an den serial monitor hier ausgegeben werden.
    Serial.println(" cm"); // Hinter dem Wert der Entfernung soll auch am Serial Monitor die Einheit "cm" angegeben werden.
    }
  delay(100); //Das delay von einer Sekunde sorgt in ca. jeder neuen Sekunde für einen neuen Messwert.
  if (entfernung < 20) //Wenn der Sensorwert unter 20 beträgt
    {
    digitalWrite(LED, HIGH); //…soll die LED leuchten…
    }
  else //andernfalls…
    {
    digitalWrite(LED, LOW); //….soll sie nicht leuchten.
    }
  }

*1 Wenn Du einen neuen Beitrag schreibst markiere den Code und drücke da oben links das Symbol </> - Das geht auch nachträglich.

Ach...

  delay(100); //Das delay von einer Sekunde sorgt in ca. jeder neuen Sekunde für einen neuen Messwert.

Sicher?
Ich glaube, Du hast noch ein wenig Arbeit :wink:

Bei den Anzeigen gibt's zwei unterschiedliche Typen, gemeinsame Anode oder gemeinsame Kathode.

In der Zeile
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins);
gibst du mit "COMMON_ANODE" den Typ vor.
Versuch mal "COMMON_CATHODE".