Habe ein Projekt nachgebaut und bekomme Fehler

Hallo zusammen. Ich habe da ein Problem. Ich habe ein Projekt nachgebaut und wollte es auf einem Arduino übertragen.
http://www.kh-gps.de/ardu_clock.htm
Und zwar die Version mit RTC.

// Decodierung und Sprechen der Datums- und Zeitinformationen von DS1307
// DFPlayer an #4,#5; Busy-Signal an Port #2

 #include <string.h>
 #include <ctype.h>
 #include <DFPlayer_Mini_Mp3.h>
 #include <avr/pgmspace.h>
 #include <SoftwareSerial.h>;
 #include <Wire.h>    
 #include "RTClib.h"  

 RTC_DS1307 RTC;      

SoftwareSerial mySerial(4, 5); // RX, TX  MP3-Player Module

int zeit, time_h, time_m, time_s, date_d, date_m, date_y;
int wochentag;
int ledPin = 13;                  // LED test pin
String DOW;
boolean stringComplete = false;

int buusyPin = 2;// buusyPin = 2; // sound player busy
int bsy = 0;
int z = 0;

///////////////////////////////////////////////////////// 
void setup()
{
  Wire.begin();  // Initialisiere I2C  
  RTC.begin();   // Initialisiere RTC

  Serial.begin(9600); // Kommunikation
  Serial.println("WAITING FOR CLOCK DATA!");
  delay(100);

  pinMode(14, INPUT_PULLUP); // A0 as input
  pinMode(15, INPUT_PULLUP); // A1 as input
  pinMode(16, INPUT_PULLUP); // A2 as input   
  pinMode(17, INPUT_PULLUP); // A3 as input    

   mySerial.begin (9600);       // data rate sound module  
   mp3_set_serial (&mySerial);	// softwareSerial for MP3-Player 
   delay(100);
   mp3_play (91);               // speak startmessage
   delay(3000);
//   mp3_play (94);               // speak info
//   delay(3000);
}

/////////////////////////////////////////////////////////// 
void loop()
{
  int sensorVal1 = digitalRead(14);  
  int sensorVal2 = digitalRead(15);  
  int sensorVal3 = digitalRead(16);  
  int sensorVal4 = digitalRead(17);  

  DateTime now=RTC.now();   // aktuelle Zeit abrufen
  show_time_and_date(now);  // Datum und Uhrzeit ausgeben 
  speak_time_and_date(); 
//  delay(10000);             // 10 Sekunden warten bis zur nächsten Ausgabe
}
  
////////////////////////////////////////////////////////////////
// Datum und Uhrzeit ausgeben
void show_time_and_date(DateTime datetime)
{

// Wochentag
//  Serial.print(get_day_of_week(datetime.dayOfWeek()));
//  Serial.print(", ");

  wochentag=(datetime.dayOfWeek()); // Wochentag
  date_d=(datetime.day());          // Tag
  date_m=(datetime.month());        // Monat
  date_y=(datetime.year());         // Jahr
  time_h=(datetime.hour());         // Stunde
  time_m=(datetime.minute());       // Minute
  time_s=(datetime.second());       // Sekunde

  day_of_week();               // Wochentag 
  Serial.print(DOW);
  Serial.print(", ");
  
  if(datetime.day()<10)Serial.print(0);
  Serial.print(date_d);
  Serial.print(".");
  if(datetime.month()<10)Serial.print(0);
  Serial.print(date_m);  
  Serial.print(".");
  Serial.println(date_y);

  if(datetime.hour()<10)Serial.print(0);
  Serial.print(time_h);
  Serial.print(":");
  if(datetime.minute()<10)Serial.print(0);
  Serial.print(time_m);
  Serial.print(":");
  if(datetime.second()<10)Serial.print(0);
  Serial.println(time_s);
}

/////////////////////////////////////////////////////////////
void speak_time_and_date()
 {

// speak day
 mp3_play(98);                // "Heute ist"
 waitend();
 speak_dow();                 // <Wochentag> 
 mp3_play(99);                // "der"  
 waitend();
 speak_day();                 // <Tag> 
 speak_month();               // <Monat>
 mp3_play(120);               // "Zwanzig"  
 waitend();
 speak_year();                // <Jahr>

// speak time
 mp3_play(95);                // "Die Uhrzeit ist"
 waitend();
 zeit = time_h;
 speak_time();                // <Stunde>
 mp3_play(90);                // "Uhr"
 waitend();
 zeit = time_m;
 speak_time();                //  <Minute>
 mp3_play(97);                // "und"
 waitend();
 zeit = time_s;
 speak_time();                // <Sekunden>
 mp3_play(96);                // "Sekunden"
 waitend();
 delay(10000);
 }

/////////////////////////////////////////////////////////////
void day_of_week()
  {
  if(wochentag==0) { DOW = "So"; } else
  if(wochentag==1) { DOW = "Mo"; } else
  if(wochentag==2) { DOW = "Di"; } else
  if(wochentag==3) { DOW = "Mi"; } else
  if(wochentag==4) { DOW = "Do"; } else
  if(wochentag==5) { DOW = "Fr"; } else
  if(wochentag==6) { DOW = "Sa"; } 
  }
  
/////////////////////////////////////////////////////////////////////
void speak_time()
{
mp3_play(zeit+100);
waitend();
}

///////////////////////////////////////////////////////////////////////////////
void speak_day()
{
mp3_play(date_d+200); 
waitend();
}

///////////////////////////////////////////////////////////////////////////////
void speak_month()
{
mp3_play(date_m+240); 
waitend();  // 1-12  
}

///////////////////////////////////////////////////////////////////////////////
void speak_year()
{
mp3_play(date_y-1900); 
waitend();  // <59
}

/////////////////////////////////////////////////////////////////
void speak_dow()
{
mp3_play(wochentag+80); 
waitend(); 
}

//////////////////////////////////////////////////////////////////////////////
void waitend()
{   
  int bsyflag = 0;
  for ( z = 0; z <= 10000; z++) {
    bsy = digitalRead(buusyPin);
    delay(50);
    if (bsyflag == 1 && bsy == 1) {
      break;
    }
    if (bsy == 0) {
      bsyflag = 1;
    }
  }  
}

Die Fehlermeldung lautet bei mir.

exit status 1
no matching function for call to 'mp3_set_serial(SoftwareSerial*)'

Kann mir da bitte jemand weiterhelfen.
Die Mail Adresse des Verfassers scheint es nicht mehr zu geben.

Danke

Reimund

Stelle bitte Deinen Sketch in Codetags (</>) hier ein und ebenso die komplette Fehlermeldung.

Gruß Tommy

Dein Link wird wegen "malware" von meinem Chrome-Browser geblockt.

Dieser Funktionsaufruf passt nicht zur verwendeten Library.
Immer erstmal eins der mitgelieferten Beispiele einer Bibliothek ausprobieren...

Dann hast Du an dem Sketch gefummelt.
Das Original "DS1307_DFP_WAITEND_1.ino" kompiliert mit Warnungen, aber durch.

Also musst Du Deinen Code liefern.
Und welche Libs Du verwendest.

Ich habe den original Sketch genommen und nichts dran geändert. Ebenfalls die beigelieferten libs

Gut, da Du den nicht zeigen willst, dann ist das der aus dem .zip:

// Decodierung und Sprechen der Datums- und Zeitinformationen von DS1307
// DFPlayer an #4,#5; Busy-Signal an Port #2

 #include <string.h>
 #include <ctype.h>
 #include <DFPlayer_Mini_Mp3.h>
 #include <avr/pgmspace.h>
 #include <SoftwareSerial.h>;
 #include <Wire.h>    
 #include "RTClib.h"  

 RTC_DS1307 RTC;      

SoftwareSerial mySerial(4, 5); // RX, TX  MP3-Player Module

int zeit, time_h, time_m, time_s, date_d, date_m, date_y;
int wochentag;
int ledPin = 13;                  // LED test pin
String DOW;
boolean stringComplete = false;

int buusyPin = 2;// buusyPin = 2; // sound player busy
int bsy = 0;
int z = 0;

///////////////////////////////////////////////////////// 
void setup()
{
  Wire.begin();  // Initialisiere I2C  
  RTC.begin();   // Initialisiere RTC

  Serial.begin(9600); // Kommunikation
  Serial.println("WAITING FOR CLOCK DATA!");
  delay(100);

  pinMode(14, INPUT_PULLUP); // A0 as input
  pinMode(15, INPUT_PULLUP); // A1 as input
  pinMode(16, INPUT_PULLUP); // A2 as input   
  pinMode(17, INPUT_PULLUP); // A3 as input    

   mySerial.begin (9600);       // data rate sound module  
   mp3_set_serial (&mySerial);	// softwareSerial for MP3-Player 
   delay(100);
   mp3_play (91);               // speak startmessage
   delay(3000);
//   mp3_play (94);               // speak info
//   delay(3000);
}

/////////////////////////////////////////////////////////// 
void loop()
{
  int sensorVal1 = digitalRead(14);  
  int sensorVal2 = digitalRead(15);  
  int sensorVal3 = digitalRead(16);  
  int sensorVal4 = digitalRead(17);  

  DateTime now=RTC.now();   // aktuelle Zeit abrufen
  show_time_and_date(now);  // Datum und Uhrzeit ausgeben 
  speak_time_and_date(); 
//  delay(10000);             // 10 Sekunden warten bis zur nächsten Ausgabe
}
  
////////////////////////////////////////////////////////////////
// Datum und Uhrzeit ausgeben
void show_time_and_date(DateTime datetime)
{

// Wochentag
//  Serial.print(get_day_of_week(datetime.dayOfWeek()));
//  Serial.print(", ");

  wochentag=(datetime.dayOfWeek()); // Wochentag
  date_d=(datetime.day());          // Tag
  date_m=(datetime.month());        // Monat
  date_y=(datetime.year());         // Jahr
  time_h=(datetime.hour());         // Stunde
  time_m=(datetime.minute());       // Minute
  time_s=(datetime.second());       // Sekunde

  day_of_week();               // Wochentag 
  Serial.print(DOW);
  Serial.print(", ");
  
  if(datetime.day()<10)Serial.print(0);
  Serial.print(date_d);
  Serial.print(".");
  if(datetime.month()<10)Serial.print(0);
  Serial.print(date_m);  
  Serial.print(".");
  Serial.println(date_y);

  if(datetime.hour()<10)Serial.print(0);
  Serial.print(time_h);
  Serial.print(":");
  if(datetime.minute()<10)Serial.print(0);
  Serial.print(time_m);
  Serial.print(":");
  if(datetime.second()<10)Serial.print(0);
  Serial.println(time_s);
}

/////////////////////////////////////////////////////////////
void speak_time_and_date()
 {

// speak day
 mp3_play(98);                // "Heute ist"
 waitend();
 speak_dow();                 // <Wochentag> 
 mp3_play(99);                // "der"  
 waitend();
 speak_day();                 // <Tag> 
 speak_month();               // <Monat>
 mp3_play(120);               // "Zwanzig"  
 waitend();
 speak_year();                // <Jahr>

// speak time
 mp3_play(95);                // "Die Uhrzeit ist"
 waitend();
 zeit = time_h;
 speak_time();                // <Stunde>
 mp3_play(90);                // "Uhr"
 waitend();
 zeit = time_m;
 speak_time();                //  <Minute>
 mp3_play(97);                // "und"
 waitend();
 zeit = time_s;
 speak_time();                // <Sekunden>
 mp3_play(96);                // "Sekunden"
 waitend();
 delay(10000);
 }

/////////////////////////////////////////////////////////////
void day_of_week()
  {
  if(wochentag==0) { DOW = "So"; } else
  if(wochentag==1) { DOW = "Mo"; } else
  if(wochentag==2) { DOW = "Di"; } else
  if(wochentag==3) { DOW = "Mi"; } else
  if(wochentag==4) { DOW = "Do"; } else
  if(wochentag==5) { DOW = "Fr"; } else
  if(wochentag==6) { DOW = "Sa"; } 
  }
  
/////////////////////////////////////////////////////////////////////
void speak_time()
{
mp3_play(zeit+100);
waitend();
}

///////////////////////////////////////////////////////////////////////////////
void speak_day()
{
mp3_play(date_d+200); 
waitend();
}

///////////////////////////////////////////////////////////////////////////////
void speak_month()
{
mp3_play(date_m+240); 
waitend();  // 1-12  
}

///////////////////////////////////////////////////////////////////////////////
void speak_year()
{
mp3_play(date_y-1900); 
waitend();  // <59
}

/////////////////////////////////////////////////////////////////
void speak_dow()
{
mp3_play(wochentag+80); 
waitend(); 
}

//////////////////////////////////////////////////////////////////////////////
void waitend()
{   
  int bsyflag = 0;
  for ( z = 0; z <= 10000; z++) {
    bsy = digitalRead(buusyPin);
    delay(50);
    if (bsyflag == 1 && bsy == 1) {
      break;
    }
    if (bsy == 0) {
      bsyflag = 1;
    }
  }  
}

Die RTC.lib ist die von Paul Stoffregen adafruit:

Die mini von DFROBOT:

Warnungen gibt es wegen einem Semikolon hinter dem SoftwareSerial include und der nicht verwendeten Variablen.
Einen Fehler gibt es bei der RTC/Wochentage:
wochentag=(datetime.dayOfWeek()); // Wochentag
Das hat sich geändert und heisst jetzt:
wochentag=(datetime.dayOfTheWeek()); // Wochentag

ansonsten gehht der Sketch ganz klar auf einem MEGA durch.

/tmp/arduino_modified_sketch_578789/DS1307_DFP_WAITEND_1.ino:8:29: warning: extra tokens at end of #include directive
  #include <SoftwareSerial.h>;
                             ^
/tmp/arduino_modified_sketch_578789/DS1307_DFP_WAITEND_1.ino: In function 'void loop()':
/tmp/arduino_modified_sketch_578789/DS1307_DFP_WAITEND_1.ino:53:7: warning: unused variable 'sensorVal1' [-Wunused-variable]
   int sensorVal1 = digitalRead(14);
       ^~~~~~~~~~
/tmp/arduino_modified_sketch_578789/DS1307_DFP_WAITEND_1.ino:54:7: warning: unused variable 'sensorVal2' [-Wunused-variable]
   int sensorVal2 = digitalRead(15);
       ^~~~~~~~~~
/tmp/arduino_modified_sketch_578789/DS1307_DFP_WAITEND_1.ino:55:7: warning: unused variable 'sensorVal3' [-Wunused-variable]
   int sensorVal3 = digitalRead(16);
       ^~~~~~~~~~
/tmp/arduino_modified_sketch_578789/DS1307_DFP_WAITEND_1.ino:56:7: warning: unused variable 'sensorVal4' [-Wunused-variable]
   int sensorVal4 = digitalRead(17);
       ^~~~~~~~~~
Compiling libraries...

[....]
Der Sketch verwendet 9564 Bytes (3%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 623 Bytes (7%) des dynamischen Speichers, 7569 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.

Was für ein Board hast Du eingestellt?

Die Library zeigt

void mp3_set_serial (HardwareSerial &theSerial);

Kannst ja mal aus deinem Zeiger eine Referenz machen (das & weglassen ):

   mp3_set_serial (mySerial);	// softwareSerial for MP3-Player 

Wenn das nicht reicht, müsste man darüber nachdenken, warum der Library nur ein HardwareSerial recht ist.

Wo kommt das her?
Der Ursprunscode compiliert hier - bis auf das mit der RTC veränderte - ganz normal durch...
Dann kann ich nicht helfen.

Danke für die Hilfe. Im Moment benutze ich einen Nodemcu.
FOlgendes habe ich geändert.

wochentag=(datetime.dayOfTheWeek()); // Wochentag
mp3_set_serial (mySerial);

jetzt läuft es durch. Mal sehen ob die Sprachausgabe auch funktioniert.

Und mal sehen, wie ich es hinbekomme, dass zu jeder Stunde die Sprachausgabe erfolgt.

Dann habe ich dieses Projekt dann fertig..
Beim zweiten Projekt habe ich leider auch eine Fehlermeldung. Dass versuche ich erst mal selber.

Sprachausgabe funktioniert. Jedoch habe ich noch folgendes Problem.
Es erfolgt jede Minute die Sprache mit Datum und Uhrzeit, obwohl alle Schalter offen sind. Das sollte laut Beschreibung nicht sein, sondern nur die Zeitausgabe. Wie kann ich das beheben und wie kann ich statt 1 Minute Sprachausgabe auf 60 Minuten erhöhen. Finde das im Sketch nicht. Danke

Ich sehe keine keine Zeitsteuerung in speak_time_and_date() außer

delay(10000);

Und auch das würde ich nicht Zeitsteuerung nennen, denn es setzt voraus, dass sonst nirgends ein nennenswertes delay steht.

Da ist auch nichts drin was durch die Schalter beeinflusst wird. Die Zustände werden eingelesen und das war es dann. Das ist immer das Problem wenn Projekte die ins Internet gestellt werden nicht fertig sind...

Bleiben also 2 Möglichkeiten:

  1. Den Ersteller fragen ob es einen kompletten Code gibt
  2. Den vorhandenen Code selbst (mit oder ohne Hilfe) erweitern

Gruß, Jürgen

Wegen dem Problem der Ausgabe nur zu jeder Stunde:
Es gibt im Sketch die Variable time_m. Dann braucht man noch einen Merker das die Sprachausgabe erfolgt ist. Nur wenn die time_m == 0 und der Merker 0 ist, die Sprachausgabe starten und einen Merker setzen das es ausgegeben wurde. Dann z.B. wenn time_m == 1 ist den Merker wieder löschen. Damit erfolgt die Sprachausgabe dann nur 1 mal pro Stunde, aber nicht bei 0 Sekunden. Ich würde die Ansage der Sekunden einfach entfernen. Sonst wird es ein wenig komplizierter.

Gruß, Jürgen

OT: Wie kann ich denn Text durchstreichen?

OT: Wie kann ich denn Text durchstreichen?

image

Ist leider nicht sogar im Vorschau-Fenster rechts sichtbar.
Auch html-Style mit spitzen Klammern < s > geht. Am Ende dann <\s>

Wobei [ s ] und < s > beim zitieren leider verloren gehen, bzw. sich verändern....

Die dritte Variante:
Einzig html-Style bleibt dabei unverändert erhalten

 Einzig ~~html-Style~~ bleibt dabei unverändert erhalten 

Klasse! Danke!
Werde dann nicht die 2 ~ nutzen. :slight_smile:

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