Browse Source

Продолжаю опыты с авторегулировкой яркости.

Vladimir N. Shilov 9 years ago
parent
commit
3923a782df
2 changed files with 40 additions and 19 deletions
  1. 7 1
      Changelog.txt
  2. 33 18
      app/application.cpp

+ 7 - 1
Changelog.txt

@@ -163,4 +163,10 @@ UDP Server тоже влез. Если я всё правильно понял,
 Статичечки, его знчение приведённые к уровням 0-16 имеют значимую величину
 в диапазоне оот 12 до 16, т.е. всего 4 значения.
 Попробую это дела как-то нормализовать.
- 
+
+Пробовал 12-16 растгивать -- сильно грубо.
+Сейчас сделал 7-14, лучше, но тоже не сильно нравится.
+Похоже, что простое приведение было лучше всего.
+
+Стало зависать постоянно, на ноге сброса -- 0.
+Вынес регулировку яркости в отдельную задачу -- прошло...

+ 33 - 18
app/application.cpp

@@ -15,6 +15,7 @@ DHT dht(DHT_PIN, DHT22);
 Timer procTimer, procRTimer;
 Timer displayTimer, tmpTimer;
 Timer showHighTimer, showLowTimer;
+Timer brightTimer;
 
 // Sensors values
 float SensorT, SensorH, SensorHI, SensorCR;
@@ -30,6 +31,7 @@ void showWatch(void);
 void showTime(void);
 void showTemperature(void);
 void showHumidity(void);
+void setBright(void);
 
 // NTP Client
 void
@@ -65,6 +67,7 @@ void init()
 	// 7-segment output
 	MAX7219_Init();
 	tmpTimer.initializeMs(10, MAX7219_FillMinus).startOnce();
+	brightTimer.initializeMs(1000, setBright).start();
 
 	// обновление экрана два раза в секунду
 	displayTimer.initializeMs(500, showWatch).start();
@@ -124,24 +127,6 @@ void showWatch()
 	// Новая секунда
 		oldTime = Time;
 
-		// Регулировка яркости индикаторов
-		// приведём к диапазону 0-16
-		uint8_t bright = (1024 - system_adc_read()) >> 6;
-		// растянем диапазон значений 12-16
-		if (bright > 11)
-		{
-			bright = ( (bright - 12) * 3 ) + 2;
-		}
-		else
-		{
-			bright = 1;
-		}
-		/*
-		if (bright < 1) { bright = 1; }
-		if (bright > 15) { bright = 15; }
-		*/
-		MAX7219_writeData(MAX7219_MODE_INTENSITY, bright);
-
 		// Обновление индикаторов
 		if (oldMinute != dt.Minute)
 		{
@@ -277,6 +262,36 @@ void showHumidity(void)
  }
  */
 
+/*
+ * Автоматическая регулировка яркости индикаторов
+ */
+void setBright(void)
+{
+	// приведём к диапазону 0-16
+	uint8_t bright = (1024 - system_adc_read()) >> 6;
+
+	// растянем диапазон значений 10-16
+	if (bright > 14)
+	{
+		bright = 14;
+	}
+	if (bright >= 7)
+	{
+		bright = ( (bright - 7) * 2 ) + 1;
+	}
+	else
+	{
+		bright = 1;
+	}
+
+	/*
+	if (bright < 1) { bright = 1; }
+	if (bright > 15) { bright = 15; }
+	*/
+
+	MAX7219_writeData(MAX7219_MODE_INTENSITY, bright);
+}
+
 /*
  * Читаем данные с DHT22, в случае неудачи -- данные остануться старыми.
  * меня это полностью устраивает.