Wieso geht meine 7 Segment Anzeige nicht?

Hi, ich habe ein Schulprojekt und wollte dies mit Arduino machen, es geht darum eine Tankstelle zu simulieren. Ich habe ein Wassersensor und je nach dem ob der Behälter voll oder leer ist leuchtet eine LED grün oder rot und dazu habe ich auch ein Ultraschall Sensor mit diesem wollte ich später die Preisstufen Billig, mittel & teuer festlegen. Der Wert am Anfang #define PIN_Trigger 41 stimmt deshalb nicht.

Ich wollte erstmal das die 7 Segment Anzeige läuft. Wenn ich das Programm einzeln hochlade geht's aber sobald ich Wassersensor usw. einbinde geht's leider nicht mehr. Weiß jemanden wieso?

Die Anzeige blinkt nur an den einzelnen Segmenten einzeln abwechselnd.

Hier mein Programm:

 #include "SevSeg.h" //Die vorher hinzugefügte Library laden

SevSeg sevseg; //Ein sieben Segment Objekt initialisieren
#define POWER_PIN  25
#define SIGNAL_PIN A5
int RELAY_PIN =22;
int LEDGRUEN_PIN =23;
int LEDROT_PIN = 24;
int value = 0; // variable to store the sensor value 

#define PIN_TRIGGER 41
#define PIN_ECHO    40 

const int SENSOR_MAX_RANGE = 300; // in cm

unsigned long duration;
unsigned int distance;

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_CATHODE, numDigits, digitPins, segmentPins);
  Serial.begin(9600);
  pinMode(PIN_TRIGGER, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
  Serial.begin(9600);
  pinMode(POWER_PIN, OUTPUT);   // configure D7 pin as an OUTPUT
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(LEDGRUEN_PIN, OUTPUT);
  pinMode(LEDROT_PIN, OUTPUT);
  digitalWrite(POWER_PIN, LOW); // turn the sensor OFF
}

   void loop()
{
digitalWrite(PIN_TRIGGER, LOW);
  delayMicroseconds(2);
  digitalWrite(PIN_TRIGGER, HIGH);
  delayMicroseconds(10);
  duration = pulseIn(PIN_ECHO, HIGH);
  distance = duration/58;
  if (distance > SENSOR_MAX_RANGE || distance <= 0)
{
    Serial.println("Out of sensor range!");
  } else {
    Serial.println("Distance to object: " + String(distance) + " cm");
  }
  delay(100);
digitalWrite(POWER_PIN, HIGH);  // turn the sensor ON
  delay(10);                      // wait 10 milliseconds
  value = analogRead(SIGNAL_PIN); // read the analog value from sensor
  digitalWrite(POWER_PIN, LOW);   // turn the sensor OFF
  Serial.print("Sensor value: ");
Serial.println(value);
  delay(100);
  if (value <= 120)
  {
sevseg.setNumber(1234,3);
sevseg.refreshDisplay();
sevseg.setBrightness(90);
    digitalWrite(LEDROT_PIN, HIGH);
    digitalWrite(LEDGRUEN_PIN, LOW);
    digitalWrite(RELAY_PIN, HIGH); // turn on pump 1 seconds
    //digitalWrite(POWER_PIN, HIGH);  // turn the sensor ON
    //delay(10);                      // wait 10 milliseconds
    //value = analogRead(SIGNAL_PIN); // read the analog value from sensor
    //digitalWrite(POWER_PIN, LOW);   // turn the sensor OFF
    delay(100);
  }
else
  {
sevseg.setNumber(1234,3);
sevseg.refreshDisplay();
sevseg.setBrightness(90);
    digitalWrite(LEDROT_PIN, LOW);
    digitalWrite(LEDGRUEN_PIN, HIGH);
    digitalWrite(RELAY_PIN, LOW);
    //digitalWrite(POWER_PIN, HIGH);  // turn the sensor ON
    //delay(10);                      // wait 10 milliseconds
    //value = analogRead(SIGNAL_PIN); // read the analog value from sensor
    //digitalWrite(POWER_PIN, LOW);   // turn the sensor OFF
    delay(100);
  }
  delay(100);
}

[EDIT] Bißchen aufgeräumt. Grüße Uwe [/EDIT]

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Sobald Du Deine delay()s da rausnimmst, könnte es was werden, das da was angezeigt wird.
Die Anzeige hat keinen internen Speicher und muss daher direkt aus dem Code regelmäßig aktuallisiert / beschrieben werden.

Wenn Du Deinen Code in codetags - als das Symbol </> benutzen - einstellst, könnte man da auch was rauslesen. So ist das nur raten.

Danke für deine Antwort, habs jetzt in codetags nachträglich eingefügt. Habe die Delays mal entfernt aber funktioniert leider immer noch nicht

Nein, der Code ist noch immer nicht in Codetags, aber Du hast Deine PIN-Belegung im setup() festgemacht und wenn das setup() beendet ist, ist der Inhalt auch verloren.

Der hier müsste für 12 Sekunden 1234 und dann für weitere 12 Sekunden 4321 anzeigen um dann wieder von vorn zu beginnen.
Auf dem Seriellen Monitor siehst Du value hochzaehlen...

#include "SevSeg.h" //Die vorher hinzugefügte Library laden

SevSeg sevseg; //Ein sieben Segment Objekt initialisieren


unsigned int value = 0; // variable to store the sensor value
unsigned long lastmillis = 0;

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

void setup()
{
  sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins);
  Serial.begin(9600);
  Serial.println(F("Start..."));
  sevseg.setBrightness(90);
}


void loop()
{
  if (millis() - lastmillis > 100)
  {
    value++;
    Serial.println(value);
    lastmillis = millis();
  }
  if (value > 240)
  {value = 0;}
  if (value <= 120)
  {
    sevseg.setNumber(1234, 3);
  }
  else
  {
    sevseg.setNumber(4321, 3);
  }
  sevseg.refreshDisplay();
}

Wenn das funktioniert, kannst Du da drauf aufbauen.

Sicher das common cathode? Link zum Display, oder was drauf steht posten.

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