Проблемы с EEPROM

restiv
Offline
Зарегистрирован: 03.01.2016

Добрый день форумчане!

Пытаюсь освоить работу с EEPROM, но что то делаю не так. Помогите пожалуйста разобраться со скетчем.

#include <EEPROM.h>

int address = 0;

int relayPin1 = A0;
int relayPin2 = A1;
int relayPin3 = A2;
//int switchPin = 7;

byte val;
byte state;
byte c;

void setup()
{
  pinMode(relayPin1, OUTPUT);
  pinMode(relayPin2, OUTPUT);
  pinMode(relayPin3, OUTPUT);
 // pinMode(switchPin, INPUT);
  digitalWrite(relayPin1, LOW);
  digitalWrite(relayPin2, LOW);
  digitalWrite(relayPin3, LOW);
}

void loop()
{
  state = EEPROM.read(0);

  if (state == HIGH && c == 0) // нажали кнопку
  {
    c = 1;
    EEPROM.write(0,1);
  }
  if (state == LOW && c == 1) // отпустили кнопку
  {
    val = ++val;
    if (val == 4)
    {
      val = 0;
    }
    c = 0;
    EEPROM.update(0,0);
  }

  if (val == 0) // выключаем светодиоды
  {
    digitalWrite(relayPin1, LOW);
    digitalWrite(relayPin2, LOW);
    digitalWrite(relayPin3, LOW);
  }
  if (val == 1) // Если мы кнопку 1 раз нажали и отпустили
  {
    digitalWrite(relayPin1, LOW);
    digitalWrite(relayPin2, HIGH);
    digitalWrite(relayPin3, HIGH);
  }
  if (val == 2) // Если мы кнопку 2 раз нажали и отпустили
  {
    digitalWrite(relayPin1, HIGH);
    digitalWrite(relayPin2, LOW);
    digitalWrite(relayPin3, HIGH);
  }
 if (val == 3) // Если мы кнопку 3 раз нажали и отпустили
  {
    digitalWrite(relayPin1, HIGH);
    digitalWrite(relayPin2, HIGH);
    digitalWrite(relayPin3, LOW);
  }
  if (val == 4) // Если мы кнопку 4 раз нажали и отпустили
  {
    digitalWrite(relayPin1, HIGH);
    digitalWrite(relayPin2, HIGH);
    digitalWrite(relayPin3, HIGH);
  }
  delay(10);
 
} 

Суть устройства в том, чтобы при нажатии кнопки включалось одно реле, при повторном нажатии на туже кнопу первое реле отключалось, а второе реле включалось, при нажатии на кнопку еще раз, отключается второе реле, и включается реле 3, при еще одном нажатии кнопки отключается все реле. И так по кругу.

Komandir
Offline
Зарегистрирован: 18.08.2018

Где опрос кнопки ?

restiv
Offline
Зарегистрирован: 03.01.2016

Там у кнопки всего одно положение. Так что нет смысла опрашивать кнопки.

-NMi-
Offline
Зарегистрирован: 20.08.2018

restiv пишет:

Так что нет смысла опрашивать кнопки.

Датычо? А накой ляд тогда нужна кнопка???

Komandir
Offline
Зарегистрирован: 18.08.2018

Накой нужен EEPROM ???

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Кнопки нет, как я понял, а опрашивается состояние EEPROM. При этом при первом запуске оно не обязательно будет равно 0 или 1. И программа просто не будет работать. И все.

Кроме того таким методом засадить EEPROM проще некуда - у него конечное число перезаписей, а с delay(10) вы быстро его наберете.

Да и 36 строку напишите по человечески: val++;

И еще - из-за 37 строки val никогда не будет ровна 4, условие там должно быть "больше 4"

В итоге - проблема не с EEPROM, а со знанием языка и составлением алгоритмов.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

restiv пишет:

Там у кнопки всего одно положение. 

Это как? Это такая намертво нажатая (хрен отожмёшь) кнопка? Или наоборот - сколько не нажимай ничего не происходит? Обычно у кнопок как минимум два положения.

restiv пишет:

Суть устройства в том, чтобы при нажатии кнопки ...

....

нет смысла опрашивать кнопки.

- Рабинович, Вы играете на тромбоне?
- Конечно.
- Что "конечно"?
- Конечно, - нет, но, вот, сын - да!
- Что "да"?
- Тоже нет.

Как-то так :-)

sadman41
Offline
Зарегистрирован: 19.10.2016

mykaida пишет:

Кроме того таким методом засадить EEPROM проще некуда - у него конечное число перезаписей, а с delay(10) вы быстро его наберете.

Есть EEPROM - есть проблема, нет EEPROM - нет проблемы.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

ТС, смысл EEPROM сохранить данные на выключенном устройстве.
Вопрос, нахрена их постоянно оттуда читать, когда устройство включено ?
Мы же и после первого раза уже узнали , что там было записано.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Kakmyc пишет:
ТС, смысл EEPROM сохранить данные на выключенном устройстве. Вопрос, нахрена их постоянно оттуда читать, когда устройство включено ? Мы же и после первого раза уже узнали , что там было записано.

У ТС - весенняя паранойя "а вдруг напряжение пропадет и данные потеряются". Хотя по мне имело бы смысл хранить val