EEPROM и Serial

Lui22
Offline
Зарегистрирован: 07.03.2016

Доброго времени суток, подскажите, как объеденить EEPROM и данные, выводящиеся в Serial.

int money = 0; //переменная кол-ва денег
int money_old = 0; //переменная старого кол-ва денег
const int buttonPin1 = 13; // порт 1 кнопки
const int buttonPin5 = 2; // порт 2 кнопки
const int buttonPin0 = 12; // порт защиты
int buttonState1 = 0; // статус 1 кнопки    
int buttonState5 = 0; // статус 2 кнопки 
int buttonState0 = 0; // статус защиты    
   
void setup() {
  pinMode(buttonPin1, INPUT); // инициализация 1 кнопки
  pinMode(buttonPin5, INPUT); // инициализация 2 кнопки
  pinMode(buttonPin0, INPUT); // инициализация защиты
  Serial.begin (9600);
}

void loop() {
  if (money_old != money) { //печать только при изменении
      Serial.println(money); // вывод перменной
      delay (100);
      money_old = money; 
  }
  delay (200);
  buttonState1 = digitalRead(buttonPin1); // читаем положение 1 кнопки
  buttonState5 = digitalRead(buttonPin5); // читаем положение 2 кнопки
  buttonState0 = digitalRead(buttonPin0); // читаем положение защиты

  if (buttonState1 == HIGH) { //если 1 кнопка нажата,
    money += 10; // то переменная + 10
  }
  if (buttonState5 == HIGH) { //если 2 кнопка нажата
    if (buttonState0 == LOW) { // и если защита не нажата,
      money += 50; // то переменная + 50
  }
 }
}

 

vvadim
Offline
Зарегистрирован: 23.05.2012

дык вы ничего не написали - что вы хотите?

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

vvadim пишет:

дык вы ничего не написали

я запретил.

Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

Lui22 пишет:

как объеденить EEPROM и данные, выводящиеся в Serial.

Какие данные и как сохранять надо?
Если надо вести историю money в рамках одной рабочей сессии прибора, то примерно так:

 

#include <EEPROM.h>

uint16_t startAddr = 0; // стартовый адрес в EEPROM 

int money = 0; //переменная кол-ва денег
int money_old = 0; //переменная старого кол-ва денег
const int buttonPin1 = 13; // порт 1 кнопки
const int buttonPin5 = 2; // порт 2 кнопки
const int buttonPin0 = 12; // порт защиты
int buttonState1 = 0; // статус 1 кнопки    
int buttonState5 = 0; // статус 2 кнопки 
int buttonState0 = 0; // статус защиты    
   
void setup() {
  pinMode(buttonPin1, INPUT); // инициализация 1 кнопки
  pinMode(buttonPin5, INPUT); // инициализация 2 кнопки
  pinMode(buttonPin0, INPUT); // инициализация защиты
  Serial.begin (9600);
}

void loop() {
  if (money_old != money) { //печать только при изменении
      Serial.println(money); // вывод перменной
      delay (100);
      /* Запись в EEPROM */
      EEPROM.put(startAddr, money_old);
      startAddr += sizeof(money_old);
      /*                 */
      money_old = money; 
  }
  delay (200);
  buttonState1 = digitalRead(buttonPin1); // читаем положение 1 кнопки
  buttonState5 = digitalRead(buttonPin5); // читаем положение 2 кнопки
  buttonState0 = digitalRead(buttonPin0); // читаем положение защиты

  if (buttonState1 == HIGH) { //если 1 кнопка нажата,
    money += 10; // то переменная + 10
  }
/* вместо 
  if (buttonState5 == HIGH) { //если 2 кнопка нажата
    if (buttonState0 == LOW) { // и если защита не нажата,
красивее будет: */
  if ( buttonState5 && !buttonState0 ) 
      money += 50; // то переменная + 50
 /* }
 }*/
}

Это совсем в общих. Можно в 0-м адресе хранить на каком адресе в прошлый раз закончилась запись и продолжать, надо предусмотреть переполнение EEPROM и т.д.

Ну и вообще в коде много всякого лишнего и непонятного.