Procházet zdrojové kódy

Поправил инициализацию MAX7219, слегка формил вывод инфы на экран

Vladimir N. Shilov před 9 roky
rodič
revize
4baa9d8a6c
4 změnil soubory, kde provedl 118 přidání a 83 odebrání
  1. 71 27
      app/application.cpp
  2. 24 24
      app/max7219.cpp
  3. 5 5
      app/webserver.cpp
  4. 18 27
      include/max7219.h

+ 71 - 27
app/application.cpp

@@ -62,11 +62,11 @@ void init()
 
 	WifiStation.waitConnection(connectOk, 20, connectFail); // We recommend 20+ seconds for connection timeout at start
 
-	// ðàç â ìèíóòó?
+	// раз в минуту?
 	procTimer.initializeMs(60000, process).start();
 	process();
 
-	// îáíîâëåíèå ýêðàíà äâà ðàçà â ñåêóíäó
+	// обновление �крана два раза в �екунду
 	displayTimer.initializeMs(500, showTime).start();
 }
 
@@ -75,51 +75,95 @@ void showTime()
 	static int8_t oldHour, oldMinute;
 	static time_t oldTime;
 	DateTime dt;
-	int16_t *year;
 
 	Time = SystemClock.now();
 
+	dt.setTime(Time);
+
+	/*
+	 * теперь в dt у на� �ледующее:
+	 * 	int8_t Hour;
+	 * 	int8_t Minute;
+	 * 	int8_t Second;
+	 * 	int16_t Milliseconds;
+	 * 	int8_t Day;
+	 * 	int8_t DayofWeek; -- Sunday is day 0
+	 * 	int8_t Month; // Jan is month 0
+	 * 	int16_t Year;  // Full Year numer
+	 */
+	int8_t si = dt.Second / 5;
+
 	if (oldTime != Time)
 	{
 		oldTime = Time;
-		dt.setTime(Time);
-
-		/*
-		 * òåïåðü â dt ó íàñ ñëåäóþùåå:
-		 * 	int8_t Hour;
-		 * 	int8_t Minute;
-		 * 	int8_t Second;
-		 * 	int16_t Milliseconds;
-		 * 	int8_t Day;
-		 * 	int8_t DayofWeek; -- Sunday is day 0
-		 * 	int8_t Month; // Jan is month 0
-		 * 	int16_t Year;  // Full Year numer
-		 */
+		switch (si)
+		{
+		case 0:
+		case 2:
+		case 4:
+		case 6:
+		case 8:
+		case 10:
+			MAX7219_writeData(MAX7219_DIGIT5, (int)(SensorT)/10);
+			MAX7219_writeData(MAX7219_DIGIT6, (int)(SensorT)%10);
+			MAX7219_writeData(MAX7219_DIGIT7, SYM_Temp);
+			break;
+		case 1:
+		case 3:
+		case 7:
+		case 9:
+			MAX7219_writeData(MAX7219_DIGIT5, (int)(SensorH)/10);
+			MAX7219_writeData(MAX7219_DIGIT6, (int)(SensorH)%10);
+			MAX7219_writeData(MAX7219_DIGIT7, SYM_H);
+			break;
+		case 5:
+		case 11:
+			MAX7219_writeData(MAX7219_DIGIT5, SYM_BLANK);
+			MAX7219_writeData(MAX7219_DIGIT6, dt.DayofWeek/10);
+			MAX7219_writeData(MAX7219_DIGIT7, dt.DayofWeek%10);
+			break;
+		}
 
-		MAX7219_writeData(MAX7219_DIGIT2, SYM_Minus);
 		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);
 			}
 		}
+
+		if (si != 5 || si != 11)
+		{
+			MAX7219_writeData(MAX7219_DIGIT0, dt.Hour/10);
+			MAX7219_writeData(MAX7219_DIGIT1, dt.Hour%10);
+			MAX7219_writeData(MAX7219_DIGIT2, SYM_Minus);
+			MAX7219_writeData(MAX7219_DIGIT3, dt.Minute/10);
+			MAX7219_writeData(MAX7219_DIGIT4, dt.Minute%10);
+		}
+		else if (si == 5 || si == 11)
+		{
+			MAX7219_writeData(MAX7219_DIGIT0, dt.Day/10);
+			MAX7219_writeData(MAX7219_DIGIT1, dt.Day%10);
+			MAX7219_writeData(MAX7219_DIGIT2, SYM_Minus);
+			MAX7219_writeData(MAX7219_DIGIT3, dt.Month/10);
+			MAX7219_writeData(MAX7219_DIGIT4, dt.Month%10);
+		}
+
 	}
 	else // time the same, output blank for "hh mm"
 	{
-		MAX7219_writeData(MAX7219_DIGIT2, SYM_Minus);
+		if (si != 5 || si != 11)
+		{
+			MAX7219_writeData(MAX7219_DIGIT2, SYM_BLANK);
+		}
 	}
 
 }
 
 /*
- * ×èòàåì è äàííûå ñ DHT22, â ñëó÷àå íåóäà÷è -- äàííûå îñòàíóòüñÿ ñòàðûìè.
- * ìåíÿ ýòî ïîëíîñòüþ óñòðàèâàåò.
+ * Читаем данные � DHT22, в �лучае неудачи -- данные о�тануть�� �тарыми.
+ * мен� �то полно�тью у�траивает.
  */
 void process()
 {
@@ -172,8 +216,8 @@ void process()
 	else
 	{
 		/*
-		 *  ñëó÷àå, åñëè îò äàò÷èêà íè÷åãî íå ïîëó÷èëè, çàïóñòèì ïîâòîðíûé îïðîñ ÷åðåç
-		 * 10 ñåêóíä, íî íå áîëåå 5 ðàç ïîäðÿä.
+		 * В �лучае, е�ли от датчика ничего не получили, запу�тим повторный опро� через
+		 * 10 �екунд, но не более 5 раз подр�д.
 		 */
 		if (status < 6)
 		{
@@ -193,7 +237,7 @@ void connectOk()
 }
 
 /*
- * â ñëó÷àå íåóäà÷è ïîäêëþ÷åíèÿ ïîäíèìàåì òî÷êó äîñòóïà áåç àâòîðèçàöèè
+ * в �лучае неудачи подключени� поднимаем точку до�тупа без авторизации
  */
 void connectFail()
 {

+ 24 - 24
app/max7219.cpp

@@ -4,7 +4,7 @@
  * For more information see
  * http://www.adnbr.co.uk/articles/max7219-and-7-segment-displays
  *
- *  Created on: 29 ñ³÷. 2016
+ *  Created on: 29 �іч. 2016
  *      Author: shilov
  */
 
@@ -13,7 +13,7 @@
 #include "configuration.h"
 #include "max7219.h"
 
-// çàù¸ëêà
+// защёлка
 #define MAX7219_LOAD1			PinSet(PIN_LOAD)
 #define MAX7219_LOAD0			PinRes(PIN_LOAD)
 
@@ -21,54 +21,54 @@
 #define MAX7219_OFF				0x00
 #define MAX7219_BRIGHT			0x08
 
-// ïåðåâîä ÷èñëà 0-7 â íîìåð èíäèêàòîðà
+// перевод чи�ла 0-7 в номер индикатора
 const uint8_t max7219_dig[8] = {
 	0x05,0x01,0x07,0x03,0x04,0x08,0x06,0x02
 };
 
-// ïðîãðàììíûé SPI. Âûâîäèò áàéò íà÷èíàÿ ñî ñòàðøåãî áèòà
-// âûõîäíûå ïèíû -- SCK, MOSI
+// программный SPI. Выводит байт начина� �о �таршего бита
+// выходные пины -- SCK, MOSI
 static void spi_SendByte (uint8_t DataByte) {
-	uint8_t i; // ñ÷åò÷èê áèò
+	uint8_t i; // �четчик бит
 
 	for (i=8; i!=0; i--) {
-		PinRes(PIN_CLK); // âûäàëè ñòðîá
-		if (bit_is_set(DataByte,7)) { // åñëè áèò 7 == 1
+		PinRes(PIN_CLK); // выдали �троб
+		if (bit_is_set(DataByte,7)) { // е�ли бит 7 == 1
 			PinSet(PIN_DIN); // MOSI = 1
-		} else { // åñëè áèò 7 == 0
+		} else { // е�ли бит 7 == 0
 			PinRes(PIN_DIN); // MOSI = 0
 		}
-		PinSet(PIN_CLK); // çàù¸ëêíóëè ñòðîá
-		DataByte <<= 1; // ñäâèã âëåâî íà 1 áèò
+		PinSet(PIN_CLK); // защёлкнули �троб
+		DataByte <<= 1; // �двиг влево на 1 бит
 	}
 
 }
 
 void MAX7219_writeData(uint8_t reg, uint8_t data)
 {
-    MAX7219_LOAD0; // îïóñòèëè çàù¸ëêó
+    MAX7219_LOAD0; // опу�тили защёлку
 //    spi_SendByte(reg);
 //    spi_SendByte(data);
 
     // software spi
-	uint8_t i; // ñ÷åò÷èê áèò
+	uint8_t i; // �четчик бит
 	uint16_t sdata = (reg<<8) || data;
 	for (i=16; i!=0; i--) {
-		PinRes(PIN_CLK); // âûäàëè ñòðîá
-		if (bit_is_set(sdata,15)) { // åñëè ñòàðøèé áèò == 1
+		PinRes(PIN_CLK); // выдали �троб
+		if (bit_is_set(sdata,15)) { // е�ли �тарший бит == 1
 			PinSet(PIN_DIN); // MOSI = 1
-		} else { // åñëè ñòàðøèé áèò == 0
+		} else { // е�ли �тарший бит == 0
 			PinRes(PIN_DIN); // MOSI = 0
 		}
-		PinSet(PIN_CLK); // çàù¸ëêíóëè ñòðîá
-		sdata <<= 1; // ñäâèã âëåâî íà 1 áèò
+		PinSet(PIN_CLK); // защёлкнули �троб
+		sdata <<= 1; // �двиг влево на 1 бит
 	}
 
-    MAX7219_LOAD1; // ïîäíÿëè çàù¸ëêó
+    MAX7219_LOAD1; // подн�ли защёлку
 }
 
 void MAX7219_Init(void) {
-// íàñòðîéêà ïèíîâ SPI
+// на�тройка пинов SPI
 	pinMode(PIN_LOAD, OUTPUT);
 	pinMode(PIN_DIN, OUTPUT);
 	pinMode(PIN_CLK, OUTPUT);
@@ -76,10 +76,10 @@ void MAX7219_Init(void) {
 	PinSet(PIN_DIN);
 	PinSet(PIN_CLK);
 
-//	Íàñòðîéêà MAX71219
-	MAX7219_writeData(MAX7219_MODE_DECODE, 0x00); // âñå áåç BCD äåêîäèðîâàíèÿ
+//	�а�тройка MAX71219
+	MAX7219_writeData(MAX7219_MODE_DECODE, 0x7B); // без BCD декодировани� 2 и 7
 	MAX7219_writeData(MAX7219_MODE_SCAN_LIMIT, MAX7219_DIGITS - 1); // Scan limit runs from 0.
-	MAX7219_writeData(MAX7219_MODE_INTENSITY, MAX7219_BRIGHT); // ÿðêîñòü èç 16
-	MAX7219_writeData(MAX7219_MODE_POWER,MAX7219_ON); // âêëþ÷èëè ïèòàíèå
+	MAX7219_writeData(MAX7219_MODE_INTENSITY, MAX7219_BRIGHT); // �рко�ть: от 1 до 31 � шагом в 2
+	MAX7219_writeData(MAX7219_MODE_POWER,MAX7219_ON); // включили питание
 
 }

+ 5 - 5
app/webserver.cpp

@@ -23,7 +23,7 @@ void onIndex(HttpRequest &request, HttpResponse &response)
 	vars["RH"] = String(SensorH, 0);
 	vars["HI"] = String(SensorHI, 0);
 	vars["CR"] = String(SensorCR, 0);
-	vars["CF"] = StrCF; // ýòî ïåðâîå ìåñòî, ãäå îíî èñïîëüçóåòñÿ
+	vars["CF"] = StrCF; // �то первое ме�то, где оно и�пользует��
 	vars["ADC"] = String(system_adc_read());
 	vars["VDD"] = String(system_get_vdd33());
 	vars["LASTNTP"] = String(SystemClock.now() - NTPLastUpdate);
@@ -117,7 +117,7 @@ void onConfiguration(HttpRequest &request, HttpResponse &response)
 }
 
 /*
- * ðîóòåð
+ * роутер
  */
 void onFile(HttpRequest &request, HttpResponse &response)
 {
@@ -148,7 +148,7 @@ void onApiDoc(HttpRequest &request, HttpResponse &response)
 
 /*
  * Get json data
- * äàííûå ñ äàò÷èêîâ âûäà¸ì ñ ìàêñèìàëüíûì ðàçðåøåíèåì.
+ * данные � датчиков выдаём � мак�имальным разрешением.
  */
 void onApiSensors(HttpRequest &request, HttpResponse &response)
 {
@@ -160,7 +160,7 @@ void onApiSensors(HttpRequest &request, HttpResponse &response)
 	sensors["humidity"] = String(SensorH, 2);
 	sensors["heatindex"] = String(SensorHI, 2);
 	sensors["comfortp"] = String(SensorCR, 2);
-	sensors["comforts"] = StrCF.c_str(); // âòîðîå ìåñòî
+	sensors["comforts"] = StrCF.c_str(); // второе ме�то
 	sensors["adcvalue"] = String(system_adc_read());
 	sensors["vddvalue"] = String(system_get_vdd33());
 	time_t now = SystemClock.now();
@@ -170,7 +170,7 @@ void onApiSensors(HttpRequest &request, HttpResponse &response)
 }
 
 /*
- * Óïðàâëåíèå âûâîäîì. êàíäèäàò íà óäàëåíèå.
+ * Управление выводом. кандидат на удаление.
  */
 void onApiOutput(HttpRequest &request, HttpResponse &response)
 {

+ 18 - 27
include/max7219.h

@@ -1,7 +1,7 @@
 /*
  * max7219.h
  *
- *  Created on: 29 ñ³÷. 2016
+ *  Created on: 29 �іч. 2016
  *      Author: shilov
  */
 
@@ -9,22 +9,25 @@
 #define INCLUDE_MAX7219_H_
 
 // symbols
-// Äëÿ BCD
-#define MAX7219_CHAR_BLANK	0x0F
-#define MAX7219_CHAR_FULL	0x88
-// áåç êîäèðîâàíèÿ
+// Дл� BCD
+#define MAX7219_CHAR_BLANK	0x00
+#define MAX7219_CHAR_FULL	0xFF
+// без кодировани�
 #define SYM_Gradus			0x63
 #define SYM_LGradus			0x1D
-#define SYM_Temp			0x10
+#define SYM_Temp			0x0F
 #define SYM_Minus			0x01
 #define SYM_BLANK			0x00
 #define SYM_FULL			0xFF
+#define SYM_H				0x37
+#define SYM_C				0x4E
+#define SYM_C_sm			0x0D
 
 #define MAX7219_ON			0x01
 #define MAX7219_OFF			0x00
 #define MAX7219_BRIGHT		0x08
 
-// ðåæèìû ðàáîòû
+// режимы работы
 #define MAX7219_MODE_DECODE		0x09
 #define MAX7219_MODE_INTENSITY	0x0A
 #define MAX7219_MODE_SCAN_LIMIT	0x0B
@@ -32,7 +35,7 @@
 #define MAX7219_MODE_TEST		0x0F
 #define MAX7219_MODE_NOOP		0x00
 
-// ñîîòâåòñâèå ðàçðÿäîâ
+// �оответ�вие разр�дов
 #define MAX7219_DIGIT0			0x01
 #define MAX7219_DIGIT1			0x02
 #define MAX7219_DIGIT2			0x03
@@ -42,28 +45,16 @@
 #define MAX7219_DIGIT6			0x07
 #define MAX7219_DIGIT7			0x08
 
-// ñîîòâåòñâèå áèò ñåãìåíòàì
-#define SEG_A					0
-#define SEG_B					1
-#define SEG_C					2
+// �оответ�вие бит �егментам
+#define SEG_A					6
+#define SEG_B					5
+#define SEG_C					4
 #define SEG_D					3
-#define SEG_E					4
-#define SEG_F					5
-#define SEG_G					6
+#define SEG_E					2
+#define SEG_F					1
+#define SEG_G					0
 #define SEG_DP					7
 
-// symbols
-// Äëÿ BCD
-#define MAX7219_CHAR_BLANK		0x0F
-#define MAX7219_CHAR_FULL		0x88
-// áåç êîäèðîâàíèÿ
-#define SYM_Gradus				0x63
-#define SYM_LGradus				0x1D
-#define SYM_Temp				0x10
-#define SYM_Minus				0x01
-#define SYM_BLANK				0x00
-#define SYM_FULL				0xFF
-
 void MAX7219_writeData(uint8_t data_register, uint8_t data);
 void MAX7219_Init(void);