Wenn es dir evtl. Hilft, ich habe noch den DFPlayer mini an den Arduino Mega angeschlossen um zu schauen, ob es am Uno liegt.
Jedoch ist es auch bim Mega eine Lotterie, ob der Ton abgespielt wird oder nicht.
Code Mega:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"
#include <RTClib.h> // Hinzufügen der RTC-Bibliothek
//#include <Servo.h>
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <ShiftRegister74HC595.h>
//START eingefügt von slave webby
#define SDI_M 8 //SDI-Leitung für das Monat-Display
#define SCL_M 12 //SCL-Leitung für das Monat-Display
#define LOAD_M 3 //KLOAD-Leitung für das Monat-Display
#define SDI_T 5 //SDI-Leitung für das Tag-Display
#define SCL_T 6 //SCL-Leitung für das Tag-Display
#define LOAD_T 7//KLOAD-Leitung für das Tag-Display
#define SDI_C 33 //SDI-Leitung für das Tag-Display
#define SCL_C 31 //SCL-Leitung für das Tag-Display
#define LOAD_C 29//KLOAD-Leitung für das Tag-Display
//Definition für die Ansteuerung der Zahlen
uint8_t digits[] = {B11000000, //0
B11111001, //1
B10100100, //2
B10110000, //3
B10011001, //4
B10010010, //5
B10000010, //6
B11111000, //7
B10000000, //8
B10010000, //9
B11111111 //10
};
//END eingefügt von slave webby
// Use pins 2 and 3 to communicate with DFPlayer Mini
static const uint8_t PIN_MP3_TX = 11; // Connects to module's RX GELB
static const uint8_t PIN_MP3_RX = 10; // Connects to module's TX GRÜN
SoftwareSerial softwareSerial(PIN_MP3_RX, PIN_MP3_TX);
// Create the Player object
DFRobotDFPlayerMini player;
Adafruit_7segment matrix = Adafruit_7segment();
//START eingefügt von slave webby
ShiftRegister74HC595 monatDisplay(2, SDI_M, SCL_M, LOAD_M);
ShiftRegister74HC595 tagDisplay(2, SDI_T, SCL_T, LOAD_T);
ShiftRegister74HC595 tmpDisplay(2, SDI_C, SCL_C, LOAD_C);
//END eingefügt von slave webby
int ausZaehler = 0;
const int TMP36 = A0;
const int DegreeAnode = 35;
const int DegreeKathode = 34;
float sensorValue = 0;
int temperature = 0;
int minuten = 0;
int stunden = 0;
int sekunden = 0;
const int setPin = 22;
const int downPin = 24;
const int upPin = 26;
const int setPinHigh = 23;
const int downPinHigh = 25;
const int upPinHigh = 27;
const int busy = 13;
const int intPin = 2; //Pin für den Interrupt der RTC
const int led1 = 53;
const int led2 = 52;
const int led3 = 51;
const int led4 = 50;
const int led5 = 49;
const int led6 = 48;
const int led7 = 47;
const int led8 = 46;
const int led9 = 45;
const int led10 = 44;
const int led11 = 43;
const int led12 = 42;
int lastSekAnzeigeF;
int SekAnzeigeF;
int SekAnzeigeZahler = 0;
int minAnzeigeZahler = 0;
int minAnzeigeF;
int StdAnzeigeF;
int ledCounter = 0;
int sekunde = 0;
int lastSekunde = 0;
int fuenfer = 0;
bool blinker = true;
const int VCC = 29;
int second = 0;
int newMillis = 0;
int setCount = 0;
int upCount = 0;
int downCount = 0;
int setPinState = 0;
int upPinState = 0;
int downPinState = 0;
int NewsetPinState = 0;
int NewupPinState = 0;
int NewdownPinState = 0;
int setClock = 0;
int upClock = 0;
int downClock = 0;
int minClock = 0;
int stdClock = 0;
int tagClock = 0;
int monClock = 0;
//const int signal = 11;
int stdClockSchwelle1 = 10;
int stdClockSchwelle2 = 2 * stdClockSchwelle1;
int tagClockSchwelle1 = stdClockSchwelle1;
int tagClockSchwelle2 = 2 * stdClockSchwelle1;
int monClockSchwelle1 = stdClockSchwelle1;
int monClockSchwelle2 = 2 * stdClockSchwelle1;
int minClockSchwelle1 = stdClockSchwelle1;
int minClockSchwelle2 = 2 * stdClockSchwelle1;
int hour = 0;
int lasthour = 0;
int setSchwelle = 30;
int upSchwelle = 2;
int downSchwelle = 2;
//Servo myservo; // create servo object to control a servo
boolean drawDots = false;
///START eingefügt von slave webby
volatile boolean newTime = false; //Variable zum Signalisieren, das eine neue Zeit geholt werden muss
int tag = 0; //Variable für den Tag
int mon = 0; //Variable für den Monat
//END eingefügt von slave webby
RTC_DS1307 rtc; // Erstellen eines RTC-Objekts
void setup() {
Serial.begin(9600);
softwareSerial.begin(9600);
matrix.begin(0x70);
pinMode(setPin, INPUT_PULLUP);
pinMode(downPin, INPUT_PULLUP);
pinMode(upPin, INPUT_PULLUP);
pinMode(setPinHigh, OUTPUT);
pinMode(upPinHigh, OUTPUT);
pinMode(downPinHigh, OUTPUT);
pinMode(VCC, OUTPUT);
digitalWrite(VCC, HIGH);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
pinMode(led10, OUTPUT);
pinMode(led11, OUTPUT);
pinMode(led12, OUTPUT);
//pinMode(signal, OUTPUT);
//digitalWrite(signal, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
digitalWrite(led11, LOW);
digitalWrite(led12, LOW);
pinMode(TMP36, INPUT);
pinMode(DegreeAnode, OUTPUT);
//myservo.attach(9);
//myservo.write(0);
pinMode(busy, INPUT);
digitalWrite(DegreeAnode, HIGH);
// Umschreiben der digitalen Pins zu GND-Pins
digitalWrite(setPinHigh, LOW);
digitalWrite(downPinHigh, LOW);
digitalWrite(upPinHigh, LOW);
rtc.begin(); // RTC initialisieren
/// START eingefügt von slave webby
//RTC Interrupt-Pin konfigurieren und Interrupt-Routine festlegen
rtc.writeSqwPinMode(DS1307_SquareWave1HZ);
pinMode(intPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(intPin), secInterrupt, FALLING);
/// END eingefügt von slave webby
// Überprüfen, ob das RTC-Modul gestartet wurde
rtc.adjust(DateTime(rtc.now().year(), rtc.now().month(), rtc.now().day(), rtc.now().hour(), rtc.now().minute(), 0));
setPinState = digitalRead(setPin); //int NewsetPinState;
upPinState = digitalRead(upPin); //NewupPinState
downPinState = digitalRead(downPin); //NewdownPinState
//Beim Start die RTC lesen und die Zeit anzeigen
// kuckuck();
updateTimeVariables();
tmpLesen();
tmpAnzeigen();
Anzeigen();
tagAnzeigen();
monAnzeigen();
}
void loop() {
// setPinState = digitalRead(setPin);//int NewsetPinState;
// upPinState = digitalRead(upPin);//NewupPinState
// downPinState = digitalRead(downPin);//NewdownPinState
NewsetPinState = digitalRead(setPin);
NewupPinState = digitalRead(upPin);
NewdownPinState = digitalRead(downPin);
//Serial.println("bin 1");
/*
// SetPin Zustand prüfen und SetZähler hochzählen
if (NewsetPinState != setPinState) {
setCount++;
}
*/
//Checking button 1
if (NewsetPinState != setPinState){
setClock++;
if(setClock > setSchwelle){
setClock = 0;
setCount++;
}
}
else{
setClock = 0;
}
//Serial.println("bin 2");
NewsetPinState = digitalRead(setPin);
NewupPinState = digitalRead(upPin);
NewdownPinState = digitalRead(downPin);
// Prüft den Zustand vom SetZähler
if (setCount == 1 ) {
if (NewupPinState != upPinState) {
upClock++;
if (upClock > upSchwelle){
upClock = 0;
minuten++;
UhrenLogik();
// RTC-Zeit einstellen
rtc.adjust(DateTime(rtc.now().year(), rtc.now().month(), rtc.now().day(), rtc.now().hour(), minuten, rtc.now().second()));
minAnzeigeZahler = rtc.now().minute();
}
}
else{
upClock = 0;
}
if (NewdownPinState != downPinState) {
downClock++;
if(downClock > downSchwelle){
downClock = 0;
minuten--;
UhrenLogik();
// RTC-Zeit einstellen
rtc.adjust(DateTime(rtc.now().year(), rtc.now().month(), rtc.now().day(), rtc.now().hour(), minuten, rtc.now().second()));
minAnzeigeZahler = rtc.now().minute();
}
}
else{
downClock = 0;
}
}
// Serial.println("bin 3");
if (setCount == 2 ) {
if (NewupPinState != upPinState) {
upClock++;
if (upClock > upSchwelle){
upClock = 0;
stunden++;
UhrenLogik();
// RTC-Zeit einstellen
rtc.adjust(DateTime(rtc.now().year(), rtc.now().month(), rtc.now().day(), stunden, rtc.now().minute(), rtc.now().second()));
lasthour = stunden;
}
}
else{
upClock = 0;
}
if (NewdownPinState != downPinState) {
downClock++;
if(downClock > downSchwelle){
downClock = 0;
stunden--;
UhrenLogik();
// RTC-Zeit einstellen
rtc.adjust(DateTime(rtc.now().year(), rtc.now().month(), rtc.now().day(), stunden, rtc.now().minute(), rtc.now().second()));
lasthour = stunden;
}
}
else{
downClock = 0;
}
}
//Serial.println("bin 4");
if (setCount == 5) {
setCount = 0;
}
if (setCount == 3 ) {
if (NewupPinState != upPinState) {
upClock++;
if (upClock > upSchwelle){
upClock = 0;
mon++;
monatsLogik();
// RTC-Zeit einstellen
rtc.adjust(DateTime(rtc.now().year(), mon, rtc.now().day(), rtc.now().hour(), rtc.now().minute(), rtc.now().second()));
}
}
else{
upClock = 0;
}
if (NewdownPinState != downPinState) {
downClock++;
if(downClock > downSchwelle){
downClock = 0;
mon--;
monatsLogik();
// RTC-Zeit einstellen
rtc.adjust(DateTime(rtc.now().year(), mon, rtc.now().day(), rtc.now().hour(), rtc.now().minute(), rtc.now().second()));
}
}
else{
downClock = 0;
}
}
if (setCount == 4 ) {
if (NewupPinState != upPinState) {
upClock++;
if (upClock > upSchwelle){
upClock = 0;
tag++;
monatsLogik();
// RTC-Zeit einstellen
rtc.adjust(DateTime(rtc.now().year(), rtc.now().month(), tag, rtc.now().hour(), rtc.now().minute(), rtc.now().second()));
}
}
else{
upClock = 0;
}
if (NewdownPinState != downPinState) {
downClock++;
if(downClock > downSchwelle){
downClock = 0;
tag--;
monatsLogik();
// RTC-Zeit einstellen
rtc.adjust(DateTime(rtc.now().year(), rtc.now().month(), tag, rtc.now().hour(), rtc.now().minute(), rtc.now().second()));
}
}
else{
downClock = 0;
}
}
//Serial.println("bin 4");
if (setCount == 5) {
setCount = 0;
}
//Serial.println("bin 5");
// Aktualisiere die Zeitwerte
// updateTimeVariables();
if(setCount == 0){
Anzeigen();
}
if (setCount == 1){
stdAnzeigen();
monAnzeigen();
tagAnzeigen();
/*
if (drawDots){
minAnzeigen();
}
else {
deleteMinAnzeige();
}
*/
minClock++;
if (minClock <= minClockSchwelle1){
minAnzeigen();
}
if(minClock >= minClockSchwelle1 ) {
deleteMinAnzeige();
}
if (minClock > minClockSchwelle2){
minClock = 0;
}
}
else {
minClock = 0;
}
// Serial.println("bin 6");
if (setCount == 2){
minAnzeigen();
monAnzeigen();
tagAnzeigen();
/*
if (drawDots){
stdAnzeigen();
}
else {
deleteStdAnzeige();
}
*/
stdClock++;
if (stdClock <= stdClockSchwelle1){
stdAnzeigen();
}
if (stdClock >= stdClockSchwelle1) {
deleteStdAnzeige();
}
if (stdClock >= stdClockSchwelle2){
stdClock = 0;
}
}
else {
stdClock = 0;
}
if (setCount == 3){
stdAnzeigen();
tagAnzeigen();
minAnzeigen();
/*
if (drawDots){
monAnzeigen();
}
else {
deleteMonAnzeigen();
}
*/
monClock++;
if (monClock <= monClockSchwelle1){
monAnzeigen();
}
if (monClock >= monClockSchwelle1) {
deleteMonAnzeigen();
}
if (monClock >= monClockSchwelle2){
monClock = 0;
}
}
else {
monClock = 0;
}
if (setCount == 4){
stdAnzeigen();
monAnzeigen();
minAnzeigen();
/*
if (drawDots){
tagAnzeigen();
}
else {
deleteTagAnzeigen();
}
*/
tagClock++;
if (tagClock <= tagClockSchwelle1){
tagAnzeigen();
}
if (tagClock > tagClockSchwelle1) {
deleteTagAnzeigen();
}
if (tagClock >= tagClockSchwelle2){
tagClock = 0;
}
}
else {
tagClock = 0;
}
//Serial.println("bin 7");
if (sekunden % 2 == 0) {
drawDots = false;
}
else {
drawDots = true;
}
matrix.drawColon(drawDots); // schaltet den Doppelpunkt ein
matrix.writeDisplay();
//Serial.println("bin 8");
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// prüft ob Mission Kuckuck gestartet werden soll
/*
// Prüfe, ob eine neue Stunde erreicht wurde
if (rtc.now().minute() == 0) {
if(rtc.now().second() == 0){
if (hour != lasthour){
lasthour = hour;
if(hour > 6){
Serial.println("über if");
kuckuck(); // Führe die Funktion kuckuck aus
}
if(hour == 0){
Serial.println("über if");
kuckuck(); // Führe die Funktion kuckuck aus
}
}}}
*/
///START eingefügt von slave webby newTime wird einmal pro Sekunde per Interrupt auf true gesetzt, dann werden die Funktionen in dieser if-Abfrage ausgeführt
if (newTime) {
sekunden++;
//displayTimeVariables();
newTime = false; //newTime wird wieder auf false gesetzt, damit diese Funktionen nicht mehr ausgeführt werden, bis der Interrupt es wieder auf true setzt
}
if (sekunden == 60){
sekunden = 0;
minuten++;
updateTimeVariables(); //Diese Funktion wird dann einmal am Tagesbeginn aufgerufen
tmpLesen();
//Serial.println(temperature);
}
if (minuten == 60){
minuten = 0;
stunden++;
}
if (stunden == 24){
stunden = 0;
}
tmpAnzeigen();
ledSekundenzeiger(); //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//displayAllVariables();
if (sekunden == 0 && minuten == 0){
if (stunden != lasthour){
lasthour = stunden;
if(stunden == 0){
kuckuck();
//digitalWrite(signal, HIGH);
// Serial.println("1");
delay(50);
}
if(stunden > 6){
kuckuck();
// Serial.println("1");
//digitalWrite(signal, HIGH);
}
}
}
else {
//digitalWrite(signal, LOW);
// Serial.println("0");
}
delay(50);
///END eingefügt von slave webby
}
// Ende LOOP-Teil------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/// START eingefügt von slave webby: diese Funktion wird ausgeführt, wenn die RTC einen Sekunden-Interrupt auslöst
void secInterrupt() {
newTime = true;
}
/// END eingefügt von slave webby
//überprüft die Zustände der Schalter------------------------------------------------------------------------------------------------------------
void checkSwitch() {
setPinState = digitalRead(setPin);
upPinState = digitalRead(upPin);
downPinState = digitalRead(downPin);
}
//START geändert von slave webby: Diese Funktion muss nur im setup und beim Beginn eines neuen Tages aufgrufen werden
void updateTimeVariables() {
DateTime now = rtc.now();
delay(100);
minuten = now.minute();
stunden = now.hour();
sekunden = now.second();
tag = now.day();
mon = now.month();
}
// Kuckuck sound wird ausgeführt--------------------------------------------------------------------
void kuckuck() {
if (player.begin(softwareSerial)) {
Serial.println("OK");
// Set volume to maximum (0 to 30).
player.volume(20);
// Play the first MP3 file on the SD card
player.play(0001);
}
}
void servoKuckuck(){/*
int busyState = digitalRead(busy);
if (busyState == LOW){
myservo.write(180);
delay(10);
}
else{
myservo.write(0);
delay(10);
}*/
}
void Anzeigen(){
matrix.writeDigitNum(4, minuten % 10); // digit ganz rechts
matrix.writeDigitNum(3, int(minuten / 10)); // digit 2. von rechts
matrix.drawColon(drawDots);
matrix.writeDigitNum(1, stunden % 10); // digit 2. von links
matrix.writeDigitNum(0, int(stunden / 10)); // digit ganz links
matrix.writeDisplay();
int mon2 = mon % 10;
int mon1 = (mon/10) % 10;
uint8_t monatsAnzeige[] = {digits[mon2], digits[mon1]};
monatDisplay.setAll(monatsAnzeige);
//delay(200);
int tag2 = tag % 10;
int tag1 = (tag/10) % 10;
uint8_t tagAnzeige[] = {digits[tag2], digits[tag1]};
tagDisplay.setAll(tagAnzeige);
//delay(200);
}
void minAnzeigen(){
matrix.writeDigitNum(4, minuten % 10); // digit ganz rechts
matrix.writeDigitNum(3, int(minuten / 10)); // digit 2. von rechts
matrix.drawColon(drawDots);
matrix.writeDisplay();
}
void stdAnzeigen(){
matrix.drawColon(drawDots);
matrix.writeDigitNum(1, stunden % 10); // digit 2. von links
matrix.writeDigitNum(0, int(stunden / 10)); // digit ganz links
matrix.writeDisplay();
}
/*
void zeitAnzeigen() {
matrix.writeDigitNum(4, minuten % 10); // digit ganz rechts
matrix.writeDigitNum(3, int(minuten / 10)); // digit 2. von rechts
matrix.drawColon(drawDots);
matrix.writeDigitNum(1, stunden % 10); // digit 2. von links
matrix.writeDigitNum(0, int(stunden / 10)); // digit ganz links
matrix.writeDisplay();
delay(100);
}
*/
void tmpLesen(){
//if (rtc.now().second() == 3){
sensorValue = analogRead(TMP36);
temperature = sensorValue * 0.235 - 54.118;
//}
}
void monAnzeigen(){
int mon2 = mon % 10;
int mon1 = (mon/10) % 10;
uint8_t monatsAnzeige[] = {digits[mon2], digits[mon1]};
monatDisplay.setAll(monatsAnzeige);
//delay(200);
}
void tagAnzeigen(){
int tag2 = tag % 10;
int tag1 = (tag/10) % 10;
uint8_t tagAnzeige[] = {digits[tag2], digits[tag1]};
tagDisplay.setAll(tagAnzeige);
//delay(200);
}
void tmpAnzeigen(){
int tmp2 = temperature % 10;
int tmp1 = (temperature/10) % 10;
uint8_t tmpAnzeige[] = {digits[tmp2], digits[tmp1]};
tmpDisplay.setAll(tmpAnzeige);
//delay(200);
}
void deleteStdAnzeige(){
matrix.writeDigitRaw(1, 0);
matrix.writeDigitRaw(0, 0);
matrix.writeDisplay();
}
void deleteMinAnzeige(){
matrix.writeDigitRaw(4, 0);
matrix.writeDigitRaw(3, 0);
matrix.writeDisplay();
}
void deleteMonAnzeigen(){
uint8_t numberToPrint2[] = {digits[10], digits[10]};//wähle das zehnte von uint8_t
monatDisplay.setAll(numberToPrint2);
}
void deleteTagAnzeigen(){
uint8_t numberToPrint2[] = {digits[10], digits[10]};//wähle das zehnte von uint8_t
tagDisplay.setAll(numberToPrint2);
}
void UhrenLogik(){
if (minuten > 59){
minuten = 0;
}
if (minuten < 0){
minuten = 59;
}
if (stunden > 23){
stunden = 0;
}
if (stunden < 0){
stunden = 23;
}
}
void doppelPunkt() {
Serial.print("DrawDots: ");
Serial.println(drawDots);
matrix.drawColon(drawDots); // schaltet den Doppelpunkt ein
matrix.writeDisplay();
//delay(200);
if(drawDots == true){
drawDots = false;
}
else drawDots = true;
}
void displayAllVariables(){
Serial.print("Second:");
Serial.print(second);
Serial.print(" ");
Serial.print("setCount:");
Serial.print(setCount);
Serial.print(" ");
Serial.print("upCount:");
Serial.print(upCount);
Serial.print(" ");
Serial.print("downCount:");
Serial.print(downCount);
Serial.print(" ");
Serial.print("SetpinState:");
Serial.print(setPinState);
Serial.print(" ");
Serial.print("UpPinState:");
Serial.print(upPinState);
Serial.print(" ");
Serial.print("downPinState:");
Serial.print(downPinState);
Serial.print(" ");
Serial.print("NewsetPinState:");
Serial.print(NewsetPinState);
Serial.print(" ");
Serial.print("NewUpPinState:");
Serial.print(NewupPinState);
Serial.print(" ");
Serial.print("NewDownPinState:");
Serial.print(NewdownPinState);
Serial.print(" ");
Serial.print("setClock:");
Serial.print(setClock);
Serial.print(" ");
Serial.print("upClock:");
Serial.print(upClock);
Serial.print(" ");
Serial.print("downClock:");
Serial.print(downClock);
Serial.print(" ");
Serial.print("minClock:");
Serial.print(minClock);
Serial.print(" ");
Serial.print("stdClock:");
Serial.print(stdClock);
Serial.print(" ");
Serial.print("DrawDots:");
Serial.println(drawDots);
}
void displayTimeVariables() {
Serial.print("Tag: ");
Serial.print(rtc.now().day());
Serial.print(" Monat: ");
Serial.print(rtc.now().month());
Serial.print(" Jahr: ");
Serial.print(rtc.now().year());
Serial.print(" Stunden: ");
Serial.print(rtc.now().hour());
Serial.print(" Minuten: ");
Serial.print(rtc.now().minute());
Serial.print(" Sekunden: ");
Serial.println(sekunden);
}
void ledSekundenzeiger(){
// sekunde = rtc.now().second();
/*
if (sekunde != lastSekunde){
lastSekunde = sekunde;
if (sekunde % 5 == 0){
ledCounter++;
if (ledCounter != 12){
if(sekunde / ledCounter != 5){
ledCounter--;
}
}
if (ledCounter == 12){
if (sekunde > 3 && sekunde != 59){
ledCounter--;
}
}
}
}
if (sekunde >= 5 && sekunde < 10){
//Serial.println("l1");
digitalWrite(led1, HIGH);
}
else if (sekunde >= 10 && sekunde < 15){
// Serial.println("l2");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
}
else if (sekunde >= 15 && sekunde < 20){
// Serial.println("l3");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
}
else if (sekunde >= 20 && sekunde < 25){
// Serial.println("l4");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
}
else if (sekunde >= 25 && sekunde < 30){
// Serial.println("l5");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
}
else if (sekunde >= 30 && sekunde < 35){
// Serial.println("l6");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
}
else if (sekunde >= 35 && sekunde < 40){
// Serial.println("l7");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
}
else if (sekunde >= 40 && sekunde < 45){
// Serial.println("l8");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
}
else if (sekunde >= 45 && sekunde < 50){
// Serial.println("l9");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led9, HIGH);
}
else if (sekunde >= 50 && sekunde < 55){
// Serial.println("l10");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led9, HIGH);
digitalWrite(led10, HIGH);
}
else if (sekunde >= 55 && sekunde < 60){
// Serial.println("l11");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led9, HIGH);
digitalWrite(led10, HIGH);
digitalWrite(led11, HIGH);
}
else if (sekunde >= 0 && sekunde < 2){
//Serial.println("l12");
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led9, HIGH);
digitalWrite(led10, HIGH);
digitalWrite(led11, HIGH);
digitalWrite(led12, HIGH);
}
if (sekunde == 2){
ledCounter = 0;
fuenfer = 0;
}
if (sekunde >= 2 && sekunde < 5){
// Serial.println("l0");
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
digitalWrite(led11, LOW);
digitalWrite(led12, LOW);
}
*/
//Variante nur eine LED------------------------------------------------------------------
sekunde = rtc.now().second();
if (sekunde != lastSekunde){
lastSekunde = sekunde;
if (sekunde % 5 == 0){
ledCounter++;
if (ledCounter != 12){
if(sekunde / ledCounter != 5){
ledCounter--;
}
}
if (ledCounter == 12){
if (sekunde > 3 && sekunde != 59){
ledCounter--;
}
}
}
}
if (sekunde % 5 == 0){
if (ledCounter == 1){
//Serial.println("l1");
digitalWrite(led1, HIGH);
}
else if (ledCounter == 2){
// Serial.println("l2");
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
}
else if (ledCounter == 3){
// Serial.println("l3");
digitalWrite(led3, HIGH);
digitalWrite(led2, LOW);
}
else if (ledCounter == 4){
// Serial.println("l4");
digitalWrite(led4, HIGH);
digitalWrite(led3, LOW);
}
else if (ledCounter == 5){
// Serial.println("l5");
digitalWrite(led5, HIGH);
digitalWrite(led4, LOW);
}
else if (ledCounter == 6){
// Serial.println("l6");
digitalWrite(led6, HIGH);
digitalWrite(led5, LOW);
}
else if (ledCounter == 7){
// Serial.println("l7");
digitalWrite(led7, HIGH);
// digitalWrite(led6, LOW);
}
else if (ledCounter == 8){
// Serial.println("l8");
digitalWrite(led8, HIGH);
// digitalWrite(led7, LOW);
}
else if (ledCounter == 9){
// Serial.println("l9");
digitalWrite(led9, HIGH);
digitalWrite(led8, LOW);
}
else if (ledCounter == 10){
// Serial.println("l10");
digitalWrite(led10, HIGH);
digitalWrite(led9, LOW);
}
else if (ledCounter == 11){
// Serial.println("l11");
digitalWrite(led11, HIGH);
digitalWrite(led10, LOW);
}
else if (ledCounter > 11){
// Serial.println("l12");
digitalWrite(led11, LOW);
digitalWrite(led12, HIGH);
}
}
else if (sekunde % 10 == 2 || sekunde % 10 == 7){
//Serial.println("alle aus");
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
digitalWrite(led11, LOW);
digitalWrite(led12, LOW);
}
if (sekunde == 2){
ledCounter = 0;
}
if (ledCounter == 0){
// Serial.println("l0");
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
digitalWrite(led11, LOW);
digitalWrite(led12, LOW);
}
}
void monatsLogik(){
if (mon > 12){
mon = 1;
}
if (mon < 0){
mon = 12;
}
if (rtc.now().year() % 4 != 0){//kein schaltjahr
switch (rtc.now().month()){// monate:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
case 2:
if (tag > 29){
tag = 1;
}
if (tag <= 0){
tag = 29;
}
break;
case 3:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
case 4:
if (tag > 30){
tag = 1;
}
if (tag <= 0){
tag = 30;
}
break;
case 5:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
case 6:
if (tag > 30){
tag = 1;
}
if (tag <= 0){
tag = 30;
}
break;
case 7:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
case 8:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
case 9:
if (tag > 30){
tag = 1;
}
if (tag <= 0){
tag = 30;
}
break;
case 10:
if (tag >= 31){
tag = 1;
}
if (tag < 0){
tag = 31;
}
break;
case 11:
if (tag > 30){
tag = 1;
}
if (tag <= 0){
tag = 30;
}
break;
case 12:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
}
}
if (rtc.now().year() % 4 == 0){
switch (rtc.now().month()){// monate:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
case 2:
if (tag > 29){
tag = 1;
}
if (tag <= 0){
tag = 29;
}
break;
case 3:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
case 4:
if (tag > 30){
tag = 1;
}
if (tag <= 0){
tag = 30;
}
break;
case 5:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
case 6:
if (tag > 30){
tag = 1;
}
if (tag <= 0){
tag = 30;
}
break;
case 7:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
case 8:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
case 9:
if (tag > 30){
tag = 1;
}
if (tag <= 0){
tag = 30;
}
break;
case 10:
if (tag >= 31){
tag = 1;
}
if (tag < 0){
tag = 31;
}
break;
case 11:
if (tag > 30){
tag = 1;
}
if (tag <= 0){
tag = 30;
}
break;
case 12:
if (tag > 31){
tag = 1;
}
if (tag <= 0){
tag = 31;
}
break;
}}
}
Code Uno:
#include <Servo.h>
//#include "SoftwareSerial.h"
//#include "DFRobotDFPlayerMini.h"
Servo myservo; // create servo object to control a servo
/*
// Use pins 2 and 3 to communicate with DFPlayer Mini
static const uint8_t PIN_MP3_TX = 5; // Connects to module's RX GELB
static const uint8_t PIN_MP3_RX = 6; // Connects to module's TX GRÜN
SoftwareSerial softwareSerial(PIN_MP3_RX, PIN_MP3_TX);
//SoftwareSerial mySerial(10, 11); // RX, TX
*/
// Create the Player object
//DFRobotDFPlayerMini player;
const int busy = 8;
const int signal = 7;
//int signalState = 0;
//int busyState = 0;
//char message;
void setup() {
//softwareSerial.begin(9600);
myservo.attach(9);
myservo.write(0);
pinMode(busy, INPUT);
// pinMode(signal, INPUT);
Serial.begin(9600);
//mySerial.begin(9600);
//kuckuck();
Serial.println("bin start");
}
void loop() {
/*
busyState = digitalRead(busy);
//Serial.println("bin 1");
if (mySerial.available()){
//Serial.println("bin 2");
message = mySerial.read();
if (message == '1'){
delay (50);
Serial.println("bin 2.3");
kuckuck();
Serial.println("bin 2.4");
// Serial.println("bin 3");
delay(50);
}
else if (message == '0')
{
myservo.write(0);
//Serial.print("n");
delay(25);
}
// Serial.println("bin 4");
}
if (busyState == 0){
myservo.write(180);
// Serial.println("bin 5.6");
}
else if (busyState == 1)
{
myservo.write(0);
// Serial.println("bin 5.7");
//Serial.print("p");
}
// Serial.println("bin 6");
delay(20);
*/
//signalState = digitalRead(signal);
busyState = digitalRead(busy);
/*
if (signalState == 1){
kuckuck();
delay(10);
myservo.write(180);
}*/
if (busyState == 0){
myservo.write(180);
}
else if (busyState == 1)
{
myservo.write(0);
}
Serial.print("busy: ");
Serial.print(busyState);
Serial.print(" signal: ");
Serial.println(signalState);
}
void kuckuck() {/*
if (player.begin(softwareSerial)) {
Serial.println("OK");
// Set volume to maximum (0 to 30).
player.volume(20);
// Play the first MP3 file on the SD card
player.play(0001);
} else {
Serial.println("Connecting to DFPlayer Mini failed!");
} */
}