Ich möchte das Backlight der LCD (I2C) nachdem 5 - 10 Sekunden keine Taste gedrückt wurde deaktivieren.
Ist das so einfach möglich?
In Zeile 95 musste ich das Backlight aktivieren. Das war vom Ersteller des Sketches nicht vorgesehen. Aber ohne diesen Eintrag sieht man ja nichts auf der LCD.
/*----------[ Dosierpumpe Version 4.12 )----------
Softwareversion 9.12 | Copyright 2016
By Stefan Schepperle
stefan@schepperle.info
-----------[ ATMega 328 [Arduino] )----------*/
/*-----[ Bibliotheken einlesen )-----*/
#include <DS3232RTC.h>
#include <Time.h>
#include <EEPROM.h>
#include <Wire.h>
#define ADDR_RTCDS3231 0x68
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f, 20, 4); // set the LCD address to 0x27 for a 20 chars and 4 line display
byte decToBcd(byte val) {
return ( (val / 10 * 16) + (val % 10) );
}
byte bcdToDec(byte val) {
return ( (val / 16 * 10) + (val % 16) );
}
/*-----[ Variablen deklarieren )-----*/
const int tasterm = 12; // Taster Mitte
const int tastero = 11; // Taster oben
const int tasterl = 10; // Taster links
const int tasteru = 9; // Taster unten
const int tasterr = 8; // Taster rechts
int pumpe1 = 7; // Pumpe 1 Ausgang
int pumpe2 = 6; // Pumpe 2 Ausgang
int pumpe3 = 5; // Pumpe 3 Ausgang
int pumpschutz1 = 0;
int pumpschutz2 = 0;
int pumpschutz3 = 0;
int x = 1; int y = 0;
long pumpleistung1; long pumpleistung2; long pumpleistung3;
int pumpe1_time_h = EEPROM.read(3); int pumpe2_time_h = EEPROM.read(4); int pumpe3_time_h = EEPROM.read(5);
int pumpe1_time_m = EEPROM.read(6); int pumpe2_time_m = EEPROM.read(7); int pumpe3_time_m = EEPROM.read(8);
int pumpe1_ml = EEPROM.read(0); int pumpe2_ml = EEPROM.read(1); int pumpe3_ml = EEPROM.read(2);
int pumpe1_ml_s = EEPROM.read(9); int pumpe2_ml_s = EEPROM.read(10); int pumpe3_ml_s = EEPROM.read(11);
int Std = 0; int Min = 0; int Tag = 1; int Mon = 1; int Jahr = 2000;
char pause_hour = 0; char pause_min = 0; char pause_day = 0; char pause_month = 0;
/*-----[ Zeitmodul DS3231 einlesen und aktivieren )-----*/
void setDS3231time(int second, int minute, int hour, int ndofweek, int dday, int dmonth, int dyear)
{
Wire.beginTransmission(ADDR_RTCDS3231);
Wire.write(0);
Wire.write(decToBcd(second)); // Sekunden setzen
Wire.write(decToBcd(minute)); // Minuten setzen
Wire.write(decToBcd(hour)); // Stunden setzen
Wire.write(decToBcd(ndofweek)); // Wochentag setzen
Wire.write(decToBcd(dday)); // Tag setzen
Wire.write(decToBcd(dmonth)); // Monat setzen
Wire.write(decToBcd(dyear)); // Jahr Setzen
//Wire.endTransmission();
}
/*-----[ Einstellungen einlesen )-----*/
void setup(void)
{
Serial.begin(9600);
setSyncProvider(RTC.get); // Funktion zum RTC Modul
if (timeStatus() != timeSet)
Serial.println("Zum synchronisieren mit dem RTC Modul");
else
Serial.println("Zeit und Datum wurden gespeichert");
// Ausgänge festlegen
pinMode(pumpe1, OUTPUT); digitalWrite(pumpe1, HIGH);
pinMode(pumpe2, OUTPUT); digitalWrite(pumpe2, HIGH);
pinMode(pumpe3, OUTPUT); digitalWrite(pumpe3, HIGH);
// Eingänge Festlegen
pinMode(tasterm, INPUT);
pinMode(tastero, INPUT);
pinMode(tasterl, INPUT);
pinMode(tasteru, INPUT);
pinMode(tasterr, INPUT);
lcd.begin(20, 4); // LCD Inizialisieren
lcd.backlight(); // Backlight dauerhaft an
/*-----[ Bildschirm aufbauen )-----*/
lcd.setCursor(0, 1);
lcd.print("-Arduino-");
lcd.setCursor(2, 2);
lcd.print("Aqua Dosierpumpe");
lcd.setCursor(0, 3);
lcd.print(" ~ Setup o Info");
}
void loop() {
if (hour() < 10) { // wenn kleiner 10 schreibe eine 0 davor
lcd.setCursor(0, 0); lcd.print("0"); pause_hour = 1;
}
else pause_hour = 0;
if (minute() < 10) { // wenn kleiner 10 schreibe eine 0 davor
lcd.setCursor(3, 0); lcd.print("0"); pause_min = 4;
}
else pause_min = 3;
if (day() < 10) { // wenn kleiner 10 schreibe eine 0 davor
lcd.setCursor(10, 0); lcd.print("0"); pause_day = 11;
}
else pause_day = 10;
if (month() < 10) { // wenn kleiner 10 schreibe eine 0 davor
lcd.setCursor(13, 0); lcd.print("0"); pause_month = 14;
}
else pause_month = 13;
lcd.setCursor(5, 0); lcd.print(" ");
lcd.setCursor(pause_hour, 0); //Start at character 4 on line 0
lcd.print(hour()); lcd.print(":");
lcd.setCursor(pause_min, 0); lcd.print(minute());
lcd.setCursor(pause_day, 0); lcd.print(day()); lcd.print(".");
lcd.setCursor(pause_month, 0); lcd.print(month()); lcd.print("."); lcd.print(year());
if (digitalRead(tasterr) == HIGH)hauptmenue(1);
if (digitalRead(tasterm) == HIGH)uebersicht(1) ;
// Ermittung wann und wielange gepumpt werden muss
pumpleistung1 = 1020.0 / (pumpe1_ml_s / 100.0); pumpleistung2 = 1020.0 / (pumpe2_ml_s / 100.0); pumpleistung3 = 1020.0 / (pumpe3_ml_s / 100.0);
if (pumpschutz1 == 0) {
if (hour() == pumpe1_time_h && minute() == pumpe1_time_m) {
pumpschutz1 = 1;
digitalWrite(pumpe1, LOW);
delay (pumpleistung1 * pumpe1_ml);
digitalWrite(pumpe1, HIGH);
}
}
if (minute() + 1 == pumpe1_time_m) {
pumpschutz1 = 0;
}
if (pumpschutz2 == 0) {
if (hour() == pumpe2_time_h && minute() == pumpe2_time_m) {
pumpschutz2 = 1;
digitalWrite(pumpe2, LOW);
delay (pumpleistung2 * pumpe2_ml);
digitalWrite(pumpe2, HIGH);
}
}
if (minute() + 1 == pumpe2_time_m) {
pumpschutz2 = 0;
}
if (pumpschutz3 == 0) {
if (hour() == pumpe3_time_h && minute() == pumpe3_time_m) {
pumpschutz3 = 1;
digitalWrite(pumpe3, LOW);
delay (pumpleistung3 * pumpe3_ml);
digitalWrite(pumpe3, HIGH);
}
}
if (minute() + 1 == pumpe3_time_m) {
pumpschutz3 = 0;
}
}