Как пример решения через сохранение значения 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; } } }




Ответить с цитированием