Clock display improved / cleaned up.

This commit is contained in:
Dirk Jahnke 2019-01-25 20:23:10 +01:00
parent 93a34e2918
commit 738ef9e512
1 changed files with 56 additions and 6 deletions

View File

@ -12,6 +12,8 @@
#define DISPLAY_CS_PIN D6
#define VERTICAL_BAR_STARTS_TOP false
#define DEBUG_RELAYS false
#define DEBUG_DISPLAY false
#define DEBUG_LVL 0
#include <Arduino.h>
#include <IOTAppStory.h>
@ -58,7 +60,7 @@ WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000);
// Field default values
char *clockName = "FastClk ";
char *clockName = "FREMO";
char *clockSpeed_modelMsPerRealSec_String = "250";
int clockSpeed_modelMsPerRealSec = 250;
char *relay1Pin_String = "D1";
@ -68,7 +70,14 @@ char *relayHoldTime_ms_String = "200";
int relayHoldTime_ms = 200;
char *relayMinOffTime_ms_String = "100";
int relayMinOffTime_ms = 100;
int displayRefresh_ms = 200;
// Clock Display Config Parameter
static char * displayClockNameEvery_ms_String = "16000";
static char * displayClockNameDuration_ms_String = "1200";
static uint32_t displayClockNameEvery_ms = 16000;
static uint32_t displayClockNameDuration_ms = 1200;
static uint32_t doNotShowClockNameBeforeAndAfterMinuteChange_s = 2;
void setupIAS(void) {
#if defined ESP8266
@ -87,6 +96,8 @@ void setupIAS(void) {
// define fields
IAS.addField(clockName, "Clock Name", 8, 'T');
IAS.addField(clockSpeed_modelMsPerRealSec_String, "Model MilliSec per Real Sec", 8, 'N');
IAS.addField(displayClockNameEvery_ms_String, "Display clock name every (ms)", 5, 'N');
IAS.addField(displayClockNameDuration_ms_String, "Display clock name duration (ms)", 5, 'N');
IAS.addField(relay1Pin_String, "Pin Relay 1", 2, 'P');
IAS.addField(relay2Pin_String, "Pin Relay 2", 2, 'P');
IAS.addField(relayHoldTime_ms_String, "Relay hold time (ms)", 3, 'N');
@ -148,6 +159,8 @@ void setupIAS(void) {
relay2Pin = IAS.dPinConv(relay2Pin_String);
relayHoldTime_ms = atoi(relayHoldTime_ms_String);
relayMinOffTime_ms = atoi(relayMinOffTime_ms_String);
displayClockNameEvery_ms = atoi(displayClockNameEvery_ms_String);
displayClockNameDuration_ms = atoi(displayClockNameDuration_ms_String);
Serial.println(F("Configuration used:"));
Serial.print(F("Relay1 Pin: ")); Serial.println(relay1Pin);
@ -155,6 +168,9 @@ void setupIAS(void) {
Serial.print(F("Clock speed: ")); Serial.print(clockSpeed_modelMsPerRealSec); Serial.println(F(" model ms per real sec"));
Serial.print(F("Relay hold time (ms): ")); Serial.println(relayHoldTime_ms);
Serial.print(F("Relay min off time (ms): ")); Serial.println(relayMinOffTime_ms);
Serial.print(F("Clock speed (model ms per real time s): ")); Serial.println(clockSpeed_modelMsPerRealSec);
Serial.print(F("Show clock name every (ms): ")); Serial.println(displayClockNameEvery_ms);
Serial.print(F("Show clock name for (ms): ")); Serial.println(displayClockNameDuration_ms);
}
void setupRelays(int relay1Pin, int relay2Pin) {
@ -191,14 +207,18 @@ void setupDisplay() {
1, 0xff, /* vertical bar completely set */
}; // columns from right to left, each byte is a single column
#endif
static uint8_t newZero[] = {0x05, 0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00};
P.begin();
// P.setZoneEffect(0, true, PA_FLIP_LR);
P.setIntensity(1);
for (charCode=1; charCode<=8; ++charCode) {
for (charCode=1; charCode<=9; ++charCode) {
P.addChar(charCode, verticalBarFont+2*(charCode-1));
}
char intro[] = {':', '-', ')', ' ', 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00};
// replace the 0 characters, we do not like the "slash"
P.addChar('0', newZero);
P.print(intro);
}
void setup(void)
@ -299,8 +319,9 @@ void loop(void)
minutes = (millis() / 60 * 1000) % 60;
seconds = (millis() / 1000) % 60;
}
minuteProgressIndicator = seconds/7.5 + 1; // char code 1-8 show vertical bar
snprintf(timeBuffer, 10, "%c %02d:%02d", minuteProgressIndicator, hours, minutes);
minuteProgressIndicator = seconds/6.7 + 1; // char code 1-8 show vertical bar
if (minuteProgressIndicator > 9) minuteProgressIndicator = 9;
snprintf(timeBuffer, 10, "%c %2d:%02d", minuteProgressIndicator, hours, minutes);
/* DEBUG */
#if DEBUG_RELAYS
@ -327,6 +348,7 @@ void loop(void)
currentDisplayState = seconds / 5; // Value 0..11
#if DEBUG_DISPLAY
static bool executed = false;
if (recentDisplayState != currentDisplayState) executed = false;
@ -352,15 +374,43 @@ void loop(void)
break;
case 7: ExecOnce(P.print(timeBuffer)); break;
case 8:
/*snprintf(debugMsg, MsgSize, "t%cr%c", timeClientInitialized ? 'x':'-', (relaysState == RELAY_STATE_OFF)?'-':(relaysState == RELAY_STATE_ON_EVEN_MINUTE?'e':'o'));
snprintf(debugMsg, MsgSize, "t%cr%c", timeClientInitialized ? 'x':'-', (relaysState == RELAY_STATE_OFF)?'-':(relaysState == RELAY_STATE_ON_EVEN_MINUTE?'e':'o'));
ExecOnce(P.print(debugMsg));
break;*/
break;
case 9: ExecOnce(P.print(timeBuffer)); break;
case 10: if (lastSeconds != seconds) P.printf("%c %d", minuteProgressIndicator, seconds); break;
case 11: ExecOnce(P.print(timeBuffer)); break;
default: ExecOnce(P.print("default")); break;
}
recentDisplayState = currentDisplayState;
#else
// standard procedure to display
static uint32_t last_clock_refresh = 0;
static uint32_t lastTimeClockNameShown = 0;
static boolean showingClockName = false;
if (showingClockName) {
if (millis() - lastTimeClockNameShown > displayClockNameDuration_ms) {
// stop showingClockName
showingClockName = false;
}
} else {
if ((millis() - lastTimeClockNameShown > displayClockNameEvery_ms)
&& (seconds < 60-doNotShowClockNameBeforeAndAfterMinuteChange_s)
&& (seconds > doNotShowClockNameBeforeAndAfterMinuteChange_s)) {
P.print(clockName);
lastTimeClockNameShown = millis();
showingClockName = true;
} else {
// showing clock
if (millis() - last_clock_refresh > displayRefresh_ms) {
P.print(timeBuffer);
last_clock_refresh = millis();
}
}
}
#endif
// toggle relays
if (lastMinutes != minutes) {