NEWS
Скрипт для счётчика
-
instalator: Подскажи как забрать данные от счетчика по MQTT, Счетчик дает импульсы, значит твой скрипт и используем. Пока буду проверять на MEga2560 `
Не совсем я тебя понимаю. Что значит как забрать? Считать данные со счетчика ардуиной например и по MQTT отдавать.А какой именно мой скрипт используем?
Вот https://github.com/instalator/Counter_MQTT считает импульсы и отдает данные по MQTT
-
что-то подобное http://blog.instalator.ru/archives/140
Ну вот, а говоришь не понимаешь… ссылочка что надо. Ща попробую проверить.....
-
что-то подобное http://blog.instalator.ru/archives/140
Ну вот, а говоришь не понимаешь… ссылочка что надо. Ща попробую проверить..... `
Имей ввиду что там Ethernet на W5500 и библиотека под нее же. -
у меня 5100
-
#include <ethernet2.h>- вот эта для 5500</ethernet2.h>
-
такк… Вопрос. Как я понял ты собрал отдельный контроллер для этого, я жеж использую MEGA2560, я правильно понимаю что сигнал от счетчика надо подавать на А0 и желательно с подтяжкой 10кОм
-
Залил код на Ардуину, в ЙоБе, записи появились, но результаты по 0…... Где грабли.....
и еще, подключаю ко входу счетчик Энергомера СЕ101 3200имп.кВТ.ч.....
Похоже что то не так делаю... Прошу помощщи....
-
Залил код на Ардуину, в ЙоБе, записи появились, но результаты по 0…... Где грабли.....
и еще, подключаю ко входу счетчик Энергомера СЕ101 3200имп.кВТ.ч.....
Похоже что то не так делаю... Прошу помощщи.... `
Не могу сказать где грабли не видя кода. -
Код использовался https://github.com/instalator/Counter_MQTT от сюда, соответственно поменял IP а все остальное как было.
-
для проверки использую Arduino 2560 и сетевуху 5100, там же стоит SD
-
Код использовался https://github.com/instalator/Counter_MQTT от сюда, соответственно поменял IP а все остальное как было. `
Так ты изменил код то? Сконфигурирован его для входов не намур? И вообще он не для электросчётчиков.Для электросчётчиков тут https://github.com/instalator/Electro_C … /README.md
-
Что то не прет компиляция….Electro_Counter2, код взят с Githuba
! Arduino: 1.8.2 (Windows 7), Плата:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino:6:0: warning: "PWR_CTRL" redefined
! #define PWR_CTRL A0
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:7:0: note: this is the location of the previous definition
! #define PWR_CTRL A2 //Контроль напряжения
! ^
! count:14: error: conflicting declaration 'volatile long unsigned int cnt'
! volatile unsigned long cnt = 1 ;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:34:15: note: previous declaration as 'long unsigned int cnt'
! unsigned long cnt = 0;
! ^
! count:15: error: conflicting declaration 'volatile long unsigned int prev_cnt'
! volatile unsigned long prev_cnt = 0;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:35:15: note: previous declaration as 'long unsigned int prev_cnt'
! unsigned long prev_cnt = 2;
! ^
! count:16: error: conflicting declaration 'volatile long unsigned int pwr'
! volatile unsigned long pwr = 0;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:36:15: note: previous declaration as 'long unsigned int pwr'
! unsigned long pwr = 0;
! ^
! count:17: error: conflicting declaration 'volatile long unsigned int prev_pwr'
! volatile unsigned long prev_pwr = 1;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:37:15: note: previous declaration as 'long unsigned int prev_pwr'
! unsigned long prev_pwr = 2;
! ^
! count:18: error: conflicting declaration 'long unsigned int chk'
! unsigned long chk = 0;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:44:5: note: previous declaration as 'int chk'
! int chk = 0;
! ^
! count:19: error: redefinition of 'int num'
! int num = 3200;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:40:5: note: 'int num' previously defined here
! int num = 0;
! ^
! count:21: error: redefinition of 'int amp'
! int amp = 0;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:38:5: note: 'int amp' previously defined here
! int amp = 0;
! ^
! count:22: error: redefinition of 'int prev_amp'
! int prev_amp = 0;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:39:5: note: 'int prev_amp' previously defined here
! int prev_amp = 2;
! ^
! count:23: error: redefinition of 'int bounce'
! int bounce = 1;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:42:5: note: 'int bounce' previously defined here
! int bounce = 10;
! ^
! count:31: error: redefinition of 'String cmd'
! String cmd = "";
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:50:8: note: 'String cmd' previously declared here
! String cmd = "";
! ^
! count:32: error: redefinition of 'bool strComplete'
! bool strComplete = false;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:51:6: note: 'bool strComplete' previously defined here
! bool strComplete = false;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void setup()':
! count:35: error: redefinition of 'void setup()'
! void setup() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:67:6: note: 'void setup()' previously defined here
! void setup() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void loop()':
! count:60: error: redefinition of 'void loop()'
! void loop() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:265:6: note: 'void loop()' previously defined here
! void loop() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void serialEvent()':
! count:129: error: redefinition of 'void serialEvent()'
! void serialEvent() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:111:6: note: 'void serialEvent()' previously defined here
! void serialEvent() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void save()':
! count:139: error: redefinition of 'void save()'
! void save() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:175:6: note: 'void save()' previously defined here
! void save() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void EEPROMWriteLong(int, long unsigned int)':
! count:150: error: redefinition of 'void EEPROMWriteLong(int, long unsigned int)'
! void EEPROMWriteLong(int p_address, unsigned long p_value) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:195:6: note: 'void EEPROMWriteLong(int, long unsigned int)' previously defined here
! void EEPROMWriteLong(int p_address, unsigned long p_value) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'long unsigned int EEPROMReadLong(int)':
! count:161: error: redefinition of 'long unsigned int EEPROMReadLong(int)'
! unsigned long EEPROMReadLong(int p_address) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:206:15: note: 'long unsigned int EEPROMReadLong(int)' previously defined here
! unsigned long EEPROMReadLong(int p_address) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void EEPROMWriteInt(int, int)':
! count:169: error: redefinition of 'void EEPROMWriteInt(int, int)'
! void EEPROMWriteInt(int p_address, int p_value) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:214:6: note: 'void EEPROMWriteInt(int, int)' previously defined here
! void EEPROMWriteInt(int p_address, int p_value) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'unsigned int EEPROMReadInt(int)':
! count:175: error: redefinition of 'unsigned int EEPROMReadInt(int)'
! unsigned int EEPROMReadInt(int p_address) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:220:14: note: 'unsigned int EEPROMReadInt(int)' previously defined here
! unsigned int EEPROMReadInt(int p_address) {
! ^
! Несколько библиотек найдено для "SPI.h"
! Используется: C:\Users\5\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.19\libraries\SPI
! Не используется: C:\Program Files (x86)\Arduino\libraries\SPI
! Несколько библиотек найдено для "PubSubClient.h"
! Используется: C:\Users\5\Documents\Arduino\libraries\PubSubClient
! Не используется: C:\Program Files (x86)\Arduino\libraries\PubSubClient
! Несколько библиотек найдено для "EEPROM.h"
! Используется: C:\Users\5\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.19\libraries\EEPROM
! Не используется: C:\Program Files (x86)\Arduino\libraries\EEPROM
! exit status 1
! conflicting declaration 'volatile long unsigned int cnt'
! Этот отчёт будет иметь больше информации с
! включенной опцией Файл -> Настройки ->
! "Показать подробный вывод во время компиляции" -
Что то не прет компиляция….Electro_Counter2, код взят с Githuba
! Arduino: 1.8.2 (Windows 7), Плата:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino:6:0: warning: "PWR_CTRL" redefined
! #define PWR_CTRL A0
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:7:0: note: this is the location of the previous definition
! #define PWR_CTRL A2 //Контроль напряжения
! ^
! count:14: error: conflicting declaration 'volatile long unsigned int cnt'
! volatile unsigned long cnt = 1 ;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:34:15: note: previous declaration as 'long unsigned int cnt'
! unsigned long cnt = 0;
! ^
! count:15: error: conflicting declaration 'volatile long unsigned int prev_cnt'
! volatile unsigned long prev_cnt = 0;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:35:15: note: previous declaration as 'long unsigned int prev_cnt'
! unsigned long prev_cnt = 2;
! ^
! count:16: error: conflicting declaration 'volatile long unsigned int pwr'
! volatile unsigned long pwr = 0;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:36:15: note: previous declaration as 'long unsigned int pwr'
! unsigned long pwr = 0;
! ^
! count:17: error: conflicting declaration 'volatile long unsigned int prev_pwr'
! volatile unsigned long prev_pwr = 1;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:37:15: note: previous declaration as 'long unsigned int prev_pwr'
! unsigned long prev_pwr = 2;
! ^
! count:18: error: conflicting declaration 'long unsigned int chk'
! unsigned long chk = 0;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:44:5: note: previous declaration as 'int chk'
! int chk = 0;
! ^
! count:19: error: redefinition of 'int num'
! int num = 3200;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:40:5: note: 'int num' previously defined here
! int num = 0;
! ^
! count:21: error: redefinition of 'int amp'
! int amp = 0;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:38:5: note: 'int amp' previously defined here
! int amp = 0;
! ^
! count:22: error: redefinition of 'int prev_amp'
! int prev_amp = 0;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:39:5: note: 'int prev_amp' previously defined here
! int prev_amp = 2;
! ^
! count:23: error: redefinition of 'int bounce'
! int bounce = 1;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:42:5: note: 'int bounce' previously defined here
! int bounce = 10;
! ^
! count:31: error: redefinition of 'String cmd'
! String cmd = "";
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:50:8: note: 'String cmd' previously declared here
! String cmd = "";
! ^
! count:32: error: redefinition of 'bool strComplete'
! bool strComplete = false;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:51:6: note: 'bool strComplete' previously defined here
! bool strComplete = false;
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void setup()':
! count:35: error: redefinition of 'void setup()'
! void setup() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:67:6: note: 'void setup()' previously defined here
! void setup() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void loop()':
! count:60: error: redefinition of 'void loop()'
! void loop() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:265:6: note: 'void loop()' previously defined here
! void loop() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void serialEvent()':
! count:129: error: redefinition of 'void serialEvent()'
! void serialEvent() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:111:6: note: 'void serialEvent()' previously defined here
! void serialEvent() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void save()':
! count:139: error: redefinition of 'void save()'
! void save() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:175:6: note: 'void save()' previously defined here
! void save() {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void EEPROMWriteLong(int, long unsigned int)':
! count:150: error: redefinition of 'void EEPROMWriteLong(int, long unsigned int)'
! void EEPROMWriteLong(int p_address, unsigned long p_value) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:195:6: note: 'void EEPROMWriteLong(int, long unsigned int)' previously defined here
! void EEPROMWriteLong(int p_address, unsigned long p_value) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'long unsigned int EEPROMReadLong(int)':
! count:161: error: redefinition of 'long unsigned int EEPROMReadLong(int)'
! unsigned long EEPROMReadLong(int p_address) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:206:15: note: 'long unsigned int EEPROMReadLong(int)' previously defined here
! unsigned long EEPROMReadLong(int p_address) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'void EEPROMWriteInt(int, int)':
! count:169: error: redefinition of 'void EEPROMWriteInt(int, int)'
! void EEPROMWriteInt(int p_address, int p_value) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:214:6: note: 'void EEPROMWriteInt(int, int)' previously defined here
! void EEPROMWriteInt(int p_address, int p_value) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\count.ino: In function 'unsigned int EEPROMReadInt(int)':
! count:175: error: redefinition of 'unsigned int EEPROMReadInt(int)'
! unsigned int EEPROMReadInt(int p_address) {
! ^
! F:\Arduino MDM\Electro_Counter2-master\mqtt\mqtt.ino:220:14: note: 'unsigned int EEPROMReadInt(int)' previously defined here
! unsigned int EEPROMReadInt(int p_address) {
! ^
! Несколько библиотек найдено для "SPI.h"
! Используется: C:\Users\5\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.19\libraries\SPI
! Не используется: C:\Program Files (x86)\Arduino\libraries\SPI
! Несколько библиотек найдено для "PubSubClient.h"
! Используется: C:\Users\5\Documents\Arduino\libraries\PubSubClient
! Не используется: C:\Program Files (x86)\Arduino\libraries\PubSubClient
! Несколько библиотек найдено для "EEPROM.h"
! Используется: C:\Users\5\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.19\libraries\EEPROM
! Не используется: C:\Program Files (x86)\Arduino\libraries\EEPROM
! exit status 1
! conflicting declaration 'volatile long unsigned int cnt'
! Этот отчёт будет иметь больше информации с
! включенной опцией Файл -> Настройки ->
! "Показать подробный вывод во время компиляции" `
Потому что там два разных скетча.Один непосредственно для счетчика, второй для второго мк который для связи
-
Таааак…. А вот с этого места поподробнее... Если я правильно понимаю, одна сборка снимает показания и передает их другой сборке, которая по MQTT их публикует.... Эт получается надо пару ардуин вешать?? А как обмен между ними организован??
Сечас я использую одну 2560 для обработки температуры, датчиков освещения и контроля за насосом и промсетью, а на второй 2560 пытаюсь сделать счетчик КВт.....
и возможно на нее же посажу управление вентиляцией и освещением...
-
И еще, хотелось бы схемку, подключения счетчика…..
Да, по отдельности оба скетча скомпилились без проблем...
-
Обновил информацию по статье на твоем Блоге, но не дружу с UART, как это выглядит для домохозяек….
-
Таааак…. А вот с этого места поподробнее... Если я правильно понимаю, одна сборка снимает показания и передает их другой сборке, которая по MQTT их публикует.... Эт получается надо пару ардуин вешать?? А как обмен между ними организован??
Сечас я использую одну 2560 для обработки температуры, датчиков освещения и контроля за насосом и промсетью, а на второй 2560 пытаюсь сделать счетчик КВт.....
и возможно на нее же посажу управление вентиляцией и освещением... `
Импульсы считает отдельный МК, сделано для того чтобы не пропускались импульсы и ни на что другое не влияло. Выдает данные на уарт, второй МК принимает эти данные и шлёт уже по mqtt.Возьми для счётчика например ардуиной про мини и ей считай только импульсы. А вся остальная логика - mqtt, датчики и ТД и тп
-
Попробовал залить скетч Count в 2560…. Результат отрицательный, в сериал ни чего не летит.... ПРверял Монитором порта от IDE Arduino 1.6.13.
Я правильно понимаю что один выход счетчика подключаем к А0, второй к GND или я не прав.
Вот типовая схема счетчика
1308_watermarked-shema-se101.png.jpg -
Попробовал залить скетч Count в 2560…. Результат отрицательный, в сериал ни чего не летит.... ПРверял Монитором порта от IDE Arduino 1.6.13.
Я правильно понимаю что один выход счетчика подключаем к А0, второй к GND или я не прав.
Вот типовая схема счетчика `
Нет, вход идет на вход прерывания INT0. -
Все, сдаюсь. Ткните носом - куда подключать выводы от счетчика…. INT0- это какая нога(pin) на 2560, 21? или я уже ни чего не понимаю
И где в скетче это прописано....
Считывание идет, как я вижу со 2 pin.....
! ````
#include <eeprom.h>
#include <avr wdt.h="">
#include <avr io.h="">
#include <avr interrupt.h="">
! #define PWR_CTRL A0
#define CNT_ADR 10
#define PWR_ADR 20
#define IMP_ADR 30
#define BNC_ADR 40
#define NUM_ADR 50
#define CHK_ADR 100
! volatile unsigned long cnt = 1 ;
volatile unsigned long prev_cnt = 0;
volatile unsigned long pwr = 0;
volatile unsigned long prev_pwr = 1;
unsigned long chk = 0;
int num = 3200;
int imp = 0;
int amp = 0;
int prev_amp = 0;
int bounce = 1;
unsigned long prev;
volatile unsigned long prev_millis;
volatile unsigned long cur_tmS = millis();
volatile unsigned long pre_tmS = cur_tmS;
volatile float diffS = 0;
volatile unsigned long tm_diffS = 0;
bool err = false;
String cmd = "";
bool strComplete = false;
! //////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
MCUSR = 0;
wdt_disable();
Serial.begin(115200);
cmd.reserve(200);
Serial.print("Start");
pinMode(2, INPUT);
digitalWrite(2, HIGH);
delay(200);
if (EEPROM.read(1) != 88) { //Если первый запуск
EEPROM.write(1, 88);
} else {
chk = EEPROMReadLong(CHK_ADR);
cnt = EEPROMReadLong(CNT_ADR);
pwr = EEPROMReadLong(PWR_ADR);
imp = EEPROMReadInt(IMP_ADR);
num = EEPROMReadInt(NUM_ADR);
bounce = EEPROMReadInt(BNC_ADR);
if (chk != cnt + imp + bounce) {
err = true;
}
}
wdt_enable(WDTO_8S);
attachInterrupt(0, count, FALLING);
}
! void loop() {
wdt_reset();
if (analogRead(PWR_CTRL) < 1000) {
save();
}
! if (strComplete) {
// Serial.println(inputString);
if (cmd.substring(0, 1) == "S") {
if (cmd.substring(1, 2) == "N") {
num = cmd.substring(cmd.lastIndexOf('N') + 1).toInt();
}
else if (cmd.substring(1, 2) == "S") {
save();
}
else if (cmd.substring(1, 2) == "C") {
cnt = atol(cmd.substring(cmd.lastIndexOf('C') + 1).c_str());
}
else if (cmd.substring(1, 2) == "B") {
bounce = cmd.substring(cmd.lastIndexOf('B') + 1).toInt();
}
save();
}
cmd = "";
strComplete = false;
}
! tm_diffS = cur_tmS - pre_tmS;
diffS = (float(tm_diffS) / 1000);
pwr = 3600000 / (num * diffS);
if ((cnt != prev_cnt || amp != prev_amp || pwr >= (prev_pwr + 10) || pwr <= (prev_pwr - 10)) && pwr > 0 && millis() - 2000 > prev) {
prev = millis();
Serial.print(cnt);
Serial.print(";");
if (pwr > (prev_pwr + 4000)) {
Serial.print(prev_pwr);
} else {
Serial.print(pwr);
}
Serial.print(";");
Serial.print(amp);
Serial.print(";");
Serial.print(bounce);
Serial.print(";");
Serial.print(num);
Serial.print(";");
Serial.print(err);
Serial.print('\n');
}
prev_cnt = cnt;
prev_amp = amp;
prev_pwr = pwr;
}
! void count() {
detachInterrupt(0);
if (millis() - bounce > prev_millis) {
prev_millis = millis();
pre_tmS = cur_tmS;
cur_tmS = millis();
imp++;
if (imp >= num) {
imp = 0;
cnt++;
}
}
attachInterrupt(0, count, FALLING);
}
! void serialEvent() {
while (Serial.available() > 0) {
char inChar = (char)Serial.read();
cmd += inChar;
if (inChar == '\n') {
strComplete = true;
}
}
}
! void save() {
chk = cnt + imp + bounce;
EEPROMWriteLong(CNT_ADR, cnt);
EEPROMWriteLong(PWR_ADR, pwr);
EEPROMWriteInt(IMP_ADR, imp);
EEPROMWriteInt(NUM_ADR, num);
EEPROMWriteInt(BNC_ADR, bounce);
EEPROMWriteLong(CHK_ADR, chk);
}
! void EEPROMWriteLong(int p_address, unsigned long p_value) {
byte four = (p_value & 0xFF);
byte three = ((p_value >>& 0xFF);
byte two = ((p_value >> 16) & 0xFF);
byte one = ((p_value >> 24) & 0xFF);
EEPROM.write(p_address, four);
EEPROM.write(p_address + 1, three);
EEPROM.write(p_address + 2, two);
EEPROM.write(p_address + 3, one);
}
! unsigned long EEPROMReadLong(int p_address) {
long four = EEPROM.read(p_address);
long three = EEPROM.read(p_address + 1);
long two = EEPROM.read(p_address + 2);
long one = EEPROM.read(p_address + 3);
return ((four << 0) & 0xFF) + ((three <<& 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
}
! void EEPROMWriteInt(int p_address, int p_value) {
byte lowByte = ((p_value >> 0) & 0xFF);
byte highByte = ((p_value >>& 0xFF);
EEPROM.write(p_address, lowByte);
EEPROM.write(p_address + 1, highByte);
}
unsigned int EEPROMReadInt(int p_address) {
byte lowByte = EEPROM.read(p_address);
byte highByte = EEPROM.read(p_address + 1);
return ((lowByte << 0) & 0xFF) + ((highByte <<& 0xFF00);
}</avr></avr></avr></eeprom.h>