Hallo liebe Community,
ich habe vor einiger Zeit ein Diorama gebaut, in dem eine Uhr eingebaut ist.
Außerdem ist die eingebaute Beleuchtung über eine Fernbedienung an/ausschaltbar.
Das Problem: Das ganze is bisher am PC mit USB angeschlossen. Aber wenn der Strom mal weg is muss ich den Code komplett neu laden damit die Zeit wieder stimmt.
Ich bin komplett raus aus der Programmierung und würde die Zeit gern per Fernbedienung stellen damit ich das alles nicht mehr über PC laufen lassen muss.
Kann mir bitte jemand helfen?
Nachfolgend der bestehende Code.
#include "RTClib.h"
#include <Wire.h>
#include <IRremote.h> // Die IRRemote- Library
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0);
int ledPin = 2;
byte ledState = 0;
int RECV_PIN = 9; // An Pin 9 werden die Empfangenen Daten vom
// Infrarotsensor gesammelt
IRrecv irrecv(RECV_PIN); // Ein IRrecv- Objekt wird definiert,
decode_results results; // Die dekodierten Daten, werden in Results
// gespeichert
RTC_DS3231 rtc;
void setup() {
Serial.begin (9600);
irrecv.enableIRIn(); // Der Infrarotsensor wird hier initialisiert
pinMode(ledPin, OUTPUT);
Serial.println(RECV_PIN);
u8g2.begin();
if (! rtc.begin()) {
Serial.print("RTC nicht gefunden");
Serial.flush();
abort();
}
//if (rtc.lostPower()) {
//Serial.print("Zeit muss neu eingestellt werden");
// Wenn die Zeit auf einem neuen Gerät oder nach einem Stromausfall eingestellt werden muss,
//setzt die folgende Zeile die RTC auf das Datum und die Uhrzeit, zu der dieser Sketch erstellt wurde
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//}
}
void loop()
{
u8g2.firstPage();
do {
DateTime now = rtc.now();
u8g2.setFont(u8g2_font_crox4hb_tn);
u8g2.setCursor(15, 20);
ausgabe(now.day());
u8g2.print('.');
ausgabe(now.month());
u8g2.print('.');
u8g2.print(now.year(), DEC);
u8g2.setFont(u8g2_font_helvR24_tn);
u8g2.setCursor(2, 60);
ausgabe(now.hour());
u8g2.print(':');
ausgabe(now.minute());
u8g2.print(':');
ausgabe(now.second());
} while ( u8g2.nextPage() );
// Code für die LEDs
if (irrecv.decode()){
Serial.println(irrecv.results.value);
//unsigned int value = results.value;
if (irrecv.results.value == 16726215){
ledState = !ledState;
digitalWrite(ledPin, !digitalRead(ledPin));
}
irrecv.resume();
}
}
//wenn die Stunde einstellig ist, setzt dies eine 0 an erster Stelle
void ausgabe(uint8_t zahl){
if (zahl < 10) {
u8g2.print('0');
}
u8g2.print(zahl, DEC);
}