5
5
// ////////////////////////////////////////////////////////////////////////////////////////////
6
6
7
7
#define DEBUG 1 // Выдача отладочной информации в COM-порт
8
- #define RESET 0 // Установка первоначального "0"
8
+ #define RESET 1 // Установка первоначального "0"
9
9
// ////////////////////////////////////////////////////////////////////////////////////////////
10
10
// Пины для подключения устройств
11
11
#define BUTTON_PIN 6 // Пин с конпкой
14
14
#define COUNTERS 2 // Колличество счетчиков в системе
15
15
// ////////////////////////////////////////////////////////////////////////////////////////////
16
16
17
- unsigned int CounterHighBase[COUNTERS] = {0000 , 0000 }; // Если значение отлично от нуля - то пишем его в качестве базового
18
- unsigned int CounterLowBase[COUNTERS] = {130 , 80 }; // Если значение отлично от нуля - то пишем его в качестве базового
17
+ unsigned int CounterHighBase[COUNTERS] = {00000 , 00000 }; // Если значение отлично от нуля - то пишем его в качестве базового
18
+ unsigned int CounterLowBase[COUNTERS] = {180 , 180 }; // Если значение отлично от нуля - то пишем его в качестве базового
19
19
int counterReadDelay = 0 ; // Текущая задержка считывания счетчика
20
20
// (нужна для уверенной отработки переключения счетчика)
21
21
int CounterPin[COUNTERS] = {COLD_COUNTER_PIN, HOT_COUNTER_PIN}; // Пины
22
- int CounterHighAddress[COUNTERS] = {0x30 , 0x40 }; // Адреса EEPROM для младшего слова (кубометры) 4 байта
23
- int CounterLowAddress[COUNTERS] = {0x38 , 0x48 }; // Адреса EEPROM для младшего слова (литры) 2 байта
22
+ int CounterHighAddress[COUNTERS] = {0x30 , 0x3A }; // Адреса EEPROM для младшего слова (кубометры) 4 байта
23
+ int CounterLowAddress[COUNTERS] = {0x38 , 0x42 }; // Адреса EEPROM для младшего слова (литры) 2 байта
24
24
char *CounterName[COUNTERS] = {" Cold :" , " Hot :" }; // Названия счетчиков для вывода на экран
25
25
Bounce CounterBouncer[COUNTERS] = {}; // Формируем для счетчиков Bounce объекты
26
26
// ////////////////////////////////////////////////////////////////////////////////////////////
@@ -46,10 +46,10 @@ void setup() {
46
46
#endif
47
47
for (int i=0 ; i<COUNTERS; i++)
48
48
{
49
- pinMode (CounterPin[i], INPUT ); // Инициализируем пин
49
+ pinMode (CounterPin[i], INPUT_PULLUP ); // Инициализируем пин
50
50
digitalWrite (CounterPin[i], HIGH); // Включаем подтягивающий резистор
51
- CounterBouncer[i].attach (CounterPin[i]); // Настраиваем Bouncer
52
- CounterBouncer[i].interval (10 ); // и прописываем ему интервал дребезга
51
+ CounterBouncer[i].attach (CounterPin[i], INPUT_PULLUP ); // Настраиваем Bouncer
52
+ CounterBouncer[i].interval (25 ); // и прописываем ему интервал дребезга
53
53
}
54
54
55
55
lcd.init (); // Инициализируем дисплей
@@ -73,7 +73,7 @@ delay (1);
73
73
}
74
74
75
75
76
- void printPos (byte col, byte row, char * str)
76
+ void printPos (byte col, byte row, char * str)
77
77
{
78
78
lcd.setCursor (col, row);
79
79
lcd.print (str);
@@ -129,24 +129,19 @@ void readCounter()
129
129
counterReadDelay = 0 ;
130
130
for (int i=0 ; i<COUNTERS; i++)
131
131
{
132
- boolean changed = CounterBouncer[i].update ();
133
- // Serial.println(changed);
134
- if ( changed ) {
135
- int value = CounterBouncer[i].read ();
136
- if ( value == LOW) // Если значение датчика стало ЗАМКНУТО, т.е сработал счетчик
137
- {
138
- #if DEBUG
139
- Serial.print (" Counter [ " ); Serial.print (CounterName[i]); Serial.print (" ] switched " );
140
- #endif
132
+ CounterBouncer[i].update ();
133
+ if ( CounterBouncer[i].fell ()) {
134
+
141
135
if (CounterLowBase[i]<990 ) // если не произошло перехода на кубометры - увеличиваем счетчик литров на 10
142
136
{
143
137
CounterLowBase[i]+=10 ;
144
138
printLow (13 ,i,CounterLowBase[i]);
145
139
EEPROM.writeInt (CounterLowAddress[i],CounterLowBase[i]);
146
140
#if DEBUG
147
- Serial.print (" Write to EEPROM " ); Serial.print (i,DEC ); Serial.print (" counter. Name " ); Serial.println (CounterName[i]);
141
+ Serial.print (" Write to EEPROM " ); Serial.print (i,DEC ); Serial.println (" counter. Name " );
142
+ // Serial.println(CounterName[i]);
148
143
Serial.print (CounterHighAddress[i] ,HEX); Serial.print (" => " ); Serial.println (CounterHighBase[i]);
149
- Serial.print (CounterLowAddress[i] ,HEX); Serial.print (" => " ); Serial.println (CounterLowBase[i] );
144
+ Serial.print (CounterLowAddress[i] ,HEX); Serial.print (" => " ); Serial.println (CounterLowBase[i] );
150
145
#endif
151
146
}
152
147
else // иначе, если произошел переход - обнуляем счетчик литров и увеличиваем счетчик кубометров на 1
@@ -158,12 +153,12 @@ void readCounter()
158
153
EEPROM.writeInt ( CounterLowAddress[i], CounterLowBase[i] );
159
154
EEPROM.writeInt ( CounterHighAddress[i], CounterHighBase[i]);
160
155
#if DEBUG
161
- Serial.print (" Write to EEPROM " ); Serial.print (i,DEC ); Serial.print (" counter. Name " ); Serial.println (CounterName[i]);
156
+ Serial.print (" Write to EEPROM " ); Serial.print (i,DEC ); Serial.println (" counter. Name " );
157
+ // Serial.println( CounterName[i] );
162
158
Serial.print (CounterHighAddress[i] ,HEX); Serial.print (" => " ); Serial.println (CounterHighBase[i]);
163
- Serial.print (CounterLowAddress[i] ,HEX); Serial.print (" => " ); Serial.println (CounterLowBase[i] );
159
+ Serial.print (CounterLowAddress[i] ,HEX); Serial.print (" => " ); Serial.println (CounterLowBase[i] );
164
160
#endif
165
161
}
166
- }
167
162
}
168
163
}
169
164
}
0 commit comments