Как пример решения через сохранение значения taho в EEPROM - при отключении и подключении ПК значение taho не обнуляется, а продолжает увеличиваться дальше.
Код:
#include <EEPROM.h>
int test;
int test2;
int prev2;
unsigned long time;
unsigned long ptime;
unsigned long taho; // количество импульсов
unsigned int freq; // частота импульсов
unsigned long stamp; // период измерения
unsigned long byte1;
byte byte2;
int onoff = 0;
void setup()
{
Serial.begin(115200); // настроить скорость com порта
pinMode(7, INPUT); // 7ой порт переключаем на ввод данных
ptime = millis();
test = 0;
test2 = 0;
prev2 = 0;
taho = 0;
freq = 0;
stamp = 0;
// читаем из EEPROM
byte2 = EEPROM.read(3);
byte1 = byte2;
byte1 = byte1 << 8;
byte2 = EEPROM.read(2);
byte1 = byte1 + byte2;
byte1 = byte1 << 8;
byte2 = EEPROM.read(1);
byte1 = byte1 + byte2;
byte1 = byte1 << 8;
byte2 = EEPROM.read(0);
taho = byte1 + byte2;
}
void loop()
{
test = analogRead(0); //прочитать с аналогового пина(0)
test2 = digitalRead(7); // читаем уровень цифрового порта(7)
if(test2 != prev2) {
prev2 = test2;
if(test2 = HIGH) {
freq++;
taho++;
// сразу записываем в EEPROM
byte1 = taho;
byte2 = lowByte(byte1);
EEPROM.write(0, byte2);
byte1 = byte1 >> 8;
byte2 = lowByte(byte1);
EEPROM.write(1, byte2);
byte1 = byte1 >> 8;
byte2 = lowByte(byte1);
EEPROM.write(2, byte2);
byte1 = byte1 >> 8;
byte2 = lowByte(byte1);
EEPROM.write(3, byte2);
}
}
stamp = millis();
if(stamp > ptime + 500 || stamp < ptime) {
ptime = stamp;
Serial.print("TimeStamp: ");
Serial.print(ptime, DEC);
Serial.print(", Gasoile: ");
Serial.print(test/4, DEC); // отправить значение компьютеру
Serial.print(", Tahometer: ");
Serial.print(taho, DEC);
Serial.print(", Speed freq: ");
Serial.println(freq, DEC);
freq = 0;
// Помигаем светодиодом в подтверждение работы микропрограммы
if(onoff != 1) {
digitalWrite(13, HIGH);
onoff = 1;
} else {
digitalWrite(13, LOW);
onoff = 0;
}
}
}