[Problem!] How many days?

Hallo an alle,
ich bin noch sehr neu im Mikrocontroller-Universum und habe Probleme bei einem meiner Projekte.
Ich möchte auf einem 7-Segment-Display die Tage, die ich mit meiner Liebsten schon verbracht habe, abbilden. Der Code zeigt beim kompilieren keine Fehler, auf dem Display taucht aber nichts auf, lediglich die standartmäßige 8888 leuchtet. Ich finde meinen Fehler einfach nicht.

Hier mein Schema

Hier der Code, da ich noch keine Dateien hochladen kann:

#include <RTClib.h>
#include <SevSeg.h>

#define S7SEG_PIN_DIG1  7
#define S7SEG_PIN_DIG2  8
#define S7SEG_PIN_DIG3  9
#define S7SEG_PIN_DIG4  10
#define S7SEG_PIN_A 2
#define S7SEG_PIN_B 3
#define S7SEG_PIN_C 4
#define S7SEG_PIN_D 5
#define S7SEG_PIN_E 11
#define S7SEG_PIN_F 12
#define S7SEG_PIN_G 13
#define S7SEG_PIN_DECIMAL 6

int s7segCounter = 0; 
unsigned long s7segTimer = millis();
byte s7segDigitPins[] = { S7SEG_PIN_DIG1, S7SEG_PIN_DIG2, S7SEG_PIN_DIG3, S7SEG_PIN_DIG4 };
byte s7segSegmentPins[] = { S7SEG_PIN_A, S7SEG_PIN_B, S7SEG_PIN_C, S7SEG_PIN_D, S7SEG_PIN_E, S7SEG_PIN_F ,S7SEG_PIN_G, S7SEG_PIN_DECIMAL };
SevSeg s7seg(s7segDigitPins, s7segSegmentPins);
RTC_DS3231 rtc; 

DateTime dtBegin (2017, 11, 11, 0, 0, 0); 
TimeSpan tsPassed;

void showInfo(const DateTime& dt) {
  Serial.print("NOW:");
  
  Serial.print(dt.year(), DEC);
  Serial.print('/');
  Serial.print(dt.month(), DEC);
  Serial.print('/');
  Serial.print(dt.day(), DEC);
  Serial.print(' ');
  Serial.print(dt.hour(), DEC);
  Serial.print(':');
  Serial.print(dt.minute(), DEC);
  Serial.print(':');
  Serial.print(dt.second(), DEC);
  
  Serial.print("\tPASSED:");
  Serial.print(tsPassed.days(), DEC);
  Serial.print(' ');
  Serial.print(tsPassed.hours(), DEC);
  Serial.print(':');
  Serial.print(tsPassed.minutes(), DEC);
  Serial.print(':');
  Serial.print(tsPassed.seconds(), DEC);
  
  Serial.println("");
}


void delayWithUpdate(uint32_t parDelay){
  uint32_t started=millis();
  while (millis()< started+parDelay){
    s7seg.refreshDisplay();
  }
}

void setup(){
  Serial.begin(9600);
  Serial.println(__TIME__);
  
  if (! rtc.begin()) {
        Serial.println("Couldn't find RTC");
        while (1);
  }
      
  delay(1000);    
    
  
rtc.adjust(DateTime(2017, 11, 11, 0, 0, 0));
      
 

  s7seg.setBrightness(100);
    
  
  s7seg.setNumber(8888, 1);
  delayWithUpdate(1000);
  
  
  s7seg.setNumber(8888, 1);
  delayWithUpdate(1000);
  
}

void loop(){
  s7seg.refreshDisplay();
  
  DateTime now = rtc.now();
  
  tsPassed = now-dtBegin;
  
  static uint32_t nextReportMillis=0;
  static uint16_t prevDaysPassed=0;
  
  if (tsPassed.days() != prevDaysPassed){
    prevDaysPassed=tsPassed.days();
    s7seg.setNumber(prevDaysPassed, 0);
  }

  
  s7seg.refreshDisplay();
  
  if (millis()>nextReportMillis){
    showInfo(now);
    nextReportMillis=millis()+5000;
  }
  
}'

Setze Deinen Code bitte in Codetags (</>-Button oben mitte im Forumseditor).
Das kannst Du auch noch nachträglich ändern.
Außerdem formatiere bitte den Code ordentlich (Strg+T in der IDE hilft Dir dabei) und gib uns bitte Links zu den verwendeten Libs.

Gruß Tommy

Hallo Tommy56,
Entschuldigung für die möglichen Sprachfehler, da meine Sprache Portugiesisch ist und ich Google Übersetzer verwendet habe.
Ich habe versucht, Ihre Skizze zu kompilieren, aber ich glaube, dass sich meine Bibliothek “SevSeg.h” von Ihrer unterscheidet, da sie einen Kompilierungsfehler verursacht hat.
Informieren Sie den Link der Bibliothek “SevSeg.h”, die Sie verwenden, damit ich ihn hier herunterladen und Ihre Skizze testen kann, um das Problem Ihres Projekts zu finden.

RV Mineirin

Hi Tommy,
ich habe den Codetag hinzugefügt, jetzt sieht es wesentlich besser aus - danke für die Info!

Ich habe folgende Libs verwendet:

7-Segment-Lib
RTC Lib

Bei der RTC Lib. ist es Version 1.13.0

Hallo Mineirin,

ich habe die Bibliothek aktualisiert :slight_smile:

Ich habe es nicht verstanden.
Irgendwas stimmt nicht!
Du sagst:
"Ich habe gehört Libs verwendet:

7-Segment-Lib 2
RTC Lib 1 ",
aber in Ihrer Skizze sieht es so aus: #include <SevSeg.h>.

Um die in “7-Segment-Lib 2” befindliche Bibliothek zu verwenden, sollte sie folgendermaßen aussehen: #include <SegmentDisplay.h>

RV Mineirin

Hallo,

eine Bemerkung kann ich mir nicht verkneifen. Vergiss den Resettaster nicht, also der zum nullen. Falls das Fräulein wechselt … :rofl:

Übrigens hatte ich Tagezähler im Betreff anfangs falsch verstanden. :wink:

1 Like

Hi!
Der Kommentar ist gerechtfertigt! :rofl:

Ich habe den Betreff angepasst, vielleicht lockt das jetzt mehr potentielle Helfer an :sweat_smile:

Hallo Mineirin,

ich habe die Library aktualisiert, kannst du jetzt mal gucken?

SevSeg
RTClib

#include <RTClib.h>
#include <SevSeg.h>

#define S7SEG_PIN_DIG1  7
#define S7SEG_PIN_DIG2  8
#define S7SEG_PIN_DIG3  9
#define S7SEG_PIN_DIG4  10
#define S7SEG_PIN_A 2
#define S7SEG_PIN_B 3
#define S7SEG_PIN_C 4
#define S7SEG_PIN_D 5
#define S7SEG_PIN_E 11
#define S7SEG_PIN_F 12
#define S7SEG_PIN_G 13
#define S7SEG_PIN_DECIMAL 6


int s7segCounter = 0;
byte s7segDigitPins[] = { S7SEG_PIN_DIG1, S7SEG_PIN_DIG2, S7SEG_PIN_DIG3, S7SEG_PIN_DIG4 };
byte s7segSegmentPins[] = { S7SEG_PIN_A, S7SEG_PIN_B, S7SEG_PIN_C, S7SEG_PIN_D, S7SEG_PIN_E, S7SEG_PIN_F ,S7SEG_PIN_G, S7SEG_PIN_DECIMAL };


SevSeg sevseg(s7segSegmentPins, s7segDigitPins) ; 
RTC_DS3231 rtcDS;

DateTime dtBegin (2017, 11, 11, 0, 0, 0);
TimeSpan tsPassed;

void showInfo(const DateTime& dt) {
  Serial.print("NOW:");
  
  Serial.print(dt.year(), DEC);
  Serial.print('/');
  Serial.print(dt.month(), DEC);
  Serial.print('/');
  Serial.print(dt.day(), DEC);
  Serial.print(' ');
  Serial.print(dt.hour(), DEC);
  Serial.print(':');
  Serial.print(dt.minute(), DEC);
  Serial.print(':');
  Serial.print(dt.second(), DEC);
  
  Serial.print("\tPASSED:");
  Serial.print(tsPassed.days(), DEC);
  Serial.print(' ');
  Serial.print(tsPassed.hours(), DEC);
  Serial.print(':');
  Serial.print(tsPassed.minutes(), DEC);
  Serial.print(':');
  Serial.print(tsPassed.seconds(), DEC);
  
  Serial.println("");
}

//=========================================
//
//=========================================
void delayWithUpdate(uint32_t parDelay){
  uint32_t started=millis();
  while (millis()< started+parDelay){
    sevseg.refreshDisplay();
  }
}
//=========================
//=========================
void setup(){
  Serial.begin(9600);
  Serial.println(tsPassed.days());
  
  if (! rtcDS.begin()) {
        Serial.println("Couldn't find RTC");
        while (1);
  }
      
  delay(5000);    
  
  
 
 rtcDS.adjust(DateTime(tsPassed.days()));   
  
  sevseg.begin(s7segSegmentPins, s7segDigitPins);
  sevseg.setBrightness(100);
  
  
  
  sevseg.setNumber(1234, 1);
  delayWithUpdate(1000);
  
  
  sevseg.setNumber(8888, 1);
  delayWithUpdate(1000);
  
}
//=========================
//=========================
void loop(){
  sevseg.refreshDisplay();
  
  DateTime now = rtcDS.now();
  
  tsPassed = now-dtBegin;
  
  static uint32_t nextReportMillis=0;
  static uint16_t prevDaysPassed=0;
  
  if (tsPassed.days() != prevDaysPassed){
    prevDaysPassed=tsPassed.days();
    sevseg.setNumber(prevDaysPassed, 0);
  }

  
  sevseg.refreshDisplay();
  
  if (millis()>nextReportMillis){
    //===PRINT SOME INFO HERE
    showInfo(now);
    nextReportMillis=millis()+5000;
  }
  
}

Versuchen Sie diese Skizze.
Es gibt einige Zeilen, die Sie möglicherweise konfigurieren müssen.
Siehe im Setup ().

RV mineirin

#include <RTClib.h>
#include <SevSeg.h>

#define S7SEG_PIN_DIG1  7
#define S7SEG_PIN_DIG2  8
#define S7SEG_PIN_DIG3  9
#define S7SEG_PIN_DIG4  10
#define S7SEG_PIN_A 2
#define S7SEG_PIN_B 3
#define S7SEG_PIN_C 4
#define S7SEG_PIN_D 5
#define S7SEG_PIN_E 11
#define S7SEG_PIN_F 12
#define S7SEG_PIN_G 13
#define S7SEG_PIN_DECIMAL 6

byte s7segDigitPins[] = { S7SEG_PIN_DIG1, S7SEG_PIN_DIG2, S7SEG_PIN_DIG3, S7SEG_PIN_DIG4 };
byte s7segSegmentPins[] = { S7SEG_PIN_A, S7SEG_PIN_B, S7SEG_PIN_C, S7SEG_PIN_D, S7SEG_PIN_E, S7SEG_PIN_F ,S7SEG_PIN_G, S7SEG_PIN_DECIMAL };

SevSeg sevseg ; 
RTC_DS3231 rtcDS;

DateTime dtBegin (2017, 11, 11, 0, 0, 0);
TimeSpan tsPassed;

void showInfo(const DateTime& dt) {
  Serial.print("NOW:");
  
  Serial.print(dt.year(), DEC);
  Serial.print('/');
  Serial.print(dt.month(), DEC);
  Serial.print('/');
  Serial.print(dt.day(), DEC);
  Serial.print(' ');
  Serial.print(dt.hour(), DEC);
  Serial.print(':');
  Serial.print(dt.minute(), DEC);
  Serial.print(':');
  Serial.print(dt.second(), DEC);
  
  Serial.print("\tPASSED:");
  Serial.print(tsPassed.days(), DEC);
  Serial.print(' ');
  Serial.print(tsPassed.hours(), DEC);
  Serial.print(':');
  Serial.print(tsPassed.minutes(), DEC);
  Serial.print(':');
  Serial.print(tsPassed.seconds(), DEC);
  
  Serial.println("");
}

//=========================================
//
//=========================================
void delayWithUpdate(uint32_t parDelay){
  uint32_t started=millis();
  while (millis()< started+parDelay){
    sevseg.refreshDisplay();
  }
}
//=========================
//=========================
void setup(){


   /// Konfigurieren Sie diese Zeilen  <  <  <  <  ------------------------------
  byte numDigits = 4;
  bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
  byte hardwareConfig = COMMON_ANODE; // See README.md for options
  bool updateWithDelays = false; // Default 'false' is Recommended
  bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
  bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected
  
  Serial.begin(9600);
  Serial.println(tsPassed.days());
  
  if (! rtcDS.begin()) {
        Serial.println("Couldn't find RTC");
        while (1);
  }
      
  delay(5000);    
  
 rtcDS.adjust(DateTime(tsPassed.days()));   
  
  sevseg.begin(hardwareConfig, numDigits, s7segDigitPins, s7segSegmentPins, resistorsOnSegments,
  updateWithDelays, leadingZeros, disableDecPoint);
  
  sevseg.setBrightness(100);
  
  
  
  sevseg.setNumber(1234, 1);
  delayWithUpdate(1000);
  
  
  sevseg.setNumber(8888, 1);
  delayWithUpdate(1000);
  
}
//=========================
//=========================
void loop(){
  sevseg.refreshDisplay();
  
  DateTime now = rtcDS.now();
  
  tsPassed = now-dtBegin;
  
  static uint32_t nextReportMillis=0;
  static uint16_t prevDaysPassed=0;
  
  if (tsPassed.days() != prevDaysPassed){
    prevDaysPassed=tsPassed.days();
    sevseg.setNumber(prevDaysPassed, 0);
  }

  
  sevseg.refreshDisplay();
  
  if (millis()>nextReportMillis){
    //===PRINT SOME INFO HERE
    showInfo(now);
    nextReportMillis=millis()+5000;
  }
  
}

Hallo Mineirin,
ich bekomme mit deinem Code folgende Fehler:

no matching function for call to 'SevSeg::SevSeg()'

und zusätzlich

no matching function for call to 'SevSeg::begin(byte&, byte&, byte [4], byte [8], bool&, bool&, bool&, bool&)'

Bitte posten Sie Ihren vollständigen Code hier.

RV mineirin

Ich habe diesen Code übernommen:

#include <RTClib.h>
#include <SevSeg.h>

#define S7SEG_PIN_DIG1  7
#define S7SEG_PIN_DIG2  8
#define S7SEG_PIN_DIG3  9
#define S7SEG_PIN_DIG4  10
#define S7SEG_PIN_A 2
#define S7SEG_PIN_B 3
#define S7SEG_PIN_C 4
#define S7SEG_PIN_D 5
#define S7SEG_PIN_E 11
#define S7SEG_PIN_F 12
#define S7SEG_PIN_G 13
#define S7SEG_PIN_DECIMAL 6

byte s7segDigitPins[] = { S7SEG_PIN_DIG1, S7SEG_PIN_DIG2, S7SEG_PIN_DIG3, S7SEG_PIN_DIG4 };
byte s7segSegmentPins[] = { S7SEG_PIN_A, S7SEG_PIN_B, S7SEG_PIN_C, S7SEG_PIN_D, S7SEG_PIN_E, S7SEG_PIN_F ,S7SEG_PIN_G, S7SEG_PIN_DECIMAL };

SevSeg sevseg ; 
RTC_DS3231 rtcDS;

DateTime dtBegin (2017, 11, 11, 0, 0, 0);
TimeSpan tsPassed;

void showInfo(const DateTime& dt) {
  Serial.print("NOW:");
  
  Serial.print(dt.year(), DEC);
  Serial.print('/');
  Serial.print(dt.month(), DEC);
  Serial.print('/');
  Serial.print(dt.day(), DEC);
  Serial.print(' ');
  Serial.print(dt.hour(), DEC);
  Serial.print(':');
  Serial.print(dt.minute(), DEC);
  Serial.print(':');
  Serial.print(dt.second(), DEC);
  
  Serial.print("\tPASSED:");
  Serial.print(tsPassed.days(), DEC);
  Serial.print(' ');
  Serial.print(tsPassed.hours(), DEC);
  Serial.print(':');
  Serial.print(tsPassed.minutes(), DEC);
  Serial.print(':');
  Serial.print(tsPassed.seconds(), DEC);
  
  Serial.println("");
}

//=========================================
//
//=========================================
void delayWithUpdate(uint32_t parDelay){
  uint32_t started=millis();
  while (millis()< started+parDelay){
    sevseg.refreshDisplay();
  }
}
//=========================
//=========================
void setup(){


   /// Konfigurieren Sie diese Zeilen  <  <  <  <  ------------------------------
  byte numDigits = 4;
  bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
  byte hardwareConfig = COMMON_ANODE; // See README.md for options
  bool updateWithDelays = false; // Default 'false' is Recommended
  bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
  bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected
  
  Serial.begin(9600);
  Serial.println(tsPassed.days());
  
  if (! rtcDS.begin()) {
        Serial.println("Couldn't find RTC");
        while (1);
  }
      
  delay(5000);    
  
 rtcDS.adjust(DateTime(tsPassed.days()));   
  
  sevseg.begin(hardwareConfig, numDigits, s7segDigitPins, s7segSegmentPins, resistorsOnSegments,
  updateWithDelays, leadingZeros, disableDecPoint);
  
  sevseg.setBrightness(100);
  
  
  
  sevseg.setNumber(1234, 1);
  delayWithUpdate(1000);
  
  
  sevseg.setNumber(8888, 1);
  delayWithUpdate(1000);
  
}
//=========================
//=========================
void loop(){
  sevseg.refreshDisplay();
  
  DateTime now = rtcDS.now();
  
  tsPassed = now-dtBegin;
  
  static uint32_t nextReportMillis=0;
  static uint16_t prevDaysPassed=0;
  
  if (tsPassed.days() != prevDaysPassed){
    prevDaysPassed=tsPassed.days();
    sevseg.setNumber(prevDaysPassed, 0);
  }

  
  sevseg.refreshDisplay();
  
  if (millis()>nextReportMillis){
    //===PRINT SOME INFO HERE
    showInfo(now);
    nextReportMillis=millis()+5000;
  }
  
}

Olá
Eu testei seu sketch aqui e compilou corretamente.

Minha IDE é 1.8.9

Eu eu sei as bibliotecas:

RTClib-master version=1.2.2

e

SevSeg-3.6.1
https://www.arduino.cc/reference/en/libraries/sevseg/

RV mineirin

deepL erkennt Portugiesisch und übersetzt wie folgt:

Olá, mandei traduzir a última máquina de correio do português para o alemão.
:slight_smile:

Ops, sorry

Hallo
Ich habe Ihre Skizze hier getestet und richtig zusammengestellt.

Meine IDE ist 1.8.9

Ich kenne die Bibliotheken:

RTClib-Master-Version = 1.2.2

arduinolibraries.info 1
RTClib 1
Eine Abzweigung von Jeelabs fantastischer RTC-Bibliothek

und

SevSeg-3.6.1