Bladeren bron

Ещё раз переделал авторегулировку яркости. Поправил вывод времени.

Vladimir N. Shilov 9 jaren geleden
bovenliggende
commit
e29d1f0a96
2 gewijzigde bestanden met toevoegingen van 48 en 55 verwijderingen
  1. 43 50
      app/application.cpp
  2. 5 5
      include/configuration.h

+ 43 - 50
app/application.cpp

@@ -75,7 +75,7 @@ void init()
 
 void showWatch()
 {
-	static uint8_t oldHour, oldMinute, old_si;
+	static uint8_t old_si = 0xFF;
 	static time_t oldTime;
 
 	Time = SystemClock.now();
@@ -127,21 +127,8 @@ void showWatch()
 	// Новая секунда
 		oldTime = Time;
 
-		// Обновление индикаторов
-		if (oldMinute != dt.Minute)
-		{
-			oldMinute = dt.Minute;
-
-			MAX7219_writeData(MAX7219_DIGIT3, dt.Minute / 10);
-			MAX7219_writeData(MAX7219_DIGIT4, dt.Minute % 10);
-
-			if (oldHour != dt.Hour)
-			{
-				oldHour = dt.Hour;
-				MAX7219_writeData(MAX7219_DIGIT0, dt.Hour / 10);
-				MAX7219_writeData(MAX7219_DIGIT1, dt.Hour % 10);
-			}
-		}
+		// Запланируем обновление индикаторов
+		showHighTimer.initializeMs(10, showTime).startOnce();
 
 		switch(dt.Second / 15)
 		{
@@ -166,40 +153,40 @@ void showWatch()
 			switch (si)
 			{
 			case 0:
-				showLowTimer.initializeMs(10, showTemperature).startOnce();
+				showLowTimer.initializeMs(20, showTemperature).startOnce();
 				break;
 			case 1:
-				showLowTimer.initializeMs(10, showHumidity).startOnce();
+				showLowTimer.initializeMs(20, showHumidity).startOnce();
 				break;
 			case 2:
-				showLowTimer.initializeMs(10, showTemperature).startOnce();
+				showLowTimer.initializeMs(20, showTemperature).startOnce();
 				break;
 			case 3:
-				showLowTimer.initializeMs(10, showHumidity).startOnce();
+				showLowTimer.initializeMs(20, showHumidity).startOnce();
 				break;
 			case 4:
-				showLowTimer.initializeMs(10, showTemperature).startOnce();
+				showLowTimer.initializeMs(20, showTemperature).startOnce();
 				break;
 			case 5:
-				showLowTimer.initializeMs(10, showHumidity).startOnce();
+				showLowTimer.initializeMs(20, showHumidity).startOnce();
 				break;
 			case 6:
-				showLowTimer.initializeMs(10, showTemperature).startOnce();
+				showLowTimer.initializeMs(20, showTemperature).startOnce();
 				break;
 			case 7:
-				showLowTimer.initializeMs(10, showHumidity).startOnce();
+				showLowTimer.initializeMs(20, showHumidity).startOnce();
 				break;
 			case 8:
-				showLowTimer.initializeMs(10, showTemperature).startOnce();
+				showLowTimer.initializeMs(20, showTemperature).startOnce();
 				break;
 			case 9:
-				showLowTimer.initializeMs(10, showHumidity).startOnce();
+				showLowTimer.initializeMs(20, showHumidity).startOnce();
 				break;
 			case 10:
-				showLowTimer.initializeMs(10, showTemperature).startOnce();
+				showLowTimer.initializeMs(20, showTemperature).startOnce();
 				break;
 			case 11:
-				showLowTimer.initializeMs(10, showHumidity).startOnce();
+				showLowTimer.initializeMs(20, showHumidity).startOnce();
 				break;
 			}
 		}
@@ -211,18 +198,33 @@ void showWatch()
  */
 void showTime(void)
 {
-	// уберём ведущий ноль у часов
-	if (dt.Hour >= 9)
-	{
-		MAX7219_writeData(MAX7219_DIGIT0, dt.Hour / 10);
-	}
-	else
+	static uint8_t oldHour = 0xFF, oldMinute = 0xFF;
+
+	if (oldMinute != dt.Minute)
 	{
-		MAX7219_writeData(MAX7219_DIGIT0, MAX7219_CHAR_BLANK);
+		oldMinute = dt.Minute;
+
+		MAX7219_writeData(MAX7219_DIGIT3, dt.Minute / 10);
+		MAX7219_writeData(MAX7219_DIGIT4, dt.Minute % 10);
+
+		if (oldHour != dt.Hour)
+		{
+			oldHour = dt.Hour;
+
+			// уберём ведущий ноль у часов
+			if (dt.Hour < 10)
+			{
+				MAX7219_writeData(MAX7219_DIGIT0, MAX7219_CHAR_BLANK);
+			}
+			else
+			{
+				MAX7219_writeData(MAX7219_DIGIT0, dt.Hour / 10);
+			}
+			MAX7219_writeData(MAX7219_DIGIT1, dt.Hour % 10);
+
+		}
 	}
-	MAX7219_writeData(MAX7219_DIGIT1, dt.Hour % 10);
-	MAX7219_writeData(MAX7219_DIGIT3, dt.Minute / 10);
-	MAX7219_writeData(MAX7219_DIGIT4, dt.Minute % 10);
+
 }
 
 /*
@@ -270,25 +272,16 @@ void setBright(void)
 	// приведём к диапазону 0-16
 	uint8_t bright = (1024 - system_adc_read()) >> 6;
 
-	// растянем диапазон значений 10-16
-	if (bright > 14)
-	{
-		bright = 14;
-	}
-	if (bright >= 7)
+	// переведём диапазон значений 9-16/1 в 1-15/2
+	if (bright > 8)
 	{
-		bright = ( (bright - 7) * 2 ) + 1;
+		bright = ( (bright - 9) * 2 ) + 1;
 	}
 	else
 	{
 		bright = 1;
 	}
 
-	/*
-	if (bright < 1) { bright = 1; }
-	if (bright > 15) { bright = 15; }
-	*/
-
 	MAX7219_writeData(MAX7219_MODE_INTENSITY, bright);
 }
 

+ 5 - 5
include/configuration.h

@@ -21,11 +21,11 @@
 #define DHT_PIN 2
 
 // MAX7219
-#define PIN_DIN                 14
-#define PIN_CLK                 13
-#define PIN_LOAD                12
-#define MAX7219_DIGITS          8
-#define MAX7219_DIG_MASK        0xDB
+#define PIN_DIN			14
+#define PIN_CLK			13
+#define PIN_LOAD		12
+#define MAX7219_DIGITS		8
+#define MAX7219_DIG_MASK	0xDB
 // ^^ reverse of -- 11011 011 -- без BCD декодирования 2, 5
 
 #define CLOCK_CONFIG_FILE ".clock.conf" // leading point for security reasons :)