Beim Hochfahren entweder durch stromlos schalten, nach Sketch laden oder Resettaste fährt der Mega hoch ohne das Setup auszuführen, die loop wird direkt gestartet. Hab ich da aus versehen irgendwo was verstellt an den Einstellungen ohne es zu wissen?
Hatte das heute Nachmittag schonmal, hat sich aber wieder gelegt, jetzt schon wieder.
Alle Module laufen über 5V Stepupregler, Versorgungsspannung ist 9V Netzteil. Direkt von der Netzteilbuchse Mega zweige ich die 9V ab für den Spannungsregler. Ich nutze nur die 3,3V für DHT22.
Hab gerade getauscht gegen 6V Netzteil, alles wieder gut, danach wieder das vorherige 9V Netzteil, alles wieder OK.
Den Sketch hab ich nicht neu übertragen.
Hat da vielleicht jemand eine Erklärung dafür?
Normalerweise wird doch erst das Setup ausgeführt, und dann die loop.
Die Ausführung des Setup ist mir deshalb wichtig, da dort einige Variablen aus dem Eeprom gelesen werden (Stromausfall absicherung). Ist heute das erste mal aufgetreten, vorher hatte ich das noch nie.
Der Mega ist ein original Arduino, kein Chinakracher.
Dieter
Du irrst!
kaum.
Im Setup werden zb. Funksteckdosen je nach Tageszeit eingeschaltet was auf dem Display beim Setup angezeigt wird. Bei den direkten Starts wird das übersprungen (nicht angezeigt) und direkt die loop gestartet.
Das ist auch daran ersichtlich das die Anzeige die in der loop generiert wird direkt angezeigt wird. Ob die Dosen eingeschaltet sind oder nicht wird auch auf dem Display ausgegeben in der loop. Und die sind aus (obwohl sie eingeschaltet sein sollten), das deckt sich mit dem überspringen des Setup. Mich hat das auch verwundert, da das eigentlich gar nicht sein kann.
Ohne Deinen Sketch kann das keiner beurteilen. So lange, wie Du dabei bist, solltest Du das wissen.
Gruß Tommy
Kannst du haben, hat bisher immer funktioniert, funktioniert auch jetzt. Wie gesagt ist heute das erstemal aufgetreten.
[code]
//Arduino Mega Anschlussbelegung
//5V Spannungsversorgung Module über ext. Spannungsregler.
//3,3V Spannungsversorgung Module über Mega 3,3V Pin
//I2C: SDA Pin 20, SCL Pin 21
//RTC DS3231: I2C VCC 5V
//DHT22 Pin 8 //VCC 3,3V damit geht der DHT22 genauer.
//IR Send: Pin 9 IR ueber Transistor geschaltet. VCC 5V
//IR receive: Pin 2, VCC 5V
//GPS TX an seriell1 Pin 19 VCC 5V
//RC 433Mhz Sender: Pin 44, VCC VIN (9V) hoehere Sendeleistung.
//Arduino Every an Mega seriell2, 16 TX2, 17 RX2, VCC 5V
//Arduino Every, VCC 5V
//RC 433Mhz Empfaenger RXB6, Pin 2, VCC 5V
//Funk Aussentemp. Fuehler Pearl NC-7159-675 (433Mhz)
// Tastenbelegung:
// "*" Uhr stellen Hand
// "#" Schaltpunkte setzen
// "A" Schaltfunktion Klima LG ein / aus
// "B" Klima IR, ein / aus
// "C" Vent RC, ein / aus
// "D" IR Signal rec.
// "0" Schalttemperatur setzen
// "1" GPS Zeit sync.
// "2" Test Steckdose A, Ein / Aus
// "3" Test Steckdosen B/C/D, Ein / Aus
// "4" Innentemp. min max Speicher anzeigen
// "5" LG aus
// "6" Aussentemp. min max Speicher anzeigen
// "7" Innentempspeicher reset
// "8" Programmversion anzeigen
// "9" Aussentempspeicher reset
//verwendete lib`s:
#include <Keypad_I2C.h> //https://github.com/joeyoung/arduino_keypads/tree/master/Keypad_I2C
#include <Wire.h> //kommunikation I2C
#include "RTClib.h" // DS3231 https://github.com/adafruit/RTClib
#include <LiquidCrystal_I2C.h> //Display
#include <IRremote.h> //senden/empfangen von IR-Signalen //analysir.com
#include <RCSwitch.h> //433MHZ Funk, Achtung RCSwitch.cpp wurden Protokoll 3, 4, 7 angepasst
#include <DHT.h> //Tempsensor DHT22
#include <TinyGPS++.h> //GPS Empfaenger
#include "TimeLib.h" //Um Wochentag aus Datum zu erhalten
#include "uEEPROMLib.h" //für Zugriff auf RTC Eeprom
//Eeprom DS323:1
uEEPROMLib eeprom(0x57);
//Software serial fuer GPS:
TinyGPSPlus gps;
//Keypad:
#define I2CADDR 0x38 // I2C Adresse PCF8574 Keypad 0x38, 0x20 für Versuchsschaltung
#define Rs_pin 0
#define Rw_pin 1
#define En_pin 2
#define BACKLIGHT_PIN 3
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
//LCD 20x4:
#define lcd_addr 0x27
LiquidCrystal_I2C lcd (lcd_addr, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
//GPS Variablen fuer Time Lib:
byte Second;
byte SZ=0; //Winterz. 0, Sommerz. 1 Eeprom Adr. 3
//RTC DS3231:
RTC_DS3231 rtc;
//Keypad
const byte numRows = 4; //number of rows on the keypad
const byte numCols = 4; //number of columns on the keypad
//keymap defines the key pressed according to the row and columns just as appears on the keypad
char keymap[numRows][numCols] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
byte rowPins[numRows] = { 0, 1, 2, 3 }; //Rows 0 to 3 //if you modify your pins you should modify this too
byte colPins[numCols] = { 4, 5, 6, 7 }; //Columns 0 to 3
Keypad_I2C myKeypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols, I2CADDR);
//Variablen Zeiteinstellung / Schaltpunkte / Schalttemp.
int i1, i2, i3, i4;
char c1, c2, c3, c4;
char keypressed;
//Schaltpunkte
byte A_hour = 23; //Schaltpunkt A Stunde ueber # einstellbar
byte A_minute = 0; //Schaltpunkt A Minute ueber # einstellbar
byte B_hour = 7; //Schaltpunkt B Stunde ueber # einstellbar
byte B_minute = 0; //Schaltpunkt B Minute ueber # einstellbar
byte C_hour = 22; //Schaltpunkt C Stunde ueber # einstellbar
byte C_minute = 0; //Schaltpunkt C Minute ueber # einstellbar
byte D_hour = 6; //Schaltpunkt D Stunde, Festzeit
byte D_minute = 30; //Schaltpunkt D Minute, Festzeit
byte hourset = 2; //GPS Zeitsetzen, Sommerzeit, Winterzeit
byte minuteset = 1; //GPS Zeitsetzen, Festzeit
byte schaltstunde = 0; // LG wiedereinschalten
byte schaltminute = 0; // LG wiedereinschalten
//Variablen
byte AlarmIsActiveLG = 1; // LG schalten ab Temp. Eeprom Adr. 0
byte LG_onoff = 0; // Hilfsvariable Schaltzustand LG Eeprom Adr. 1
byte LG_hilfsvar = 0; // Hilfsvariable für Schaltübergang Eeprom Adr. 2
byte irtest = 0; // Hilfsvariable fuer IR Test Taste B Eeprom Adr. 4
bool rctest = 0; // Hilfsvariable fuer 433MHz Sendetest Taste C
byte schalt_temp = 180; // Schalttemperatur fuer LG Eeprom Adr. 7
byte temp = 181; // Innentemp fuer Neustart damit Klima nicht direkt einschaltet
bool steckdose_A = 0; // Hilfsvariable fuer Schalttest Steckdose, Taste 2
bool steckdose_B_C = 0; // Hilfsvariable fuer Schalttest Steckdose Taste 3
bool steckdosen = 0; // Anzeige * Steckdosen 1 = an
//Sendevariablen Funksteckdosen A - D
unsigned long A1on = 8484016;//100000010111010010110000
unsigned long A2on = 8791616;//100001100010011001000000
unsigned long A1off = 8592016;//100000110001101010010000
unsigned long A2off = 8752416;//100001011000110100100000
unsigned long B1on = 8913780;//100010000000001101110100
unsigned long B2on = 9108276;//100010101111101100110100
unsigned long B1off = 8993956;//100010010011110010100100
unsigned long B2off = 9224468;//100011001100000100010100
unsigned long C1on = 8913788;//100010000000001101111100
unsigned long C2on = 9108284;//100010101111101100111100
unsigned long C1off = 8993964;//100010010011110010101100
unsigned long C2off = 9224476;//100011001100000100011100
unsigned long D1on = 8993954;//100010010011110010100010
unsigned long D2on = 9224466;//100011001100000100010010
unsigned long D1off = 8913778;//100010000000001101110010
unsigned long D2off = 9108274;//100010101111101100110010
//ir receive / send
IRsend irsend; //Pin 9
#define maxLen 60 //800
#define rxPinIR 2 //pin D2
volatile unsigned int irBuffer[maxLen]; //stores timings - volatile because changed by ISR
volatile unsigned int x = 0; //Pointer thru irBuffer - volatile because changed by ISR
//RC Sender/Empfaenger 433Mhz
RCSwitch mySwitch = RCSwitch();
//Serieller Empfang (433Mhz) der Aussentemp. auf Serial2 von Arduino Every
unsigned int Atemp = 0; // Wert Aussentempgeber 0 - 500
static unsigned int Etemp = 0; // Tempwert für max Abweichung +/- 3°
static unsigned int Ftemp = 0; // Tempwert für Anzeige
byte vorz = 4; // Vorzeichen fuer - Temperatur (2) bei + (4), default 4
bool gelesen = 0; // 1 wenn Wert aus Every gelesen
byte LGoff = 2; // 4 LG ausschalten vom Ofen
unsigned int Atempmax = 0; // min max Speicher aussen "0" -51,2°
unsigned int Atempmin = 1024; // min max Speicher innen, Startwert bei Neustart "1024" +51,2°
unsigned int Itempmax = 0; // min max Speicher "0"
unsigned int Itempmin = 400; // min max Speicher, Startwert bei Neustart "400"
//Temp sensor DHT22
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float t;
//Aktualisierung der Innentemp.
unsigned long previousMillis = 0;
const long interval = 30000; //alle 30sec.
void setup() {
Serial.begin(115200); // nicht langsamer wegen IR Signal senden
Serial1.begin(9600); // GPS
Serial2.begin(9600); // Arduino Mini Pro
myKeypad.begin(); // Tastatur
lcd.begin(20, 4); // LCD
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.home();
rtc.begin();
mySwitch.enableTransmit(44); //RC Senden
pinMode(18, INPUT); //RC Empfaenger ??
dht.begin(); //Temperaturfuehler
attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//set up ISR for receiving IR signal
//Eeprom abfragen nach Stromausfall / Neustart:
AlarmIsActiveLG = (eeprom.eeprom_read(0));
LG_onoff = (eeprom.eeprom_read(1));
LG_hilfsvar = (eeprom.eeprom_read(2));
irtest = (eeprom.eeprom_read(4));
SZ = (eeprom.eeprom_read(3));
schalt_temp = (eeprom.eeprom_read(7));
// Steckdosen einschalten bzw. ausschalten nach Neustart / Stromausfall:
DateTime jetzt = rtc.now(); //Zeitaktualisieren
if (jetzt.hour() >= D_hour && jetzt.minute() >= D_minute && jetzt.hour() < A_hour && jetzt.minute() >= A_minute) {
mySwitch.setProtocol(7);
mySwitch.send(A1on, 24); //A1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2on, 24); //A2on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B1on, 24); //B1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2on, 24); //B2on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1on, 24); //C1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2on, 24); //C2on
steckdosen = 1;
lcd.setCursor(0, 3);
lcd.print("Steckdosen ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
// Steckdosen ausschalten
if (jetzt.hour() == A_hour && jetzt.minute() >= A_minute ||
jetzt.hour() >= 0 && jetzt.minute() >= 0 && jetzt.hour() < D_hour && jetzt.minute() >= 0) {
mySwitch.setProtocol(7);
mySwitch.send(A1off, 24); //A1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2off, 24); //A2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B1off, 24); //B1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2off, 24); //B2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1off, 24); //C1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2off, 24); //C2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(D1off, 24); //D1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(D2off, 24); //D2off
steckdosen = 0;
lcd.setCursor(0, 3);
lcd.print("Steckdosen aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
// Every reset:
pinMode(6, OUTPUT); // Pin 6 Mega, für Every reset
digitalWrite(6, HIGH);
delay(200);
digitalWrite(6, LOW);
}
void loop() {
//Abfrage Tastatur:
while (keypressed == NO_KEY) { //As long as no key is pressed we keep showing the date and time
keypressed = myKeypad.getKey();
//Abfrage RTC-Zeit:
//myRTC.updateTime(); //Zeitaktualisieren
DateTime jetzt = rtc.now();
//Innentempfuehlerabfrage:
float t = dht.readTemperature();
if ((round(t*10)) > 0 && (round(t*10)) <= 500){
temp = (round(t*10));
}
//Signal von Mini Pro von Aussentempfuehler:
byte Atemp1 = 0;
byte Atemp2 = 0;
unsigned int Btemp = 0;
gelesen = 0;
if (Serial2.available() > 0) {
Atemp1=(Serial2.read()); // Tempbyte 1
Atemp2=(Serial2.read()); // Tempbyte 2
vorz=(Serial2.read()); // 2 = minus, 4 = plus
if ((Serial2.read()) == 4 && LG_onoff == 1){
LGoff=4; // wenn LGoff = 4 Klima ausschalten
}
//absicherung das Atemp nicht größer +/- 50° ist
Btemp = int(Atemp1 << 8) + int(Atemp2);
if (Btemp <= 500 && vorz == 4){
Atemp = Btemp;
gelesen = 1;
}
if (Btemp <= 500 && vorz == 2){ // bei - Temp +1 da sonst 0,1° weniger angezeigt wird.
Atemp = (Btemp+1);
gelesen = 1;
}
}
//Schaltpunktabfragen:
//Klima einschalten wenn Temp. unter schalt_temp (18°C)
if (AlarmIsActiveLG == 1 && LG_onoff == 0 && temp < schalt_temp) {
LG_onoff = 1;
eeprom.eeprom_write(1, 1);
LGoff = 2;
ONsenden(); //send AC signal #ON @ 38kHz von SD
delay(1000);
ONsenden(); //send AC signal #ON @ 38kHz von SD
}
//Klima ausschalten 7:00 und AlarmIsActiveLG aus damit Ofen Zeit hat zu heizen.
if (AlarmIsActiveLG == 1 && LG_onoff == 1 && jetzt.hour() == B_hour && jetzt.minute() == B_minute) {
LG_onoff = 0;
eeprom.eeprom_write(1, 0);
LG_hilfsvar = 1;
eeprom.eeprom_write(2, 1);
AlarmIsActiveLG = 0;
eeprom.eeprom_write(0, 0);
OFFsenden(); //send AC signal #Off @ 38kHz von SD
delay(1000);
OFFsenden(); //send AC signal #Off @ 38kHz von SD
}
//Klima ausschalten wenn LG_onoff 1 und LGoff vom Ofen 4
if (LGoff == 4 && LG_onoff == 1 && AlarmIsActiveLG == 1) {
irtest = 0; //Hilfsvariable für Taste B
eeprom.eeprom_write(4, 0);
LG_onoff = 0;
eeprom.eeprom_write(1, 0);
LGoff = 2;
AlarmIsActiveLG = 0;
eeprom.eeprom_write(0, 0);
LG_hilfsvar = 1;
eeprom.eeprom_write(2, 1);
schaltstunde = (jetzt.hour()+1);
schaltminute = jetzt.minute();
OFFsenden(); //send AC signal #Off @ 38kHz von SD
delay(1000);
OFFsenden(); //send AC signal #Off @ 38kHz von SD
}
//AlarmIsActiveLG wieder ein 1h nach LG ausschalten
if (AlarmIsActiveLG == 0 && LG_hilfsvar == 1 && jetzt.hour() >= (B_hour + 1) && jetzt.minute() == B_minute ||
AlarmIsActiveLG == 0 && LG_hilfsvar == 1 && jetzt.hour() == schaltstunde && jetzt.minute() == schaltminute) {
AlarmIsActiveLG = 1;
eeprom.eeprom_write(0, 1);
LG_hilfsvar = 0;
eeprom.eeprom_write(2, 0);
}
//Funksteckdosen A,B,C einschalten.
if (jetzt.hour() == D_hour && jetzt.minute() == D_minute && jetzt.second() == 0) {
mySwitch.setProtocol(7);
mySwitch.send(A1on, 24); //A1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2on, 24); //A2on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B1on, 24); //B1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2on, 24); //B2on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1on, 24); //C1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2on, 24); //C2on
steckdosen = 1;
}
//Funksteckdose A,B,C,D ausschalten.
if (jetzt.hour() == A_hour && jetzt.minute() == A_minute && jetzt.second() == 0) {
mySwitch.setProtocol(7);
mySwitch.send(A1off, 24); //A1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2off, 24); //A2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B1off, 24); //B1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2off, 24); //B2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1off, 24); //C1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2off, 24); //C2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(D1off, 24); //D1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(D2off, 24); //D2off
steckdosen = 0;
}
//GPS Zeit setzen:
if (jetzt.hour() == (hourset+1) && jetzt.minute() == minuteset && jetzt.second() == 1 && SZ == 1) { //Umschaltung SZ/WZ 3:00
Second = 1;
gpstime(); //sprung in GPS Zeit Funktion
}
else
if (jetzt.hour() == hourset && jetzt.minute() == minuteset && jetzt.second() == 1 && SZ == 0) { //Umschaltung WZ/SZ 2:00
Second = 1;
gpstime(); //sprung in GPS Zeit Funktion
}
// Temperatur Innen/Aussen min/max Speicher:
//Innentemp. Speicher
if(temp > 0 && temp <= 500){
if (temp > Itempmax){
Itempmax=temp;
}
if (temp < Itempmin){
Itempmin=temp;
}
}
//Aussentemp. Speicher und Erzeugung von Ftemp. abgesichert zur Anzeige:
unsigned int z = 512;
unsigned int Ctemp = 0;
//+Bereich
if (vorz == 4 && gelesen == 1){
Ctemp = (z+Atemp);
Etemp = (z+Atemp);
if (Atempmin == 1024 && gelesen == 1){
Atempmin = Ctemp;
}
if (Atempmax == 0 && gelesen == 1){
Atempmax = Ctemp;
}
if (Ctemp < Atempmin && Ctemp > (Atempmin-30) && Ctemp < (Atempmax+30) && gelesen == 1){ // wenn Abweichung größer 3° Wert verwerfen
Atempmin = Ctemp;
}
if (Ctemp > Atempmax && Ctemp > (Atempmin-30) && Ctemp < (Atempmax+30) && gelesen == 1){ // wenn Abweichung größer 3° Wert verwerfen
Atempmax = Ctemp;
}
if (Ctemp > (Etemp-30) && Ctemp < (Etemp+30) && gelesen == 1){ // wenn Abweichung größer 3° Wert verwerfen
Ftemp = (Ctemp-z); //abgesichert für Anzeige
}
}
// - Bereich
if (vorz == 2 && gelesen == 1){
Ctemp = (z-Atemp);
Etemp = (z-Atemp);
if (Atempmin == 1024 && gelesen == 1){
Atempmin = Ctemp;
}
if (Atempmax == 0 && gelesen == 1){
Atempmax = Ctemp;
}
if (Ctemp < Atempmin && Ctemp > (Atempmin-30) && Ctemp < (Atempmax+30) && gelesen == 1){ // wenn Abweichung größer 3° Wert verwerfen
Atempmin = Ctemp;
}
if (Ctemp > Atempmax && Ctemp > (Atempmin-30) && Ctemp < (Atempmax+30) && gelesen == 1){ // wenn Abweichung größer 3° Wert verwerfen
Atempmax = Ctemp;
}
if (Ctemp > (Etemp-30) && Ctemp < (Etemp+30) && gelesen == 1){ // wenn Abweichung größer 3° Wert verwerfen
Ftemp = (z-Ctemp); //abgesichert für Anzeige
}
}
//LCD Anzeige von Zeit, Temperatur, Schaltpunkte:
static float Dtemp = 0.0;
Dtemp = Ftemp; //abgesicherter Temp.wert
static float itemp = 0.0;
itemp = temp;
//LCD Zeile 1
//Uhrzeit
lcd.setCursor(0, 0);
if (jetzt.hour() < 10) {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(1, 0);
}
lcd.print(jetzt.hour());
if (((jetzt.second()) % 2) == 0) { //blinkender Doppelpunkt
lcd.setCursor(2, 0);
lcd.print(":");
}
else {
lcd.setCursor(2, 0);
lcd.print(" ");
}
if (jetzt.minute() < 10) {
lcd.setCursor(3, 0);
lcd.print("0");
}
lcd.print(jetzt.minute());
lcd.setCursor(5, 0);
lcd.print(" ");
//Innentemp.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if(temp > 0 && temp <= 500){
if (temp < 100){
lcd.setCursor(6, 0);
lcd.print(" ");
lcd.setCursor(7, 0);
lcd.print((itemp/10),1);
}
else {
lcd.setCursor(6, 0);
lcd.print((itemp/10),1);
}
}
}
lcd.setCursor(10, 0);
lcd.print("\337C");
lcd.setCursor(12, 0);
lcd.print(" ");
//Aussentempanzeige
//Vorzeichen
if (vorz == 4 && gelesen == 1) {// +
lcd.setCursor(13, 0);
lcd.print(" ");
}
//+ Bereich
if (vorz == 4 && gelesen == 1){
if (Atemp < 100) {
lcd.setCursor(14, 0);
lcd.print(" ");
lcd.setCursor(15, 0);
lcd.print((Dtemp/10),1);
}
else {
lcd.setCursor(14, 0);
lcd.print((Dtemp/10),1);
}
}
//Vorzeichen
if (vorz == 2 && gelesen == 1){// -
if (Atemp < 100){
lcd.setCursor(13, 0);
lcd.print(" -");
}
else {
lcd.setCursor(13, 0);
lcd.print("-");
}
}
// - Bereich
if (vorz == 2 && gelesen == 1){
if (Atemp < 100){
lcd.setCursor(15, 0);
lcd.print((Dtemp/10),1);
}
else {
lcd.setCursor(14, 0);
lcd.print((Dtemp/10),1);
}
}
lcd.setCursor(18, 0);
lcd.print("\337C");
//LCD Zeile 2
//Schaltpunkt LG
lcd.setCursor(0, 1);
lcd.print("LG");
if (LG_onoff == 1){ //LG_onoff
lcd.setCursor(2, 1);
lcd.print(" * ");
}
else {
lcd.setCursor(2, 1);
lcd.print(" ");
}
if (AlarmIsActiveLG == 1) {
lcd.setCursor(5, 1);
lcd.print("ein ab ");
lcd.print(schalt_temp/10);
lcd.print("\337C ");
}
else {
lcd.setCursor(5, 1);
lcd.print(" ");
}
//Sommer/Winterzeit
if (SZ == 1){
lcd.setCursor(18, 1);
lcd.print("sz");
}
else {
lcd.setCursor(18, 1);
lcd.print("wz");
}
//LCD Zeile 3
//Schaltpunkt Steckdosen
lcd.setCursor(0, 2);
lcd.print("A,B,C ");
lcd.print(D_hour);
lcd.print("-");
if (A_hour < 10) {
lcd.print("0");
}
lcd.print(A_hour);
if (steckdosen == 1){ //Steckdosen ein
lcd.setCursor(6, 2);
lcd.print("*");
}
else {// Steckdosen aus
lcd.setCursor(6, 2);
lcd.print(" ");
}
//LCD Zeile 4 Tag-Datum bzw. Statusanzeige
// Wochentag / Datum
lcd.setCursor(0, 3);
switch(jetzt.dayOfTheWeek()) {
case 0: lcd.print("S\357ndag "); break;
case 1: lcd.print("Mondag "); break;
case 2: lcd.print("Tisdag "); break;
case 3: lcd.print("Onsdag "); break;
case 4: lcd.print("Thorsdag "); break;
case 5: lcd.print("Fredag "); break;
default: lcd.print("L\357rdag ");
}
lcd.print(" ");
lcd.print(jetzt.day());
lcd.print(".");
lcd.print(jetzt.month());
lcd.print(".");
lcd.print(jetzt.year()-2000);
lcd.print(" ");
}
//Zeit von Hand setzen:
if (keypressed == '*') {//As we everytime check the key pressed we only proceed to setup if we press "*"
Set_Time();
}
//Alarmzeiten setzen:
if (keypressed == '#') {
Alarm_Setup();
}
//Tastenbelegung weitere Funktionen:
//Taste "A" LG Klima schalten ein / aus:
if (keypressed == 'A') {
if (AlarmIsActiveLG == 1) {
(AlarmIsActiveLG = 0);
eeprom.eeprom_write(0, 0);
lcd.setCursor(0, 3);
lcd.print("LG aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
if (keypressed == 'A') {
if (AlarmIsActiveLG == 0) {
(AlarmIsActiveLG = 1);
eeprom.eeprom_write(0, 1);
lcd.setCursor(0, 3);
lcd.print("LG ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
//Taste "B" IR Test Klimaansteuerung LG An / Aus:
if (keypressed == 'B') {
if (irtest == 0 && LG_onoff == 0) {
irtest = 1;
eeprom.eeprom_write(4, 1);
LG_onoff = 1;
eeprom.eeprom_write(1, 1);
lcd.setCursor(0, 3);
lcd.print("Klima Ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
ONsenden(); //send AC signal #On @ 38kHz aus Eeprom
keypressed = NO_KEY;
}
else {
if (irtest == 1 && LG_onoff == 1) {
irtest = 0;
eeprom.eeprom_write(4, 0);
LG_onoff = 0;
eeprom.eeprom_write(1, 0);
lcd.setCursor(0, 3);
lcd.print("Klima Aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
OFFsenden(); //send AC signal #Off @ 38kHz aus Eeprom
keypressed = NO_KEY;
}
}
}
//Taste "C" Fan Test Deckenvent An / Aus:
if (keypressed == 'C') {
if (rctest == 0) {
(rctest = 1);
mySwitch.setProtocol(3); //Protokoll on
mySwitch.send("11000110001100110001111101000"); //Fan Ein 415654888
delay(100);
mySwitch.setProtocol(3); //Protokoll on
mySwitch.send("11000110001100110001111101000"); //Fan Ein
lcd.setCursor(0, 3);
lcd.print("Vent Ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
} else {
(rctest = 0);
mySwitch.setProtocol(4); //Protokoll off
mySwitch.send("11000110001100110001110010001"); //Fan Aus 415654801
delay(100);
mySwitch.setProtocol(4); //Protokoll off
mySwitch.send("11000110001100110001110010001"); //Fan Aus
lcd.setCursor(0, 3);
lcd.print("Vent Aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
//Taste "D" IR-Signal einlesen ON/OFF und in Eeprom speichern:
if (keypressed == 'D') {
ONlesen(); //schreibe ir ON und OFF in Eeprom
keypressed = NO_KEY;
}
//Taste "0" Schalt_temp für Klima an:
if (keypressed == '0') {
lcd.setCursor(0, 3);
lcd.print("Schalttemp. ");
lcd.setCursor(14, 3);
lcd.print(schalt_temp);
lcd.setCursor(16, 3);
lcd.print("\337C ");
char keypressed26 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed26 != NO_KEY && keypressed26 != '*' && keypressed26 != '#' && keypressed26 != 'A' && keypressed26 != 'B' && keypressed26 != 'C'
&& keypressed26 != 'D') {
c1 = keypressed26;
lcd.setCursor(14, 3);
lcd.print(" ");
lcd.setCursor(14, 3);
lcd.print(c1);
}
char keypressed27 = myKeypad.waitForKey();
if (keypressed27 != NO_KEY && keypressed27 != '*' && keypressed27 != '#' && keypressed27 != 'A' && keypressed27 != 'B' && keypressed27 != 'C'
&& keypressed27 != 'D') {
c2 = keypressed27;
lcd.setCursor(15, 3);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
schalt_temp = ((i1 + i2)*10);
eeprom.eeprom_write(7, schalt_temp);
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
// Taste "1" GPS Zeit setzen:
if (keypressed == '1') {
Second=1;
gpstime();
keypressed = NO_KEY;
}
//Taste "2" Funksteckdosentest A An / Aus Hand:
if (keypressed == '2') {
if (steckdose_A == 0) {
(steckdose_A = 1);
mySwitch.setProtocol(7);
mySwitch.send(A1on, 24); //A1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2on, 24); //A2on
delay(100);
steckdosen = 1;
lcd.setCursor(0, 3);
lcd.print("Steckdose A Ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
else {
(steckdose_A = 0);
mySwitch.setProtocol(7);
mySwitch.send(A1off, 24); //A1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2off, 24); //A2off
steckdosen = 0;
lcd.setCursor(0, 3);
lcd.print("Steckdose A Aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
//Taste "3" Funksteckdosentest B,C An / Aus Hand:
if (keypressed == '3') {
if (steckdose_B_C == 0) {
(steckdose_B_C = 1);
mySwitch.setProtocol(7);
mySwitch.send(B1on, 24); //B1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2on, 24); //B2on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1on, 24); //C1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2on, 24); //C2on
steckdosen = 1;
lcd.setCursor(0, 3);
lcd.print("Steckdose B / C Ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
else {
(steckdose_B_C = 0);
mySwitch.setProtocol(7);
mySwitch.send(B1off, 24); //B1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2off, 24); //B2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1off, 24); //C1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2off, 24); //C2off
lcd.setCursor(0, 3);
lcd.print("Steckdose B / C Aus ");
steckdosen = 0;
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
//Taste "4" Innentemp. Min-Max Speicher anzeigen:
if (keypressed == '4') {
float AItempmax=Itempmax;
float AItempmin=Itempmin;
lcd.setCursor(0, 3);
lcd.print("Innen Min / Max ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(2, 3);
lcd.print((AItempmin/10),1);
lcd.print("\337C");
lcd.setCursor(12, 3);
lcd.print((AItempmax/10),1);
lcd.print("\337C");
delay(3000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
//Taste "5" Klima nur ausschalten und nach 1h LG wieder ein Hand:
if (keypressed == '5') {
DateTime jetzt = rtc.now();
irtest = 0;
eeprom.eeprom_write(4, 0);
LG_onoff = 0;
eeprom.eeprom_write(1, 0);
LGoff = 2;
AlarmIsActiveLG = 0;
eeprom.eeprom_write(0, 0);
LG_hilfsvar = 1;
eeprom.eeprom_write(2, 1);
lcd.setCursor(0, 3);
lcd.print("Klima Aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
OFFsenden(); //send AC signal #Off @ 38kHz aus Eeprom
schaltstunde = (jetzt.hour()+1);
schaltminute = jetzt.minute();
keypressed = NO_KEY;
}
//Taste "6" Aussentemp. Min-Max Speicher Anzeigen:
if (keypressed == '6') {
float AAtempmax = 0;
float AAtempmin = 0;
lcd.setCursor(0, 3);
lcd.print("Aussen Min / Max ");
delay(1000);
if (Atempmin == 1024 && Atempmax == 0) {
lcd.setCursor(0, 3);
lcd.print(" kein Wert gelesen ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
else {
if (Atempmin<512){
AAtempmin = (512-Atempmin);
}
if (Atempmin >= 512){
AAtempmin = (Atempmin-512);
}
if (Atempmax < 512){
AAtempmax = (512-Atempmax);
}
if (Atempmax >= 512){
AAtempmax = (Atempmax-512);
}
lcd.setCursor(0, 3);
lcd.print(" ");
if (Atempmin < 512){
lcd.setCursor(1, 3);
lcd.print("-");
}
if (AAtempmin < 100.0){
lcd.setCursor(3, 3);
lcd.print((AAtempmin/10),1);
lcd.print("\337C");
}
if (AAtempmin >= 100.0){
lcd.setCursor(2, 3);
lcd.print((AAtempmin/10),1);
lcd.print("\337C");
}
if (Atempmax < 512){
lcd.setCursor(11, 3);
lcd.print("-");
}
if (AAtempmax < 100.0){
lcd.setCursor(13, 3);
lcd.print((AAtempmax/10),1);
lcd.print("\337C");
}
if (AAtempmax >= 100.0){
lcd.setCursor(12, 3);
lcd.print((AAtempmax/10),1);
lcd.print("\337C");
}
delay(3000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
keypressed = NO_KEY;
}
//Taste "7" Innentemp. Speicher reset:
if (keypressed == '7') {
Itempmax = 0;
Itempmin = 400;
lcd.setCursor(0, 3);
lcd.print("Innentemp. reset ");
delay(500);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
//Taste "8" Programmversion Anzeigen:
if (keypressed == '8') {
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(0, 3);
const char* filename = __FILE__;
*strrchr(filename, '.') = '\0';
lcd.print(strrchr(filename, '\\') + 1);
delay(3000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
//Taste "9" Aussentemp. Speicher reset:
if (keypressed == '9') {
Atempmax = 0;
Atempmin = 1024;
lcd.setCursor(0, 3);
lcd.print("Aussentemp. reset ");
delay(500);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
//ende Loop, Beginn Funktionen:
//IR aus Eeprom lesen und senden:
void ONsenden(){
unsigned int irCode[60] = { 0 };
byte Code1 = 0;
byte Code2 = 0;
unsigned int Code = 0;
int ONstart=100;
for (int i = 1; i < 60; i++) {
Code1 = eeprom.eeprom_read(ONstart);
ONstart = (ONstart+1);
Code2 = eeprom.eeprom_read(ONstart);
ONstart = (ONstart+1);
Code = int(Code1 << 8) + int(Code2);
irCode[i] = Code;
}
sendRAW_Flash(irCode, 38); //send AC signal #On @ 38kHz}
lcd.setCursor(0, 3);
lcd.print("On gesendet ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
void OFFsenden(){
unsigned int irCode[60] = { 0 };
byte Code1 = 0;
byte Code2 = 0;
unsigned int Code = 0;
int OFFstart=300;
for (int i = 1; i < 60; i++) {
Code1 = eeprom.eeprom_read(OFFstart);
OFFstart = (OFFstart+1);
Code2 = eeprom.eeprom_read(OFFstart);
OFFstart = (OFFstart+1);
Code = int(Code1 << 8) + int(Code2);
irCode[i] = Code;
}
sendRAW_Flash(irCode, 38); //send AC signal #On @ 38kHz}
lcd.setCursor(0, 3);
lcd.print("OFF gesendet ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
//IR Code senden
void sendRAW_Flash(unsigned int *signalArray, unsigned char carrierFreq) {
irsend.enableIROut(carrierFreq); //initialise the carrier frequency for each signal to be sent
for (uint8_t i = 1; i < 60; ++i) {
if (i & 1) {
irsend.mark(signalArray[i]);
} else {
irsend.space(signalArray[i]);
}
}
irsend.space(1); //make sure IR is turned off at end of signal
}
//ON / OFF rec. und in Eeprom schreiben:
void ONlesen() {
lcd.setCursor(0, 3);
lcd.print("On lesen ");
delay(5000); // pause 5 secs
while (x) {
int ONstart=100; //ab Adresse 100 im Eeprom ON Signal
detachInterrupt(0);//stop interrupts & capture until finshed here
for (int i = 1; i < 60; i++) { //now dump the times
int Impuls = (irBuffer[i] - irBuffer[i - 1]);
eeprom.eeprom_write(ONstart, byte(Impuls >> 8)); //1.byte schreiben
ONstart = ONstart+1;
eeprom.eeprom_write(ONstart, byte(Impuls & 0x00FF)); //2.byte schreiben
ONstart = ONstart+1;
}
x = 0;
attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//re-enable ISR for receiving IR signal
lcd.setCursor(0, 3);
lcd.print("On gelesen ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
OFFlesen();
}
}
void OFFlesen() {
lcd.setCursor(0, 3);
lcd.print("OFF lesen ");
delay(5000); // pause 5 secs
while (x) {
int OFFstart=300; //ab Adresse 300 im Eeprom OFF Signal
detachInterrupt(0);//stop interrupts & capture until finshed here
for (int i = 1; i < 60; i++) { //now dump the times
int Impuls = (irBuffer[i] - irBuffer[i - 1]);
eeprom.eeprom_write(OFFstart, byte(Impuls >> 8)); //1.byte schreiben
OFFstart = (OFFstart+1);
eeprom.eeprom_write(OFFstart, byte(Impuls & 0x00FF)); //2.byte schreiben
OFFstart = (OFFstart+1);
}
x = 0;
attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//re-enable ISR for receiving IR signal
lcd.setCursor(0, 3);
lcd.print("OFF gelesen ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
}
//IR Signal rec.
void rxIR_Interrupt_Handler() {
if (x > maxLen) return; //ignore if irBuffer is already full
irBuffer[x++] = micros(); //just continually record the time-stamp of signal transitions
}
//GPS Zeit mit RTC sync.:
void gpstime() {
bool sz1 = 0; //fuer Sommerzeit in Jan, Feb, Nov, Dez
bool sz2 = 0; //fuer in Apr, Mai, Jun, Jul, Aug, Sep
bool tzHours = 1; //fuer Winterzeit
byte last_second=0;
byte Minute;
byte Hour;
byte Day;
byte Month;
unsigned int Year;
lcd.setCursor(0, 3);
lcd.print("warte auf GPS Signal");
start:
while (Serial1.available() > 0) {
if (gps.encode(Serial1.read())) {
if (gps.time.isValid()) {
Hour = gps.time.hour();
Minute = gps.time.minute();
Second = gps.time.second();
}
if (gps.date.isValid()) {
Day = gps.date.day();
Month = gps.date.month();
Year = gps.date.year();
}
if (last_second != gps.time.second()) {
last_second = gps.time.second();
setTime(Hour, Minute, Second, Day, Month, Year);
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("UTC ");
if(Hour < 10) {
lcd.print(" ");
}
lcd.print(Hour);
lcd.print(":");
if(Minute < 10) {
lcd.print("0");
}
lcd.print(Minute);
lcd.print(":");
if (Second < 10) {
lcd.print("0");
}
lcd.print(Second);
lcd.setCursor(13, 3);
lcd.print(weekday()-1); // GPS beginnt mit 1, RTC mit 0, deshalb -1
DateTime jetzt = rtc.now(); //Zeitaktualisieren
}
}
}
//Zeit in RTC setzen und Umschaltung Sommer / Winterzeit
DateTime jetzt = rtc.now();
if (SZ == 1) {
tzHours=2;
}
else {
tzHours = 1;
}
if (jetzt.month() < 3 || jetzt.month() > 10) {
sz1 = 0; //Winterzeit in Jan, Feb, Nov, Dez
}
if (jetzt.month() > 3 && jetzt.month() < 10) {
sz1 = 1; //Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
}
if (jetzt.month() == 3 && (jetzt.hour() + 24 * jetzt.day()) >= (1 + tzHours + 24*(31 - (5 * jetzt.year() /4 + 4) % 7))
||
jetzt.month() == 10 && (jetzt.hour() + 24 * jetzt.day()) < (1 + tzHours + 24*(31 - (5 * jetzt.year() /4 + 1) % 7)))
{
sz2 = 1; //Sommerzeit
}
else {
sz2 = 0; //Winterzeit
}
if (sz1 == 1 || sz2 == 1) {
SZ = 1; //Sommerzeit
eeprom.eeprom_write(3, 1);
}
else {
SZ = 0; //Winterzeit
eeprom.eeprom_write(3, 0);
}
if (jetzt.second() == 0 && (gps.date.day()) > 0 && gps.date.month() > 0 && gps.date.year() > 0) { // == jetzt.day()
if (SZ == 1){
rtc.adjust(DateTime(gps.date.year(), gps.date.month(), gps.date.day(), gps.time.hour() +2, gps.time.minute(), gps.time.second())); // J, M, T, Std, Min, Sek
}
else {
rtc.adjust(DateTime(gps.date.year(), gps.date.month(), gps.date.day(), gps.time.hour() +1, gps.time.minute(), gps.time.second())); // J, M, T, Std, Min, Sek
}
}
else {
goto start;
}
}
//Set Time
void Set_Time() {
lcd.clear();
lcd.print("Uhr einstellen");
delay(1000);
lcd.clear();
lcd.print("Jahr");
char keypressed2 = myKeypad.waitForKey();
if (keypressed2 != NO_KEY && keypressed2 != '*' && keypressed2 != '#' && keypressed2 != 'A' && keypressed2 != 'B' && keypressed2 != 'C'
&& keypressed2 != 'D') {
c1 = keypressed2;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed3 = myKeypad.waitForKey();
if (keypressed3 != NO_KEY && keypressed3 != '*' && keypressed3 != '#' && keypressed3 != 'A' && keypressed3 != 'B' && keypressed3 != 'C'
&& keypressed3 != 'D') {
c2 = keypressed3;
lcd.setCursor(1, 1);
lcd.print(c2);
}
char keypressed4 = myKeypad.waitForKey();
if (keypressed4 != NO_KEY && keypressed4 != '*' && keypressed4 != '#' && keypressed4 != 'A' && keypressed4 != 'B' && keypressed4 != 'C'
&& keypressed4 != 'D') {
c3 = keypressed4;
lcd.setCursor(2, 1);
lcd.print(c3);
}
char keypressed5 = myKeypad.waitForKey();
if (keypressed5 != NO_KEY && keypressed5 != '*' && keypressed5 != '#' && keypressed5 != 'A' && keypressed5 != 'B' && keypressed5 != 'C'
&& keypressed5 != 'D') {
c4 = keypressed5;
lcd.setCursor(3, 1);
lcd.print(c4);
}
i1 = (c1 - 48) * 1000; //the keys pressed are stored into chars I convert them to int then i did some multiplication to get the code as an int of xxxx
i2 = (c2 - 48) * 100;
i3 = (c3 - 48) * 10;
i4 = c4 - 48;
int N_year = i1 + i2 + i3 + i4;
delay(500);
lcd.clear();
lcd.print("Monat");
char keypressed6 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed6 != NO_KEY && keypressed6 != '*' && keypressed6 != '#' && keypressed6 != 'A' && keypressed6 != 'B' && keypressed6 != 'C'
&& keypressed6 != 'D') {
c1 = keypressed6;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed7 = myKeypad.waitForKey();
if (keypressed7 != NO_KEY && keypressed7 != '*' && keypressed7 != '#' && keypressed7 != 'A' && keypressed7 != 'B' && keypressed7 != 'C'
&& keypressed7 != 'D') {
c2 = keypressed7;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
int N_month = i1 + i2;
delay(500);
lcd.clear();
lcd.print("Tag");
char keypressed8 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed8 != NO_KEY && keypressed8 != '*' && keypressed8 != '#' && keypressed8 != 'A' && keypressed8 != 'B' && keypressed8 != 'C'
&& keypressed8 != 'D') {
c1 = keypressed8;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed9 = myKeypad.waitForKey();
if (keypressed9 != NO_KEY && keypressed9 != '*' && keypressed9 != '#' && keypressed9 != 'A' && keypressed9 != 'B' && keypressed9 != 'C'
&& keypressed9 != 'D') {
c2 = keypressed9;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
int N_day = i1 + i2;
delay(500);
lcd.clear();
lcd.print("Stunde");
char keypressed10 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed10 != NO_KEY && keypressed10 != '*' && keypressed10 != '#' && keypressed10 != 'A' && keypressed10 != 'B' && keypressed10 != 'C'
&& keypressed10 != 'D') {
c1 = keypressed10;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed11 = myKeypad.waitForKey();
if (keypressed11 != NO_KEY && keypressed11 != '*' && keypressed11 != '#' && keypressed11 != 'A' && keypressed11 != 'B' && keypressed11 != 'C'
&& keypressed11 != 'D') {
c2 = keypressed11;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
int N_hour = i1 + i2;
delay(500);
lcd.clear();
lcd.print("Minuten");
char keypressed12 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed12 != NO_KEY && keypressed12 != '*' && keypressed12 != '#' && keypressed12 != 'A' && keypressed12 != 'B' && keypressed12 != 'C'
&& keypressed12 != 'D') {
c1 = keypressed12;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed13 = myKeypad.waitForKey();
if (keypressed13 != NO_KEY && keypressed13 != '*' && keypressed13 != '#' && keypressed13 != 'A' && keypressed13 != 'B' && keypressed13 != 'C'
&& keypressed13 != 'D') {
c2 = keypressed13;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
int N_minutes = i1 + i2;
delay(500);
lcd.clear();
rtc.adjust(DateTime(N_year, N_month, N_day, N_hour, N_minutes, 01)); // J, M, T, Std, Min, Sek
keypressed = NO_KEY;
}
//Alarm Setup:
void Alarm_Setup(){
lcd.clear();
lcd.print("Schaltuhr Einst.");
delay(500);
lcd.clear();
lcd.print("Steckdosen aus");
char keypressed14 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed14 != NO_KEY && keypressed14 != '*' && keypressed14 != '#' && keypressed14 != 'A' && keypressed14 != 'B' && keypressed14 != 'C'
&& keypressed14 != 'D') {
c1 = keypressed14;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed15 = myKeypad.waitForKey();
if (keypressed15 != NO_KEY && keypressed15 != '*' && keypressed15 != '#' && keypressed15 != 'A' && keypressed15 != 'B' && keypressed15 != 'C'
&& keypressed15 != 'D') {
c2 = keypressed15;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
A_hour = i1 + i2;
delay(500);
lcd.clear();
lcd.print("Steckdosen aus");
char keypressed16 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed16 != NO_KEY && keypressed16 != '*' && keypressed16 != '#' && keypressed16 != 'A' && keypressed16 != 'B' && keypressed16 != 'C'
&& keypressed16 != 'D') {
c1 = keypressed16;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed17 = myKeypad.waitForKey();
if (keypressed17 != NO_KEY && keypressed17 != '*' && keypressed17 != '#' && keypressed17 != 'A' && keypressed17 != 'B' && keypressed17 != 'C'
&& keypressed17 != 'D') {
c2 = keypressed17;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
A_minute = i1 + i2;
delay(500);
lcd.clear();
lcd.print("LG Aus");
char keypressed18 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed18 != NO_KEY && keypressed18 != '*' && keypressed18 != '#' && keypressed18 != 'A' && keypressed18 != 'B' && keypressed18 != 'C'
&& keypressed18 != 'D') {
c1 = keypressed18;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed19 = myKeypad.waitForKey();
if (keypressed19 != NO_KEY && keypressed19 != '*' && keypressed19 != '#' && keypressed19 != 'A' && keypressed19 != 'B' && keypressed19 != 'C'
&& keypressed19 != 'D') {
c2 = keypressed19;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
B_hour = i1 + i2;
delay(500);
lcd.clear();
lcd.print("LG Aus");
char keypressed20 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed20 != NO_KEY && keypressed20 != '*' && keypressed20 != '#' && keypressed20 != 'A' && keypressed20 != 'B' && keypressed20 != 'C'
&& keypressed20 != 'D') {
c1 = keypressed20;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed21 = myKeypad.waitForKey();
if (keypressed21 != NO_KEY && keypressed21 != '*' && keypressed21 != '#' && keypressed21 != 'A' && keypressed21 != 'B' && keypressed21 != 'C'
&& keypressed21 != 'D') {
c2 = keypressed21;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
B_minute = i1 + i2;
delay(500);
lcd.clear();
keypressed = NO_KEY;
delay(500);
lcd.clear();
lcd.print("Fan Aus Stunde");
char keypressed22 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed22 != NO_KEY && keypressed22 != '*' && keypressed22 != '#' && keypressed22 != 'A' && keypressed22 != 'B' && keypressed22 != 'C'
&& keypressed22 != 'D') {
c1 = keypressed22;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed23 = myKeypad.waitForKey();
if (keypressed23 != NO_KEY && keypressed23 != '*' && keypressed23 != '#' && keypressed23 != 'A' && keypressed23 != 'B' && keypressed23 != 'C'
&& keypressed23 != 'D') {
c2 = keypressed23;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
C_hour = i1 + i2;
delay(500);
lcd.clear();
lcd.print("Fan Aus Minuten");
char keypressed24 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed24 != NO_KEY && keypressed24 != '*' && keypressed24 != '#' && keypressed24 != 'A' && keypressed24 != 'B' && keypressed24 != 'C'
&& keypressed24 != 'D') {
c1 = keypressed24;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed25 = myKeypad.waitForKey();
if (keypressed25 != NO_KEY && keypressed25 != '*' && keypressed25 != '#' && keypressed25 != 'A' && keypressed25 != 'B' && keypressed25 != 'C'
&& keypressed25 != 'D') {
c2 = keypressed25;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
C_minute = i1 + i2;
delay(500);
lcd.clear();
keypressed = NO_KEY;
}
[/code]
Was sagen deine Debug-Ausgaben im Setup auf dem SerMon?
wenn du Debug Ausgaben hast - hattest du auch ein Setup.
wenn du ein Display siehst - hattest du auch ein Setup.
Dann gib doch im Setup einfach mal
Serial.println("Im Setup");
ein.
Gruß Tommy
Hab gerade nochmal übertragen mit debug, und wurde wieder übersprungen, oder Teile nicht ausgeführt:
Debug
In file included from C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:36:0:
C:\Users\volvodidi\Documents\Arduino\libraries\Keypad_I2C/Keypad_I2C.h: In member function 'virtual void Keypad_I2C::pin_mode(byte, byte)':
C:\Users\volvodidi\Documents\Arduino\libraries\Keypad_I2C/Keypad_I2C.h:56:21: warning: unused parameter 'pinNum' [-Wunused-parameter]
void pin_mode(byte pinNum, byte mode) {}
^~~~~~
C:\Users\volvodidi\Documents\Arduino\libraries\Keypad_I2C/Keypad_I2C.h:56:34: warning: unused parameter 'mode' [-Wunused-parameter]
void pin_mode(byte pinNum, byte mode) {}
^~~~
In file included from C:\Users\volvodidi\Documents\Arduino\libraries\Newliquidcrystal_1.3.5/LiquidCrystal_I2C.h:35:0,
from C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:39:
C:\Users\volvodidi\Documents\Arduino\libraries\Newliquidcrystal_1.3.5/LCD.h: In function 'void waitUsec(uint16_t)':
C:\Users\volvodidi\Documents\Arduino\libraries\Newliquidcrystal_1.3.5/LCD.h:89:40: warning: unused parameter 'uSec' [-Wunused-parameter]
inline static void waitUsec ( uint16_t uSec )
^~~~
C:\Users\volvodidi\Documents\Arduino\libraries\Newliquidcrystal_1.3.5/LCD.h: In member function 'virtual void LCD::setBacklightPin(uint8_t, t_backlighPol)':
C:\Users\volvodidi\Documents\Arduino\libraries\Newliquidcrystal_1.3.5/LCD.h:486:43: warning: unused parameter 'value' [-Wunused-parameter]
virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { };
^~~~~
C:\Users\volvodidi\Documents\Arduino\libraries\Newliquidcrystal_1.3.5/LCD.h:486:64: warning: unused parameter 'pol' [-Wunused-parameter]
virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { };
^~~
C:\Users\volvodidi\Documents\Arduino\libraries\Newliquidcrystal_1.3.5/LCD.h: In member function 'virtual void LCD::setBacklight(uint8_t)':
C:\Users\volvodidi\Documents\Arduino\libraries\Newliquidcrystal_1.3.5/LCD.h:505:40: warning: unused parameter 'value' [-Wunused-parameter]
virtual void setBacklight ( uint8_t value ) { };
^~~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino: In function 'void setup()':
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:225:19: warning: comparison is always true due to limited range of data type [-Wtype-limits]
jetzt.hour() >= 0 && jetzt.minute() >= 0 && jetzt.hour() < D_hour && jetzt.minute() >= 0) {
~~~~~~~~~~~~~^~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:225:42: warning: comparison is always true due to limited range of data type [-Wtype-limits]
jetzt.hour() >= 0 && jetzt.minute() >= 0 && jetzt.hour() < D_hour && jetzt.minute() >= 0) {
~~~~~~~~~~~~~~~^~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:225:90: warning: comparison is always true due to limited range of data type [-Wtype-limits]
jetzt.hour() >= 0 && jetzt.minute() >= 0 && jetzt.hour() < D_hour && jetzt.minute() >= 0) {
~~~~~~~~~~~~~~~^~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:224:29: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
if (jetzt.hour() == A_hour && jetzt.minute() >= A_minute ||
~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino: In function 'void loop()':
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:346:81: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
if (AlarmIsActiveLG == 0 && LG_hilfsvar == 1 && jetzt.hour() >= (B_hour + 1) && jetzt.minute() == B_minute ||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:420:23: warning: comparison is always true due to limited range of data type [-Wtype-limits]
if(temp > 0 && temp <= 500){
~~~~~^~~~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:510:24: warning: comparison is always true due to limited range of data type [-Wtype-limits]
if(temp > 0 && temp <= 500){
~~~~~^~~~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino: In function 'void gpstime()':
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1210:17: warning: variable 'jetzt' set but not used [-Wunused-but-set-variable]
DateTime jetzt = rtc.now(); //Zeitaktualisieren
^~~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1229:64: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (jetzt.month() == 3 && (jetzt.hour() + 24 * jetzt.day()) >= (1 + tzHours + 24*(31 - (5 * jetzt.year() /4 + 4) % 7))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1231:64: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
jetzt.month() == 10 && (jetzt.hour() + 24 * jetzt.day()) < (1 + tzHours + 24*(31 - (5 * jetzt.year() /4 + 1) % 7)))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1229:27: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
if (jetzt.month() == 3 && (jetzt.hour() + 24 * jetzt.day()) >= (1 + tzHours + 24*(31 - (5 * jetzt.year() /4 + 4) % 7))
~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:\Users\volvodidi\Documents\Arduino\libraries\Keypad_I2C\Keypad_I2C.cpp:32:0:
C:\Users\volvodidi\Documents\Arduino\libraries\Keypad_I2C\Keypad_I2C.h: In member function 'virtual void Keypad_I2C::pin_mode(byte, byte)':
C:\Users\volvodidi\Documents\Arduino\libraries\Keypad_I2C\Keypad_I2C.h:56:21: warning: unused parameter 'pinNum' [-Wunused-parameter]
void pin_mode(byte pinNum, byte mode) {}
^~~~~~
C:\Users\volvodidi\Documents\Arduino\libraries\Keypad_I2C\Keypad_I2C.h:56:34: warning: unused parameter 'mode' [-Wunused-parameter]
void pin_mode(byte pinNum, byte mode) {}
^~~~
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp: In function 'int MATCH(int, int)':
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp:55:32: warning: suggest braces around empty body in an 'else' statement [-Wempty-body]
DBG_PRINTLN(F("?; FAILED"));
^
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp:54:3: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
else
^~~~
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp:56:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
return passed;
^~~~~~
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp: In function 'int MATCH_MARK(int, int)':
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp:81:32: warning: suggest braces around empty body in an 'else' statement [-Wempty-body]
DBG_PRINTLN(F("?; FAILED"));
^
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp:80:3: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
else
^~~~
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp:82:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
return passed;
^~~~~~
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp: In function 'int MATCH_SPACE(int, int)':
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp:107:32: warning: suggest braces around empty body in an 'else' statement [-Wempty-body]
DBG_PRINTLN(F("?; FAILED"));
^
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp:106:3: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
else
^~~~
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\IRremote.cpp:108:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
return passed;
^~~~~~
In file included from C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\ir_Lego_PF.cpp:3:0:
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\ir_Lego_PF_BitStreamEncoder.h: In member function 'int LegoPfBitStreamEncoder::getRepeatStopPause() const':
C:\Users\volvodidi\Documents\Arduino\libraries\z3t0-Arduino-IRremote-7c14514\ir_Lego_PF_BitStreamEncoder.h:107:38: warning: integer overflow in expression [-Woverflow]
return STOP_PAUSE_DURATION + 5 * MAX_MESSAGE_LENGTH - messageLength;
~~^~~~~~~~~~~~~~~~~~~~
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino: In function 'gpstime':
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1189:15: warning: 'Year' may be used uninitialized in this function [-Wmaybe-uninitialized]
setTime(Hour, Minute, Second, Day, Month, Year);
^
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1164:21: note: 'Year' was declared here
unsigned int Year;
^
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1189:15: warning: 'Month' may be used uninitialized in this function [-Wmaybe-uninitialized]
setTime(Hour, Minute, Second, Day, Month, Year);
^
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1163:13: note: 'Month' was declared here
byte Month;
^
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1189:15: warning: 'Day' may be used uninitialized in this function [-Wmaybe-uninitialized]
setTime(Hour, Minute, Second, Day, Month, Year);
^
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1162:13: note: 'Day' was declared here
byte Day;
^
C:\Users\volvodidi\Documents\Arduino\libraries\Time-master\Time.cpp:229:16: warning: 'Hour' may be used uninitialized in this function [-Wmaybe-uninitialized]
seconds+= tm.Hour * SECS_PER_HOUR;
^
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1161:13: note: 'Hour' was declared here
byte Hour;
^
C:\Users\volvodidi\Documents\Arduino\libraries\Time-master\Time.cpp:230:23: warning: 'Minute' may be used uninitialized in this function [-Wmaybe-uninitialized]
seconds+= tm.Minute * SECS_PER_MIN;
^
C:\Users\volvodidi\Documents\Arduino\Heizungssteuerung\Schaltuhr_4_02\Schaltuhr_4_02.ino:1160:13: note: 'Minute' was declared here
byte Minute;
^
Der Sketch verwendet 31650 Bytes (12%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 2695 Bytes (32%) des dynamischen Speichers, 5497 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
So um mal zu zeigen wie man so etwas analysiert und dem Problem auf den Grund geht
hier ist dein Code ergänzt um ganz viele Serial.print-Ausgaben mit denen du im Detail nachvollziehen kannst welche Zeilen ausgeführt werden und welche nicht.
Ein Haupthindernis beim Lösen solcher Probleme ist all zu sehr von seinen eigenen Erklärungsphantasien überzeugt zu sein.
Da helfen nur knallharte Analyse-FAKTEN
//Arduino Mega Anschlussbelegung
//5V Spannungsversorgung Module über ext. Spannungsregler.
//3,3V Spannungsversorgung Module über Mega 3,3V Pin
//I2C: SDA Pin 20, SCL Pin 21
//RTC DS3231: I2C VCC 5V
//DHT22 Pin 8 //VCC 3,3V damit geht der DHT22 genauer.
//IR Send: Pin 9 IR ueber Transistor geschaltet. VCC 5V
//IR receive: Pin 2, VCC 5V
//GPS TX an seriell1 Pin 19 VCC 5V
//RC 433Mhz Sender: Pin 44, VCC VIN (9V) hoehere Sendeleistung.
//Arduino Every an Mega seriell2, 16 TX2, 17 RX2, VCC 5V
//Arduino Every, VCC 5V
//RC 433Mhz Empfaenger RXB6, Pin 2, VCC 5V
//Funk Aussentemp. Fuehler Pearl NC-7159-675 (433Mhz)
// Tastenbelegung:
// "*" Uhr stellen Hand
// "#" Schaltpunkte setzen
// "A" Schaltfunktion Klima LG ein / aus
// "B" Klima IR, ein / aus
// "C" Vent RC, ein / aus
// "D" IR Signal rec.
// "0" Schalttemperatur setzen
// "1" GPS Zeit sync.
// "2" Test Steckdose A, Ein / Aus
// "3" Test Steckdosen B/C/D, Ein / Aus
// "4" Innentemp. min max Speicher anzeigen
// "5" LG aus
// "6" Aussentemp. min max Speicher anzeigen
// "7" Innentempspeicher reset
// "8" Programmversion anzeigen
// "9" Aussentempspeicher reset
//verwendete lib`s:
#include <Keypad_I2C.h> //https://github.com/joeyoung/arduino_keypads/tree/master/Keypad_I2C
#include <Wire.h> //kommunikation I2C
#include "RTClib.h" // DS3231 https://github.com/adafruit/RTClib
#include <LiquidCrystal_I2C.h> //Display
#include <IRremote.h> //senden/empfangen von IR-Signalen //analysir.com
#include <RCSwitch.h> //433MHZ Funk, Achtung RCSwitch.cpp wurden Protokoll 3, 4, 7 angepasst
#include <DHT.h> //Tempsensor DHT22
#include <TinyGPS++.h> //GPS Empfaenger
#include "TimeLib.h" //Um Wochentag aus Datum zu erhalten
#include "uEEPROMLib.h" //für Zugriff auf RTC Eeprom
//Eeprom DS323:1
uEEPROMLib eeprom(0x57);
//Software serial fuer GPS:
TinyGPSPlus gps;
//Keypad:
#define I2CADDR 0x38 // I2C Adresse PCF8574 Keypad 0x38, 0x20 für Versuchsschaltung
#define Rs_pin 0
#define Rw_pin 1
#define En_pin 2
#define BACKLIGHT_PIN 3
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
//LCD 20x4:
#define lcd_addr 0x27
LiquidCrystal_I2C lcd (lcd_addr, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
//GPS Variablen fuer Time Lib:
byte Second;
byte SZ = 0; //Winterz. 0, Sommerz. 1 Eeprom Adr. 3
//RTC DS3231:
RTC_DS3231 rtc;
//Keypad
const byte numRows = 4; //number of rows on the keypad
const byte numCols = 4; //number of columns on the keypad
//keymap defines the key pressed according to the row and columns just as appears on the keypad
char keymap[numRows][numCols] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
byte rowPins[numRows] = { 0, 1, 2, 3 }; //Rows 0 to 3 //if you modify your pins you should modify this too
byte colPins[numCols] = { 4, 5, 6, 7 }; //Columns 0 to 3
Keypad_I2C myKeypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols, I2CADDR);
//Variablen Zeiteinstellung / Schaltpunkte / Schalttemp.
int i1, i2, i3, i4;
char c1, c2, c3, c4;
char keypressed;
//Schaltpunkte
byte A_hour = 23; //Schaltpunkt A Stunde ueber # einstellbar
byte A_minute = 0; //Schaltpunkt A Minute ueber # einstellbar
byte B_hour = 7; //Schaltpunkt B Stunde ueber # einstellbar
byte B_minute = 0; //Schaltpunkt B Minute ueber # einstellbar
byte C_hour = 22; //Schaltpunkt C Stunde ueber # einstellbar
byte C_minute = 0; //Schaltpunkt C Minute ueber # einstellbar
byte D_hour = 6; //Schaltpunkt D Stunde, Festzeit
byte D_minute = 30; //Schaltpunkt D Minute, Festzeit
byte hourset = 2; //GPS Zeitsetzen, Sommerzeit, Winterzeit
byte minuteset = 1; //GPS Zeitsetzen, Festzeit
byte schaltstunde = 0; // LG wiedereinschalten
byte schaltminute = 0; // LG wiedereinschalten
//Variablen
byte AlarmIsActiveLG = 1; // LG schalten ab Temp. Eeprom Adr. 0
byte LG_onoff = 0; // Hilfsvariable Schaltzustand LG Eeprom Adr. 1
byte LG_hilfsvar = 0; // Hilfsvariable für Schaltübergang Eeprom Adr. 2
byte irtest = 0; // Hilfsvariable fuer IR Test Taste B Eeprom Adr. 4
bool rctest = 0; // Hilfsvariable fuer 433MHz Sendetest Taste C
byte schalt_temp = 180; // Schalttemperatur fuer LG Eeprom Adr. 7
byte temp = 181; // Innentemp fuer Neustart damit Klima nicht direkt einschaltet
bool steckdose_A = 0; // Hilfsvariable fuer Schalttest Steckdose, Taste 2
bool steckdose_B_C = 0; // Hilfsvariable fuer Schalttest Steckdose Taste 3
bool steckdosen = 0; // Anzeige * Steckdosen 1 = an
//Sendevariablen Funksteckdosen A - D
unsigned long A1on = 8484016;//100000010111010010110000
unsigned long A2on = 8791616;//100001100010011001000000
unsigned long A1off = 8592016;//100000110001101010010000
unsigned long A2off = 8752416;//100001011000110100100000
unsigned long B1on = 8913780;//100010000000001101110100
unsigned long B2on = 9108276;//100010101111101100110100
unsigned long B1off = 8993956;//100010010011110010100100
unsigned long B2off = 9224468;//100011001100000100010100
unsigned long C1on = 8913788;//100010000000001101111100
unsigned long C2on = 9108284;//100010101111101100111100
unsigned long C1off = 8993964;//100010010011110010101100
unsigned long C2off = 9224476;//100011001100000100011100
unsigned long D1on = 8993954;//100010010011110010100010
unsigned long D2on = 9224466;//100011001100000100010010
unsigned long D1off = 8913778;//100010000000001101110010
unsigned long D2off = 9108274;//100010101111101100110010
//ir receive / send
IRsend irsend; //Pin 9
#define maxLen 60 //800
#define rxPinIR 2 //pin D2
volatile unsigned int irBuffer[maxLen]; //stores timings - volatile because changed by ISR
volatile unsigned int x = 0; //Pointer thru irBuffer - volatile because changed by ISR
//RC Sender/Empfaenger 433Mhz
RCSwitch mySwitch = RCSwitch();
//Serieller Empfang (433Mhz) der Aussentemp. auf Serial2 von Arduino Every
unsigned int Atemp = 0; // Wert Aussentempgeber 0 - 500
static unsigned int Etemp = 0; // Tempwert für max Abweichung +/- 3°
static unsigned int Ftemp = 0; // Tempwert für Anzeige
byte vorz = 4; // Vorzeichen fuer - Temperatur (2) bei + (4), default 4
bool gelesen = 0; // 1 wenn Wert aus Every gelesen
byte LGoff = 2; // 4 LG ausschalten vom Ofen
unsigned int Atempmax = 0; // min max Speicher aussen "0" -51,2°
unsigned int Atempmin = 1024; // min max Speicher innen, Startwert bei Neustart "1024" +51,2°
unsigned int Itempmax = 0; // min max Speicher "0"
unsigned int Itempmin = 400; // min max Speicher, Startwert bei Neustart "400"
//Temp sensor DHT22
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float t;
//Aktualisierung der Innentemp.
unsigned long previousMillis = 0;
const long interval = 30000; //alle 30sec.
void setup() {
Serial.begin(115200); // nicht langsamer wegen IR Signal senden
Serial.println("Setup HAT gestartet");
Serial1.begin(9600); // GPS
Serial.println("EINS Serial1.begin(9600) ausgeführt");
Serial2.begin(9600); // Arduino Mini Pro
Serial.println("ZWEI Serial2.begin(9600); ausgeführt");
myKeypad.begin(); // Tastatur
Serial.println("myKeypad.begin() ausgeführt");
lcd.begin(20, 4); // LCD
Serial.println("lcd.begin(20, 4) ausgeführt");
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
Serial.println("lcd.setBacklight(HIGH) ausgeführt");
lcd.home();
Serial.println("lcd.home(); ausgeführt");
rtc.begin();
Serial.println("rtc.begin() ausgeführt");
mySwitch.enableTransmit(44); //RC Senden
Serial.println("mySwitch.enableTransmit(44) ausgeführt");
pinMode(18, INPUT); //RC Empfaenger ??
dht.begin(); //Temperaturfuehler
Serial.println("dht.begin() ausgeführt");
attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//set up ISR for receiving IR signal
Serial.println("attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE) ausgeführt");
//Eeprom abfragen nach Stromausfall / Neustart:
AlarmIsActiveLG = (eeprom.eeprom_read(0));
LG_onoff = (eeprom.eeprom_read(1));
LG_hilfsvar = (eeprom.eeprom_read(2));
irtest = (eeprom.eeprom_read(4));
SZ = (eeprom.eeprom_read(3));
schalt_temp = (eeprom.eeprom_read(7));
Serial.println("schalt_temp = (eeprom.eeprom_read(7)); ausgeführt");
// Steckdosen einschalten bzw. ausschalten nach Neustart / Stromausfall:
DateTime jetzt = rtc.now(); //Zeitaktualisieren
Serial.println("direkt vor if (jetzt.hour() >= D_hour && ...");
if (jetzt.hour() >= D_hour && jetzt.minute() >= D_minute && jetzt.hour() < A_hour && jetzt.minute() >= A_minute) {
Serial.println("TRUE if (jetzt.hour() >= D_hour && ...");
mySwitch.setProtocol(7);
mySwitch.send(A1on, 24); //A1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2on, 24); //A2on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B1on, 24); //B1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2on, 24); //B2on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1on, 24); //C1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2on, 24); //C2on
steckdosen = 1;
lcd.setCursor(0, 3);
lcd.print("Steckdosen ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
// Steckdosen ausschalten
Serial.println("Steckdosen ausschalten direkt vor if (jetzt.hour() == A_hour ...");
if (jetzt.hour() == A_hour && jetzt.minute() >= A_minute ||
jetzt.hour() >= 0 && jetzt.minute() >= 0 && jetzt.hour() < D_hour && jetzt.minute() >= 0) {
Serial.println("TRUE Steckdosen ausschalten if (jetzt.hour() == A_hour ...");
mySwitch.setProtocol(7);
mySwitch.send(A1off, 24); //A1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2off, 24); //A2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B1off, 24); //B1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2off, 24); //B2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1off, 24); //C1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2off, 24); //C2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(D1off, 24); //D1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(D2off, 24); //D2off
steckdosen = 0;
lcd.setCursor(0, 3);
lcd.print("Steckdosen aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
// Every reset:
pinMode(6, OUTPUT); // Pin 6 Mega, für Every reset
digitalWrite(6, HIGH);
delay(200);
digitalWrite(6, LOW);
Serial.println("setup unteres Ende erreicht verlasse setup()");
}
void loop() {
//Abfrage Tastatur:
while (keypressed == NO_KEY) { //As long as no key is pressed we keep showing the date and time
keypressed = myKeypad.getKey();
//Abfrage RTC-Zeit:
//myRTC.updateTime(); //Zeitaktualisieren
DateTime jetzt = rtc.now();
//Innentempfuehlerabfrage:
float t = dht.readTemperature();
if ((round(t * 10)) > 0 && (round(t * 10)) <= 500) {
temp = (round(t * 10));
}
//Signal von Mini Pro von Aussentempfuehler:
byte Atemp1 = 0;
byte Atemp2 = 0;
unsigned int Btemp = 0;
gelesen = 0;
if (Serial2.available() > 0) {
Atemp1 = (Serial2.read()); // Tempbyte 1
Atemp2 = (Serial2.read()); // Tempbyte 2
vorz = (Serial2.read()); // 2 = minus, 4 = plus
if ((Serial2.read()) == 4 && LG_onoff == 1) {
LGoff = 4; // wenn LGoff = 4 Klima ausschalten
}
//absicherung das Atemp nicht größer +/- 50° ist
Btemp = int(Atemp1 << 8) + int(Atemp2);
if (Btemp <= 500 && vorz == 4) {
Atemp = Btemp;
gelesen = 1;
}
if (Btemp <= 500 && vorz == 2) { // bei - Temp +1 da sonst 0,1° weniger angezeigt wird.
Atemp = (Btemp + 1);
gelesen = 1;
}
}
//Schaltpunktabfragen:
//Klima einschalten wenn Temp. unter schalt_temp (18°C)
if (AlarmIsActiveLG == 1 && LG_onoff == 0 && temp < schalt_temp) {
LG_onoff = 1;
eeprom.eeprom_write(1, 1);
LGoff = 2;
ONsenden(); //send AC signal #ON @ 38kHz von SD
delay(1000);
ONsenden(); //send AC signal #ON @ 38kHz von SD
}
//Klima ausschalten 7:00 und AlarmIsActiveLG aus damit Ofen Zeit hat zu heizen.
if (AlarmIsActiveLG == 1 && LG_onoff == 1 && jetzt.hour() == B_hour && jetzt.minute() == B_minute) {
LG_onoff = 0;
eeprom.eeprom_write(1, 0);
LG_hilfsvar = 1;
eeprom.eeprom_write(2, 1);
AlarmIsActiveLG = 0;
eeprom.eeprom_write(0, 0);
OFFsenden(); //send AC signal #Off @ 38kHz von SD
delay(1000);
OFFsenden(); //send AC signal #Off @ 38kHz von SD
}
//Klima ausschalten wenn LG_onoff 1 und LGoff vom Ofen 4
if (LGoff == 4 && LG_onoff == 1 && AlarmIsActiveLG == 1) {
irtest = 0; //Hilfsvariable für Taste B
eeprom.eeprom_write(4, 0);
LG_onoff = 0;
eeprom.eeprom_write(1, 0);
LGoff = 2;
AlarmIsActiveLG = 0;
eeprom.eeprom_write(0, 0);
LG_hilfsvar = 1;
eeprom.eeprom_write(2, 1);
schaltstunde = (jetzt.hour() + 1);
schaltminute = jetzt.minute();
OFFsenden(); //send AC signal #Off @ 38kHz von SD
delay(1000);
OFFsenden(); //send AC signal #Off @ 38kHz von SD
}
//AlarmIsActiveLG wieder ein 1h nach LG ausschalten
if (AlarmIsActiveLG == 0 && LG_hilfsvar == 1 && jetzt.hour() >= (B_hour + 1) && jetzt.minute() == B_minute ||
AlarmIsActiveLG == 0 && LG_hilfsvar == 1 && jetzt.hour() == schaltstunde && jetzt.minute() == schaltminute) {
AlarmIsActiveLG = 1;
eeprom.eeprom_write(0, 1);
LG_hilfsvar = 0;
eeprom.eeprom_write(2, 0);
}
//Funksteckdosen A,B,C einschalten.
if (jetzt.hour() == D_hour && jetzt.minute() == D_minute && jetzt.second() == 0) {
mySwitch.setProtocol(7);
mySwitch.send(A1on, 24); //A1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2on, 24); //A2on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B1on, 24); //B1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2on, 24); //B2on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1on, 24); //C1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2on, 24); //C2on
steckdosen = 1;
}
//Funksteckdose A,B,C,D ausschalten.
if (jetzt.hour() == A_hour && jetzt.minute() == A_minute && jetzt.second() == 0) {
mySwitch.setProtocol(7);
mySwitch.send(A1off, 24); //A1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2off, 24); //A2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B1off, 24); //B1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2off, 24); //B2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1off, 24); //C1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2off, 24); //C2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(D1off, 24); //D1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(D2off, 24); //D2off
steckdosen = 0;
}
//GPS Zeit setzen:
if (jetzt.hour() == (hourset + 1) && jetzt.minute() == minuteset && jetzt.second() == 1 && SZ == 1) { //Umschaltung SZ/WZ 3:00
Second = 1;
gpstime(); //sprung in GPS Zeit Funktion
}
else if (jetzt.hour() == hourset && jetzt.minute() == minuteset && jetzt.second() == 1 && SZ == 0) { //Umschaltung WZ/SZ 2:00
Second = 1;
gpstime(); //sprung in GPS Zeit Funktion
}
// Temperatur Innen/Aussen min/max Speicher:
//Innentemp. Speicher
if (temp > 0 && temp <= 500) {
if (temp > Itempmax) {
Itempmax = temp;
}
if (temp < Itempmin) {
Itempmin = temp;
}
}
//Aussentemp. Speicher und Erzeugung von Ftemp. abgesichert zur Anzeige:
unsigned int z = 512;
unsigned int Ctemp = 0;
//+Bereich
if (vorz == 4 && gelesen == 1) {
Ctemp = (z + Atemp);
Etemp = (z + Atemp);
if (Atempmin == 1024 && gelesen == 1) {
Atempmin = Ctemp;
}
if (Atempmax == 0 && gelesen == 1) {
Atempmax = Ctemp;
}
if (Ctemp < Atempmin && Ctemp > (Atempmin - 30) && Ctemp < (Atempmax + 30) && gelesen == 1) { // wenn Abweichung größer 3° Wert verwerfen
Atempmin = Ctemp;
}
if (Ctemp > Atempmax && Ctemp > (Atempmin - 30) && Ctemp < (Atempmax + 30) && gelesen == 1) { // wenn Abweichung größer 3° Wert verwerfen
Atempmax = Ctemp;
}
if (Ctemp > (Etemp - 30) && Ctemp < (Etemp + 30) && gelesen == 1) { // wenn Abweichung größer 3° Wert verwerfen
Ftemp = (Ctemp - z); //abgesichert für Anzeige
}
}
// - Bereich
if (vorz == 2 && gelesen == 1) {
Ctemp = (z - Atemp);
Etemp = (z - Atemp);
if (Atempmin == 1024 && gelesen == 1) {
Atempmin = Ctemp;
}
if (Atempmax == 0 && gelesen == 1) {
Atempmax = Ctemp;
}
if (Ctemp < Atempmin && Ctemp > (Atempmin - 30) && Ctemp < (Atempmax + 30) && gelesen == 1) { // wenn Abweichung größer 3° Wert verwerfen
Atempmin = Ctemp;
}
if (Ctemp > Atempmax && Ctemp > (Atempmin - 30) && Ctemp < (Atempmax + 30) && gelesen == 1) { // wenn Abweichung größer 3° Wert verwerfen
Atempmax = Ctemp;
}
if (Ctemp > (Etemp - 30) && Ctemp < (Etemp + 30) && gelesen == 1) { // wenn Abweichung größer 3° Wert verwerfen
Ftemp = (z - Ctemp); //abgesichert für Anzeige
}
}
//LCD Anzeige von Zeit, Temperatur, Schaltpunkte:
static float Dtemp = 0.0;
Dtemp = Ftemp; //abgesicherter Temp.wert
static float itemp = 0.0;
itemp = temp;
//LCD Zeile 1
//Uhrzeit
lcd.setCursor(0, 0);
if (jetzt.hour() < 10) {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(1, 0);
}
lcd.print(jetzt.hour());
if (((jetzt.second()) % 2) == 0) { //blinkender Doppelpunkt
lcd.setCursor(2, 0);
lcd.print(":");
}
else {
lcd.setCursor(2, 0);
lcd.print(" ");
}
if (jetzt.minute() < 10) {
lcd.setCursor(3, 0);
lcd.print("0");
}
lcd.print(jetzt.minute());
lcd.setCursor(5, 0);
lcd.print(" ");
//Innentemp.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (temp > 0 && temp <= 500) {
if (temp < 100) {
lcd.setCursor(6, 0);
lcd.print(" ");
lcd.setCursor(7, 0);
lcd.print((itemp / 10), 1);
}
else {
lcd.setCursor(6, 0);
lcd.print((itemp / 10), 1);
}
}
}
lcd.setCursor(10, 0);
lcd.print("\337C");
lcd.setCursor(12, 0);
lcd.print(" ");
//Aussentempanzeige
//Vorzeichen
if (vorz == 4 && gelesen == 1) {// +
lcd.setCursor(13, 0);
lcd.print(" ");
}
//+ Bereich
if (vorz == 4 && gelesen == 1) {
if (Atemp < 100) {
lcd.setCursor(14, 0);
lcd.print(" ");
lcd.setCursor(15, 0);
lcd.print((Dtemp / 10), 1);
}
else {
lcd.setCursor(14, 0);
lcd.print((Dtemp / 10), 1);
}
}
//Vorzeichen
if (vorz == 2 && gelesen == 1) { // -
if (Atemp < 100) {
lcd.setCursor(13, 0);
lcd.print(" -");
}
else {
lcd.setCursor(13, 0);
lcd.print("-");
}
}
// - Bereich
if (vorz == 2 && gelesen == 1) {
if (Atemp < 100) {
lcd.setCursor(15, 0);
lcd.print((Dtemp / 10), 1);
}
else {
lcd.setCursor(14, 0);
lcd.print((Dtemp / 10), 1);
}
}
lcd.setCursor(18, 0);
lcd.print("\337C");
//LCD Zeile 2
//Schaltpunkt LG
lcd.setCursor(0, 1);
lcd.print("LG");
if (LG_onoff == 1) { //LG_onoff
lcd.setCursor(2, 1);
lcd.print(" * ");
}
else {
lcd.setCursor(2, 1);
lcd.print(" ");
}
if (AlarmIsActiveLG == 1) {
lcd.setCursor(5, 1);
lcd.print("ein ab ");
lcd.print(schalt_temp / 10);
lcd.print("\337C ");
}
else {
lcd.setCursor(5, 1);
lcd.print(" ");
}
//Sommer/Winterzeit
if (SZ == 1) {
lcd.setCursor(18, 1);
lcd.print("sz");
}
else {
lcd.setCursor(18, 1);
lcd.print("wz");
}
//LCD Zeile 3
//Schaltpunkt Steckdosen
lcd.setCursor(0, 2);
lcd.print("A,B,C ");
lcd.print(D_hour);
lcd.print("-");
if (A_hour < 10) {
lcd.print("0");
}
lcd.print(A_hour);
if (steckdosen == 1) { //Steckdosen ein
lcd.setCursor(6, 2);
lcd.print("*");
}
else {// Steckdosen aus
lcd.setCursor(6, 2);
lcd.print(" ");
}
//LCD Zeile 4 Tag-Datum bzw. Statusanzeige
// Wochentag / Datum
lcd.setCursor(0, 3);
switch (jetzt.dayOfTheWeek()) {
case 0: lcd.print("S\357ndag "); break;
case 1: lcd.print("Mondag "); break;
case 2: lcd.print("Tisdag "); break;
case 3: lcd.print("Onsdag "); break;
case 4: lcd.print("Thorsdag "); break;
case 5: lcd.print("Fredag "); break;
default: lcd.print("L\357rdag ");
}
lcd.print(" ");
lcd.print(jetzt.day());
lcd.print(".");
lcd.print(jetzt.month());
lcd.print(".");
lcd.print(jetzt.year() - 2000);
lcd.print(" ");
}
//Zeit von Hand setzen:
if (keypressed == '*') {//As we everytime check the key pressed we only proceed to setup if we press "*"
Set_Time();
}
//Alarmzeiten setzen:
if (keypressed == '#') {
Alarm_Setup();
}
//Tastenbelegung weitere Funktionen:
//Taste "A" LG Klima schalten ein / aus:
if (keypressed == 'A') {
if (AlarmIsActiveLG == 1) {
(AlarmIsActiveLG = 0);
eeprom.eeprom_write(0, 0);
lcd.setCursor(0, 3);
lcd.print("LG aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
if (keypressed == 'A') {
if (AlarmIsActiveLG == 0) {
(AlarmIsActiveLG = 1);
eeprom.eeprom_write(0, 1);
lcd.setCursor(0, 3);
lcd.print("LG ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
//Taste "B" IR Test Klimaansteuerung LG An / Aus:
if (keypressed == 'B') {
if (irtest == 0 && LG_onoff == 0) {
irtest = 1;
eeprom.eeprom_write(4, 1);
LG_onoff = 1;
eeprom.eeprom_write(1, 1);
lcd.setCursor(0, 3);
lcd.print("Klima Ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
ONsenden(); //send AC signal #On @ 38kHz aus Eeprom
keypressed = NO_KEY;
}
else {
if (irtest == 1 && LG_onoff == 1) {
irtest = 0;
eeprom.eeprom_write(4, 0);
LG_onoff = 0;
eeprom.eeprom_write(1, 0);
lcd.setCursor(0, 3);
lcd.print("Klima Aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
OFFsenden(); //send AC signal #Off @ 38kHz aus Eeprom
keypressed = NO_KEY;
}
}
}
//Taste "C" Fan Test Deckenvent An / Aus:
if (keypressed == 'C') {
if (rctest == 0) {
(rctest = 1);
mySwitch.setProtocol(3); //Protokoll on
mySwitch.send("11000110001100110001111101000"); //Fan Ein 415654888
delay(100);
mySwitch.setProtocol(3); //Protokoll on
mySwitch.send("11000110001100110001111101000"); //Fan Ein
lcd.setCursor(0, 3);
lcd.print("Vent Ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
} else {
(rctest = 0);
mySwitch.setProtocol(4); //Protokoll off
mySwitch.send("11000110001100110001110010001"); //Fan Aus 415654801
delay(100);
mySwitch.setProtocol(4); //Protokoll off
mySwitch.send("11000110001100110001110010001"); //Fan Aus
lcd.setCursor(0, 3);
lcd.print("Vent Aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
//Taste "D" IR-Signal einlesen ON/OFF und in Eeprom speichern:
if (keypressed == 'D') {
ONlesen(); //schreibe ir ON und OFF in Eeprom
keypressed = NO_KEY;
}
//Taste "0" Schalt_temp für Klima an:
if (keypressed == '0') {
lcd.setCursor(0, 3);
lcd.print("Schalttemp. ");
lcd.setCursor(14, 3);
lcd.print(schalt_temp);
lcd.setCursor(16, 3);
lcd.print("\337C ");
char keypressed26 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed26 != NO_KEY && keypressed26 != '*' && keypressed26 != '#' && keypressed26 != 'A' && keypressed26 != 'B' && keypressed26 != 'C'
&& keypressed26 != 'D') {
c1 = keypressed26;
lcd.setCursor(14, 3);
lcd.print(" ");
lcd.setCursor(14, 3);
lcd.print(c1);
}
char keypressed27 = myKeypad.waitForKey();
if (keypressed27 != NO_KEY && keypressed27 != '*' && keypressed27 != '#' && keypressed27 != 'A' && keypressed27 != 'B' && keypressed27 != 'C'
&& keypressed27 != 'D') {
c2 = keypressed27;
lcd.setCursor(15, 3);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
schalt_temp = ((i1 + i2) * 10);
eeprom.eeprom_write(7, schalt_temp);
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
// Taste "1" GPS Zeit setzen:
if (keypressed == '1') {
Second = 1;
gpstime();
keypressed = NO_KEY;
}
//Taste "2" Funksteckdosentest A An / Aus Hand:
if (keypressed == '2') {
if (steckdose_A == 0) {
(steckdose_A = 1);
mySwitch.setProtocol(7);
mySwitch.send(A1on, 24); //A1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2on, 24); //A2on
delay(100);
steckdosen = 1;
lcd.setCursor(0, 3);
lcd.print("Steckdose A Ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
else {
(steckdose_A = 0);
mySwitch.setProtocol(7);
mySwitch.send(A1off, 24); //A1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(A2off, 24); //A2off
steckdosen = 0;
lcd.setCursor(0, 3);
lcd.print("Steckdose A Aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
//Taste "3" Funksteckdosentest B,C An / Aus Hand:
if (keypressed == '3') {
if (steckdose_B_C == 0) {
(steckdose_B_C = 1);
mySwitch.setProtocol(7);
mySwitch.send(B1on, 24); //B1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2on, 24); //B2on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1on, 24); //C1on
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2on, 24); //C2on
steckdosen = 1;
lcd.setCursor(0, 3);
lcd.print("Steckdose B / C Ein ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
else {
(steckdose_B_C = 0);
mySwitch.setProtocol(7);
mySwitch.send(B1off, 24); //B1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(B2off, 24); //B2off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C1off, 24); //C1off
delay(100);
mySwitch.setProtocol(7);
mySwitch.send(C2off, 24); //C2off
lcd.setCursor(0, 3);
lcd.print("Steckdose B / C Aus ");
steckdosen = 0;
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
//Taste "4" Innentemp. Min-Max Speicher anzeigen:
if (keypressed == '4') {
float AItempmax = Itempmax;
float AItempmin = Itempmin;
lcd.setCursor(0, 3);
lcd.print("Innen Min / Max ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(2, 3);
lcd.print((AItempmin / 10), 1);
lcd.print("\337C");
lcd.setCursor(12, 3);
lcd.print((AItempmax / 10), 1);
lcd.print("\337C");
delay(3000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
//Taste "5" Klima nur ausschalten und nach 1h LG wieder ein Hand:
if (keypressed == '5') {
DateTime jetzt = rtc.now();
irtest = 0;
eeprom.eeprom_write(4, 0);
LG_onoff = 0;
eeprom.eeprom_write(1, 0);
LGoff = 2;
AlarmIsActiveLG = 0;
eeprom.eeprom_write(0, 0);
LG_hilfsvar = 1;
eeprom.eeprom_write(2, 1);
lcd.setCursor(0, 3);
lcd.print("Klima Aus ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
OFFsenden(); //send AC signal #Off @ 38kHz aus Eeprom
schaltstunde = (jetzt.hour() + 1);
schaltminute = jetzt.minute();
keypressed = NO_KEY;
}
//Taste "6" Aussentemp. Min-Max Speicher Anzeigen:
if (keypressed == '6') {
float AAtempmax = 0;
float AAtempmin = 0;
lcd.setCursor(0, 3);
lcd.print("Aussen Min / Max ");
delay(1000);
if (Atempmin == 1024 && Atempmax == 0) {
lcd.setCursor(0, 3);
lcd.print(" kein Wert gelesen ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
else {
if (Atempmin < 512) {
AAtempmin = (512 - Atempmin);
}
if (Atempmin >= 512) {
AAtempmin = (Atempmin - 512);
}
if (Atempmax < 512) {
AAtempmax = (512 - Atempmax);
}
if (Atempmax >= 512) {
AAtempmax = (Atempmax - 512);
}
lcd.setCursor(0, 3);
lcd.print(" ");
if (Atempmin < 512) {
lcd.setCursor(1, 3);
lcd.print("-");
}
if (AAtempmin < 100.0) {
lcd.setCursor(3, 3);
lcd.print((AAtempmin / 10), 1);
lcd.print("\337C");
}
if (AAtempmin >= 100.0) {
lcd.setCursor(2, 3);
lcd.print((AAtempmin / 10), 1);
lcd.print("\337C");
}
if (Atempmax < 512) {
lcd.setCursor(11, 3);
lcd.print("-");
}
if (AAtempmax < 100.0) {
lcd.setCursor(13, 3);
lcd.print((AAtempmax / 10), 1);
lcd.print("\337C");
}
if (AAtempmax >= 100.0) {
lcd.setCursor(12, 3);
lcd.print((AAtempmax / 10), 1);
lcd.print("\337C");
}
delay(3000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
keypressed = NO_KEY;
}
//Taste "7" Innentemp. Speicher reset:
if (keypressed == '7') {
Itempmax = 0;
Itempmin = 400;
lcd.setCursor(0, 3);
lcd.print("Innentemp. reset ");
delay(500);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
//Taste "8" Programmversion Anzeigen:
if (keypressed == '8') {
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(0, 3);
const char* filename = __FILE__;
*strrchr(filename, '.') = '\0';
lcd.print(strrchr(filename, '\\') + 1);
delay(3000);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
//Taste "9" Aussentemp. Speicher reset:
if (keypressed == '9') {
Atempmax = 0;
Atempmin = 1024;
lcd.setCursor(0, 3);
lcd.print("Aussentemp. reset ");
delay(500);
lcd.setCursor(0, 3);
lcd.print(" ");
keypressed = NO_KEY;
}
}
//ende Loop, Beginn Funktionen:
//IR aus Eeprom lesen und senden:
void ONsenden() {
unsigned int irCode[60] = { 0 };
byte Code1 = 0;
byte Code2 = 0;
unsigned int Code = 0;
int ONstart = 100;
for (int i = 1; i < 60; i++) {
Code1 = eeprom.eeprom_read(ONstart);
ONstart = (ONstart + 1);
Code2 = eeprom.eeprom_read(ONstart);
ONstart = (ONstart + 1);
Code = int(Code1 << 8) + int(Code2);
irCode[i] = Code;
}
sendRAW_Flash(irCode, 38); //send AC signal #On @ 38kHz}
lcd.setCursor(0, 3);
lcd.print("On gesendet ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
void OFFsenden() {
unsigned int irCode[60] = { 0 };
byte Code1 = 0;
byte Code2 = 0;
unsigned int Code = 0;
int OFFstart = 300;
for (int i = 1; i < 60; i++) {
Code1 = eeprom.eeprom_read(OFFstart);
OFFstart = (OFFstart + 1);
Code2 = eeprom.eeprom_read(OFFstart);
OFFstart = (OFFstart + 1);
Code = int(Code1 << 8) + int(Code2);
irCode[i] = Code;
}
sendRAW_Flash(irCode, 38); //send AC signal #On @ 38kHz}
lcd.setCursor(0, 3);
lcd.print("OFF gesendet ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
//IR Code senden
void sendRAW_Flash(unsigned int *signalArray, unsigned char carrierFreq) {
irsend.enableIROut(carrierFreq); //initialise the carrier frequency for each signal to be sent
for (uint8_t i = 1; i < 60; ++i) {
if (i & 1) {
irsend.mark(signalArray[i]);
} else {
irsend.space(signalArray[i]);
}
}
irsend.space(1); //make sure IR is turned off at end of signal
}
//ON / OFF rec. und in Eeprom schreiben:
void ONlesen() {
lcd.setCursor(0, 3);
lcd.print("On lesen ");
delay(5000); // pause 5 secs
while (x) {
int ONstart = 100; //ab Adresse 100 im Eeprom ON Signal
detachInterrupt(0);//stop interrupts & capture until finshed here
for (int i = 1; i < 60; i++) { //now dump the times
int Impuls = (irBuffer[i] - irBuffer[i - 1]);
eeprom.eeprom_write(ONstart, byte(Impuls >> 8)); //1.byte schreiben
ONstart = ONstart + 1;
eeprom.eeprom_write(ONstart, byte(Impuls & 0x00FF)); //2.byte schreiben
ONstart = ONstart + 1;
}
x = 0;
attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//re-enable ISR for receiving IR signal
lcd.setCursor(0, 3);
lcd.print("On gelesen ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
OFFlesen();
}
}
void OFFlesen() {
lcd.setCursor(0, 3);
lcd.print("OFF lesen ");
delay(5000); // pause 5 secs
while (x) {
int OFFstart = 300; //ab Adresse 300 im Eeprom OFF Signal
detachInterrupt(0);//stop interrupts & capture until finshed here
for (int i = 1; i < 60; i++) { //now dump the times
int Impuls = (irBuffer[i] - irBuffer[i - 1]);
eeprom.eeprom_write(OFFstart, byte(Impuls >> 8)); //1.byte schreiben
OFFstart = (OFFstart + 1);
eeprom.eeprom_write(OFFstart, byte(Impuls & 0x00FF)); //2.byte schreiben
OFFstart = (OFFstart + 1);
}
x = 0;
attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//re-enable ISR for receiving IR signal
lcd.setCursor(0, 3);
lcd.print("OFF gelesen ");
delay(1000);
lcd.setCursor(0, 3);
lcd.print(" ");
}
}
//IR Signal rec.
void rxIR_Interrupt_Handler() {
if (x > maxLen) return; //ignore if irBuffer is already full
irBuffer[x++] = micros(); //just continually record the time-stamp of signal transitions
}
//GPS Zeit mit RTC sync.:
void gpstime() {
bool sz1 = 0; //fuer Sommerzeit in Jan, Feb, Nov, Dez
bool sz2 = 0; //fuer in Apr, Mai, Jun, Jul, Aug, Sep
bool tzHours = 1; //fuer Winterzeit
byte last_second = 0;
byte Minute;
byte Hour;
byte Day;
byte Month;
unsigned int Year;
lcd.setCursor(0, 3);
lcd.print("warte auf GPS Signal");
start:
while (Serial1.available() > 0) {
if (gps.encode(Serial1.read())) {
if (gps.time.isValid()) {
Hour = gps.time.hour();
Minute = gps.time.minute();
Second = gps.time.second();
}
if (gps.date.isValid()) {
Day = gps.date.day();
Month = gps.date.month();
Year = gps.date.year();
}
if (last_second != gps.time.second()) {
last_second = gps.time.second();
setTime(Hour, Minute, Second, Day, Month, Year);
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("UTC ");
if (Hour < 10) {
lcd.print(" ");
}
lcd.print(Hour);
lcd.print(":");
if (Minute < 10) {
lcd.print("0");
}
lcd.print(Minute);
lcd.print(":");
if (Second < 10) {
lcd.print("0");
}
lcd.print(Second);
lcd.setCursor(13, 3);
lcd.print(weekday() - 1); // GPS beginnt mit 1, RTC mit 0, deshalb -1
DateTime jetzt = rtc.now(); //Zeitaktualisieren
}
}
}
//Zeit in RTC setzen und Umschaltung Sommer / Winterzeit
DateTime jetzt = rtc.now();
if (SZ == 1) {
tzHours = 2;
}
else {
tzHours = 1;
}
if (jetzt.month() < 3 || jetzt.month() > 10) {
sz1 = 0; //Winterzeit in Jan, Feb, Nov, Dez
}
if (jetzt.month() > 3 && jetzt.month() < 10) {
sz1 = 1; //Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
}
if (jetzt.month() == 3 && (jetzt.hour() + 24 * jetzt.day()) >= (1 + tzHours + 24 * (31 - (5 * jetzt.year() / 4 + 4) % 7))
||
jetzt.month() == 10 && (jetzt.hour() + 24 * jetzt.day()) < (1 + tzHours + 24 * (31 - (5 * jetzt.year() / 4 + 1) % 7)))
{
sz2 = 1; //Sommerzeit
}
else {
sz2 = 0; //Winterzeit
}
if (sz1 == 1 || sz2 == 1) {
SZ = 1; //Sommerzeit
eeprom.eeprom_write(3, 1);
}
else {
SZ = 0; //Winterzeit
eeprom.eeprom_write(3, 0);
}
if (jetzt.second() == 0 && (gps.date.day()) > 0 && gps.date.month() > 0 && gps.date.year() > 0) { // == jetzt.day()
if (SZ == 1) {
rtc.adjust(DateTime(gps.date.year(), gps.date.month(), gps.date.day(), gps.time.hour() + 2, gps.time.minute(), gps.time.second())); // J, M, T, Std, Min, Sek
}
else {
rtc.adjust(DateTime(gps.date.year(), gps.date.month(), gps.date.day(), gps.time.hour() + 1, gps.time.minute(), gps.time.second())); // J, M, T, Std, Min, Sek
}
}
else {
goto start;
}
}
//Set Time
void Set_Time() {
lcd.clear();
lcd.print("Uhr einstellen");
delay(1000);
lcd.clear();
lcd.print("Jahr");
char keypressed2 = myKeypad.waitForKey();
if (keypressed2 != NO_KEY && keypressed2 != '*' && keypressed2 != '#' && keypressed2 != 'A' && keypressed2 != 'B' && keypressed2 != 'C'
&& keypressed2 != 'D') {
c1 = keypressed2;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed3 = myKeypad.waitForKey();
if (keypressed3 != NO_KEY && keypressed3 != '*' && keypressed3 != '#' && keypressed3 != 'A' && keypressed3 != 'B' && keypressed3 != 'C'
&& keypressed3 != 'D') {
c2 = keypressed3;
lcd.setCursor(1, 1);
lcd.print(c2);
}
char keypressed4 = myKeypad.waitForKey();
if (keypressed4 != NO_KEY && keypressed4 != '*' && keypressed4 != '#' && keypressed4 != 'A' && keypressed4 != 'B' && keypressed4 != 'C'
&& keypressed4 != 'D') {
c3 = keypressed4;
lcd.setCursor(2, 1);
lcd.print(c3);
}
char keypressed5 = myKeypad.waitForKey();
if (keypressed5 != NO_KEY && keypressed5 != '*' && keypressed5 != '#' && keypressed5 != 'A' && keypressed5 != 'B' && keypressed5 != 'C'
&& keypressed5 != 'D') {
c4 = keypressed5;
lcd.setCursor(3, 1);
lcd.print(c4);
}
i1 = (c1 - 48) * 1000; //the keys pressed are stored into chars I convert them to int then i did some multiplication to get the code as an int of xxxx
i2 = (c2 - 48) * 100;
i3 = (c3 - 48) * 10;
i4 = c4 - 48;
int N_year = i1 + i2 + i3 + i4;
delay(500);
lcd.clear();
lcd.print("Monat");
char keypressed6 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed6 != NO_KEY && keypressed6 != '*' && keypressed6 != '#' && keypressed6 != 'A' && keypressed6 != 'B' && keypressed6 != 'C'
&& keypressed6 != 'D') {
c1 = keypressed6;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed7 = myKeypad.waitForKey();
if (keypressed7 != NO_KEY && keypressed7 != '*' && keypressed7 != '#' && keypressed7 != 'A' && keypressed7 != 'B' && keypressed7 != 'C'
&& keypressed7 != 'D') {
c2 = keypressed7;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
int N_month = i1 + i2;
delay(500);
lcd.clear();
lcd.print("Tag");
char keypressed8 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed8 != NO_KEY && keypressed8 != '*' && keypressed8 != '#' && keypressed8 != 'A' && keypressed8 != 'B' && keypressed8 != 'C'
&& keypressed8 != 'D') {
c1 = keypressed8;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed9 = myKeypad.waitForKey();
if (keypressed9 != NO_KEY && keypressed9 != '*' && keypressed9 != '#' && keypressed9 != 'A' && keypressed9 != 'B' && keypressed9 != 'C'
&& keypressed9 != 'D') {
c2 = keypressed9;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
int N_day = i1 + i2;
delay(500);
lcd.clear();
lcd.print("Stunde");
char keypressed10 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed10 != NO_KEY && keypressed10 != '*' && keypressed10 != '#' && keypressed10 != 'A' && keypressed10 != 'B' && keypressed10 != 'C'
&& keypressed10 != 'D') {
c1 = keypressed10;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed11 = myKeypad.waitForKey();
if (keypressed11 != NO_KEY && keypressed11 != '*' && keypressed11 != '#' && keypressed11 != 'A' && keypressed11 != 'B' && keypressed11 != 'C'
&& keypressed11 != 'D') {
c2 = keypressed11;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
int N_hour = i1 + i2;
delay(500);
lcd.clear();
lcd.print("Minuten");
char keypressed12 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed12 != NO_KEY && keypressed12 != '*' && keypressed12 != '#' && keypressed12 != 'A' && keypressed12 != 'B' && keypressed12 != 'C'
&& keypressed12 != 'D') {
c1 = keypressed12;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed13 = myKeypad.waitForKey();
if (keypressed13 != NO_KEY && keypressed13 != '*' && keypressed13 != '#' && keypressed13 != 'A' && keypressed13 != 'B' && keypressed13 != 'C'
&& keypressed13 != 'D') {
c2 = keypressed13;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
int N_minutes = i1 + i2;
delay(500);
lcd.clear();
rtc.adjust(DateTime(N_year, N_month, N_day, N_hour, N_minutes, 01)); // J, M, T, Std, Min, Sek
keypressed = NO_KEY;
}
//Alarm Setup:
void Alarm_Setup() {
lcd.clear();
lcd.print("Schaltuhr Einst.");
delay(500);
lcd.clear();
lcd.print("Steckdosen aus");
char keypressed14 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed14 != NO_KEY && keypressed14 != '*' && keypressed14 != '#' && keypressed14 != 'A' && keypressed14 != 'B' && keypressed14 != 'C'
&& keypressed14 != 'D') {
c1 = keypressed14;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed15 = myKeypad.waitForKey();
if (keypressed15 != NO_KEY && keypressed15 != '*' && keypressed15 != '#' && keypressed15 != 'A' && keypressed15 != 'B' && keypressed15 != 'C'
&& keypressed15 != 'D') {
c2 = keypressed15;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
A_hour = i1 + i2;
delay(500);
lcd.clear();
lcd.print("Steckdosen aus");
char keypressed16 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed16 != NO_KEY && keypressed16 != '*' && keypressed16 != '#' && keypressed16 != 'A' && keypressed16 != 'B' && keypressed16 != 'C'
&& keypressed16 != 'D') {
c1 = keypressed16;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed17 = myKeypad.waitForKey();
if (keypressed17 != NO_KEY && keypressed17 != '*' && keypressed17 != '#' && keypressed17 != 'A' && keypressed17 != 'B' && keypressed17 != 'C'
&& keypressed17 != 'D') {
c2 = keypressed17;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
A_minute = i1 + i2;
delay(500);
lcd.clear();
lcd.print("LG Aus");
char keypressed18 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed18 != NO_KEY && keypressed18 != '*' && keypressed18 != '#' && keypressed18 != 'A' && keypressed18 != 'B' && keypressed18 != 'C'
&& keypressed18 != 'D') {
c1 = keypressed18;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed19 = myKeypad.waitForKey();
if (keypressed19 != NO_KEY && keypressed19 != '*' && keypressed19 != '#' && keypressed19 != 'A' && keypressed19 != 'B' && keypressed19 != 'C'
&& keypressed19 != 'D') {
c2 = keypressed19;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
B_hour = i1 + i2;
delay(500);
lcd.clear();
lcd.print("LG Aus");
char keypressed20 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed20 != NO_KEY && keypressed20 != '*' && keypressed20 != '#' && keypressed20 != 'A' && keypressed20 != 'B' && keypressed20 != 'C'
&& keypressed20 != 'D') {
c1 = keypressed20;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed21 = myKeypad.waitForKey();
if (keypressed21 != NO_KEY && keypressed21 != '*' && keypressed21 != '#' && keypressed21 != 'A' && keypressed21 != 'B' && keypressed21 != 'C'
&& keypressed21 != 'D') {
c2 = keypressed21;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
B_minute = i1 + i2;
delay(500);
lcd.clear();
keypressed = NO_KEY;
delay(500);
lcd.clear();
lcd.print("Fan Aus Stunde");
char keypressed22 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed22 != NO_KEY && keypressed22 != '*' && keypressed22 != '#' && keypressed22 != 'A' && keypressed22 != 'B' && keypressed22 != 'C'
&& keypressed22 != 'D') {
c1 = keypressed22;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed23 = myKeypad.waitForKey();
if (keypressed23 != NO_KEY && keypressed23 != '*' && keypressed23 != '#' && keypressed23 != 'A' && keypressed23 != 'B' && keypressed23 != 'C'
&& keypressed23 != 'D') {
c2 = keypressed23;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
C_hour = i1 + i2;
delay(500);
lcd.clear();
lcd.print("Fan Aus Minuten");
char keypressed24 = myKeypad.waitForKey(); // here all programs are stopped until you enter the four digits then it gets compared to the code above
if (keypressed24 != NO_KEY && keypressed24 != '*' && keypressed24 != '#' && keypressed24 != 'A' && keypressed24 != 'B' && keypressed24 != 'C'
&& keypressed24 != 'D') {
c1 = keypressed24;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed25 = myKeypad.waitForKey();
if (keypressed25 != NO_KEY && keypressed25 != '*' && keypressed25 != '#' && keypressed25 != 'A' && keypressed25 != 'B' && keypressed25 != 'C'
&& keypressed25 != 'D') {
c2 = keypressed25;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1 = (c1 - 48) * 10;
i2 = c2 - 48;
C_minute = i1 + i2;
delay(500);
lcd.clear();
keypressed = NO_KEY;
}
vgs
Die Ausgabe kommt im Setup, aber warum wird das Setup nicht komplett ausgeführt (Einschalten der Steckdosen)?
Es wurde nix verändert.
Hab gerade wieder gleiches Problem gehabt, 6V Netzteil dran alles wieder ok, 9V wieder dran alles ok.
Notfalls wenn nicht am PC hängt hast doch LCD frei, auf dem kann man auch alles anzeigen, am Setup ende LCD löschen.
Es reicht schon 1, 2 ... anzeigen wen man faul ist mehr zu schreiben
Damit weist Du wo der gerade im Setup sich befindet.
Hier die Ausgabe der Seriellen zum Setup
Setup HAT gestartet
EINS Serial1.begin() ausgeführt
attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE) ausgeführt
Switch.enableTransmit(44) ausgeführt
dht.begin() ausgeführt
attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE) ausgeführt
Switch.enableTransmit(44) ausgeführt
dht.begin() ausgeführt
attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE) ausgeführt
Setup HAT gestartet
EINS Serial1.begin(9600) ausgeführt
ZWEI Serial2.begin(9600); ausgeführt
myKeypad.begin() ausgeführt
lcd.begin(20, 4) ausgeführt
lcd.setBacklight(HIGH) ausgeführt
lcd.home(); ausgeführt
rtc.begin() ausgeführt
mySwitch.enableTransmit(44) ausgeführt
dht.begin() ausgeführt
attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE) ausgeführt
schalt_temp = (eeprom.eeprom_read(7)); ausgeführt
direkt vor if (jetzt.hour() >= D_hour && ...
TRUE if (jetzt.hour() >= D_hour && ...
Steckdosen ausschalten direkt vor if (jetzt.hour() == A_hour ...
setup unteres Ende erreicht verlasse setup()
Also ein Abarbeitung des Setup.
Dein Problem ist was anderes.
Ich rate dir, die ganzen Warnings vom Kompilieren zu beheben...
Nur mit deinen eigenen hast schon genug zu tun.
Jetzt schaltet er wieder wie gewohnt die Dosen ein im Setup,
Hatte noch 2 Print Ausgeben dabei gehängt hinterm ein und ausschalten.
Bisher hatte ich die Debugs nicht eingeschaltet, werd sie aber alle versuchen zu beheben.
Debugs nicht eingeschaltet ist eine merkwürdige Umschreibung für das was du machen sollst
Sieht mir so aus als wäre hier das Problem.
Wenn jetzt
komplett auf 0 steht treffen z.B. die Stundenbedingungen wohl nicht zu.
@StefanL38
ich hatte "alle" eingeschaltet, das waren aber 3 Mal soviel Zeichen als man hier posten kann, deshalb hatte ich das wieder zurückgenommen.
dreimal so viele würde heißen 360000 Zeichen.
Dann
aufteilen auf 3 bis 4 postings
oder lass dir erklären welche Teile des logs interessant sind.