hallo,
Habn problem bzw versuche grade eine DCF77 Uhr auf einem GLCD mit anzeige zu realisieren.
Nun habe ich das Problem das die angzeigten bereiche flackern bzw zu oft oder zu schnell neu schreiben und es dadurch scheiße aussieht. genauso die werte vom Cap sensor (wasserstand capacitiv)
der code:
#include <UTFT.h>
#include <CapacitiveSensor.h>
#include <DCF77.h>
#include <Time.h>
#include <UTouch.h>
#define DCF_PIN 23
#define DCF_INTERRUPT 23
time_t time;
extern uint8_t SmallFont[];
int count = 0 ;
const int maxpin = 8;
const int minpin = 9;
int maxpinstate = 0;
int minpinstate = 0;
long minlvl = 0;
long maxlvl = 0;
long offset = 0;
long prozent1 = 0;
long prozent2 = 0;
int firststart = 1;
uint8_t fileid;
uint16_t filetype;
DCF77 DCF = DCF77(DCF_PIN, DCF_INTERRUPT);
CapacitiveSensor liquidLevel = CapacitiveSensor(12, 13);
UTFT myGLCD(CTE50, 25, 26, 27, 28);
UTouch myTouch( 6, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600);
DCF.Start();
setSyncInterval(30);
setSyncProvider(DCF.getTime);
Serial.println("Start!");
pinMode(maxpin, INPUT);
pinMode(minpin, INPUT);
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
myGLCD.clrScr();
Serial.println("Waiting for DCF77 time ... ");
Serial.println("It will take at least 2 minutes until a first update can be processed.");
}
void loop()
{
time_t DCFtime = DCF.getTime(); // Check if new DCF77 time is available
count++ ;
maxpinstate = digitalRead(maxpin);
minpinstate = digitalRead(minpin);
//long total = liquidLevel.capacitiveSensor(50);
long total = 0;
myGLCD.print(" ", 280 , 10);
myGLCD.printNumI(total, 280 , 10);
if (firststart == 1) {
Serial.println("Warte auf MIN Wert...");
myGLCD.print("Warte auf MIN Wert...", 30, 20);
Serial.println("Warte auf MAX Wert...");
myGLCD.print("Warte auf MAX Wert...", 30, 50);
// if (minpinstate == HIGH) {
if (count == 50) {
Serial.println("MIN WERT GESETZT auf:");
myGLCD.print("MIN WERT GESETZT auf:", 30, 35);
minlvl = total;
Serial.print(minlvl);
myGLCD.printNumI(minlvl, 200, 35);
delay(500);
}
// if (maxpinstate == HIGH) {
if (count == 100) {
Serial.println("MAX WERT GESETZT auf:");
myGLCD.print("MAX WERT GESETZT auf:", 30, 65);
maxlvl = total;
Serial.print(maxlvl);
myGLCD.printNumI(maxlvl, 200, 65);
delay(500);
myGLCD.clrScr();
firststart = 0;
}
}
if (firststart == 0) {
prozent1 = maxlvl / 100;
prozent2 = total / prozent1;
myGLCD.print(" ", 40, 10);
myGLCD.print(" ", 40, 30);
myGLCD.print(" ", 40, 50);
myGLCD.print(" ", 40, 70);
myGLCD.print(" ", 40, 90);
myGLCD.print(" ", 40, 110);
myGLCD.print("Max:", 10, 10);
myGLCD.print("Min:", 10, 30);
myGLCD.print("LVL:", 10, 50);
myGLCD.print("Hour:", 10, 70);
myGLCD.print("Min:", 10, 90);
myGLCD.print("Sek:", 10, 110);
myGLCD.printNumI(maxlvl, 40, 10);
myGLCD.printNumI(minlvl, 40, 30);
myGLCD.printNumI(prozent2, 40, 50);
myGLCD.printNumI(hour(), 45, 70);
myGLCD.printNumI(minute(), 45, 90);
myGLCD.printNumI(second(), 45, 110);
Serial.println("max:");
Serial.println(maxlvl);
Serial.println("min:");
Serial.println(minlvl);
Serial.println("prozent1:");
Serial.println(prozent1);
Serial.println("prozent2:");
Serial.println(prozent2);
}
// delay (400);
}
void printDigits(int digits) {
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if (digits < 10)
Serial.print('0');
Serial.print(digits);
}
unsigned long getDCFTime()
{
time_t DCFtime = DCF.getTime();
// Indicator that a time check is done
if (DCFtime != 0) {
Serial.print("X");
}
return DCFtime;
}