Hallo,
kann mir jemand dabei helfen diese RTC in mein Menü hinzuzufügen? Mochte das bei Menü 9 einordnen, klappt aber bei mir nicht, ich bekomm es net hin. Könnte mir jemand helfen?
Code Menü:
`//Menü//////////////////////////////////////////////////////
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Stepper.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const byte upButtonPin = 35;
const byte downButtonPin = 39;
const byte rightButtonPin = 30;
const byte leftButtonPin = 32;
const byte tweeterPin = 9;
const byte ledPin = 13;
const byte ledPin_fade = 10;
int fade = 0;
int L_Haus = 41;
int L_Rot = 43;
int ROT = 24;
int GELB = 22;
int GRUEN = 26;
int F_ROT = 33;
int F_GRUEN = 45;
int TasterLesen;
int lastState = LOW;
int currentState;
int Sensorwert;
int L_GRUEN = 13;
int L_ROT = 31;
int SPU = 2048;
Stepper Motor(SPU, 3,5,4,6);
String MenuItems[9] = {
"1.Solarenergie",
"2.Windenergie",
"3.Garagentor",
"4.Luftqualitaet",
"5.Strassenlaternen",
"6.LED Haus",
"7.Ampel",
"8.Akkustand",
"9.Uhrzeit/Datum",
};
////////////////////////////////////////////////////////////
//RealTimeClock/////////////////////////////////////////////
#include <TimeLib.h>
#include <DS1307RTC.h>
////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(9600);
///////////////Buttons//////////////////////
pinMode(upButtonPin, INPUT_PULLUP);
pinMode(downButtonPin, INPUT_PULLUP);
pinMode(rightButtonPin, INPUT_PULLUP);
pinMode(leftButtonPin, INPUT_PULLUP);
////LCD/////////////////////////////////////
lcd.init();
lcd.backlight();
////RealTimeClock///////////////////////////
while (!Serial) ;
delay(200);
Serial.println("RTC Read Test");
Serial.println("-------------------");
/////////////////////////////////////////////
pinMode(L_Haus, OUTPUT);
pinMode(ROT, OUTPUT);
pinMode(GELB, OUTPUT);
pinMode(GRUEN, OUTPUT);
pinMode(F_ROT, OUTPUT);
pinMode(F_GRUEN, OUTPUT);
pinMode(0, INPUT);
Motor.setSpeed(5);
}
//////MENU/////////////////////////////////////////////////
void menuFunctions(int menu, byte right, byte left) // funktionen einfügen, verbessern(also die aufteilung), nochmal genau durchlesen damit ich des programm versteh etc.
{
if(menu == 1)
{
if(right == 1)
{
lcd.setCursor(0, 2);
lcd.print("Stromstaerke=");
lcd.setCursor(0, 3);
lcd.print("Spannung=");
digitalWrite(ledPin, HIGH);
}
}
if(menu == 2)
{
if(right == 1)
{
lcd.setCursor(0, 2);
lcd.print("Stromstaerke=");
lcd.setCursor(0, 3);
lcd.print("Spannung=");
digitalWrite(ledPin, HIGH);
}
}
if(menu == 3)
{
if(right == 1)
{
lcd.setCursor(0, 3);
lcd.print("Closed ");
lcd.setCursor(10, 3);
lcd.print("Open <<");
Motor.step(2048);
delay(1000);
}
if(left == 1)
{
lcd.setCursor(0, 3);
lcd.print("Closed <<");
lcd.setCursor(10, 3);
lcd.print("Open ");
Motor.step(-2048);
delay(1000);
}
}
if(menu == 4)
{
if(right||left == 1)
{
lcd.setCursor(0, 2);
lcd.print("Luftqulitaet=");
Sensorwert = analogRead(0);
Sensorwert = (Sensorwert / 6);
Serial.println("Luftqualität : ");
Serial.println(Sensorwert, DEC);
Serial.println();
if(Sensorwert >= 50)
{
lcd.setCursor(14,2);
lcd.print("SCHLECHT");
}
else(Sensorwert <=49);
{
lcd.setCursor(14,2);
lcd.print("GUT");
}
}
}
if(menu == 5)
{
if(right == 1)
{
lcd.setCursor(0, 3);
lcd.print("Off ");
lcd.setCursor(10, 3);
lcd.print("On <<");
digitalWrite(ledPin, HIGH);
}
if(left == 1)
{
lcd.setCursor(0, 3);
lcd.print("Off <<");
lcd.setCursor(10, 3);
lcd.print("On ");
digitalWrite(ledPin, LOW);
}
}
if(menu == 6)
{
if(right == 1)
{
lcd.setCursor(0, 3);
lcd.print("Off ");
lcd.setCursor(10, 3);
lcd.print("On <<");
digitalWrite(L_Haus, HIGH);
}
if(left == 1)
{
lcd.setCursor(0, 3);
lcd.print("Off <<");
lcd.setCursor(10, 3);
lcd.print("On ");
digitalWrite(L_Haus, LOW);
}
}
if(menu == 7)
{
if(right||left == 1) //Überlegen was man hinschreiben könnte; Zeit anzeigen lassen wie lange die Ampel noch dauert
{
lcd.setCursor(0, 3);
lcd.print("druecken <<");
delay(3000);
digitalWrite(GRUEN, LOW);
digitalWrite(GELB, HIGH);
delay(1000);
digitalWrite(GELB, LOW);
digitalWrite(ROT, HIGH);
delay(3000);
digitalWrite(F_ROT, LOW);
digitalWrite(F_GRUEN, HIGH);
delay(6000);
digitalWrite(F_GRUEN, LOW);
digitalWrite(F_ROT, HIGH);
delay(1000);
digitalWrite(GELB, HIGH);
delay(1000);
digitalWrite(ROT, LOW);
delay(500);
digitalWrite(GELB, LOW);
digitalWrite(GRUEN, HIGH);
}
}
if(menu == 8)
{
if(right == 1)
{
lcd.setCursor(0, 2);
lcd.print("Akkustand=");
}
}
if(menu == 9)
{
if(right||left == 1)
{
lcd.setCursor(0, 2);
lcd.print("Uhrzeit:");
//lcd.print(tm.Hour);
lcd.print(':');
//lcd.print(tm.Minute);
lcd.print(':');
//print2digits(tm.Second);
lcd.setCursor(0, 3);
lcd.print("Datum:");
//lcd.print(tm.Day);
lcd.print('/');
//lcd.print(tm.Month);
lcd.print('/');
//lcd.print(tmYearToCalendar(tm.Year));
}
}
}
template< typename T, size_t NumberOfSize >
size_t MenuItemsSize(T (&) [NumberOfSize]){ return NumberOfSize; }
int numberOfMenuItems = MenuItemsSize(MenuItems) - 1;
int currentMenuItem = 0;
int previousMenuItem = 1;
byte button_flag = 0;
unsigned long previousMillis = millis();
const int note = 4699;
void beepsOnce()
{
tone(tweeterPin, note, 125);
delay(60);
noTone(tweeterPin);
}
void loop()
{
//////////MENU/////////////////////////////////////////////////////////////////////////////////////////
if(digitalRead(rightButtonPin) == LOW && button_flag == 0)
{
menuFunctions(currentMenuItem + 1, 1, 0);
button_flag = 1;
previousMillis = millis();
beepsOnce();
}
if(digitalRead(leftButtonPin) == LOW && button_flag == 0)
{
menuFunctions(currentMenuItem + 1, 0, 1);
button_flag = 1;
previousMillis = millis();
beepsOnce();
}
if(digitalRead(upButtonPin) == LOW && button_flag == 0)
{
++currentMenuItem;
if(currentMenuItem > numberOfMenuItems )
{
currentMenuItem = numberOfMenuItems ;
}
button_flag = 1;
previousMillis = millis();
beepsOnce();
}
else if(digitalRead(downButtonPin) == LOW && button_flag == 0)
{
currentMenuItem--;
if(currentMenuItem < 0)
{
currentMenuItem = 0;
}
button_flag = 1;
previousMillis = millis();
beepsOnce();
}
if(currentMenuItem != previousMenuItem)
{
lcd.clear();
lcd.setCursor(2, 0);
lcd.print(MenuItems [currentMenuItem]);
menuFunctions(currentMenuItem + 1, 0, 0);
previousMenuItem = currentMenuItem;
}
if(millis() - previousMillis >= 400)
{
previousMillis = millis();
button_flag = 0;
}
//////RealTimeClock///////////////////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
/////RealTimeClock//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////`
code RTC:
`
#include <TimeLib.h>
#include <DS1307RTC.h>
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
lcd.init();
lcd.backlight();
}
void loop() {
//////RealTimeClock///////////////////////////////////////////
lcd.begin(16, 2);
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print("Ok, Time = ");
print2digits(tm.Hour);
lcd.setCursor(0, 0);
lcd.print(tm.Hour);
Serial.write(':');
lcd.print(':');
print2digits(tm.Minute);
lcd.print(tm.Minute);
Serial.write(':');
lcd.print(':');
print2digits(tm.Second);
lcd.print(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
lcd.setCursor(0, 1);
lcd.print(tm.Day);
Serial.write('/');
lcd.print('/');
Serial.print(tm.Month);
lcd.print(tm.Month);
Serial.write('/');
lcd.print('/');
Serial.print(tmYearToCalendar(tm.Year));
lcd.print(tmYearToCalendar(tm.Year));
Serial.println();
}
else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(9000);
}
delay(1000);
}
//////////////////////////////////////////////////////////////////////////
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
lcd.print('0');
}
Serial.print(number);
}`
