Проблемы с EEPROM
- Войдите на сайт для отправки комментариев
Вс, 15/03/2020 - 20:36
Добрый день форумчане!
Пытаюсь освоить работу с 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, при еще одном нажатии кнопки отключается все реле. И так по кругу.
Где опрос кнопки ?
Там у кнопки всего одно положение. Так что нет смысла опрашивать кнопки.
Так что нет смысла опрашивать кнопки.
Датычо? А накой ляд тогда нужна кнопка???
Накой нужен EEPROM ???
Кнопки нет, как я понял, а опрашивается состояние EEPROM. При этом при первом запуске оно не обязательно будет равно 0 или 1. И программа просто не будет работать. И все.
Кроме того таким методом засадить EEPROM проще некуда - у него конечное число перезаписей, а с delay(10) вы быстро его наберете.
Да и 36 строку напишите по человечески: val++;
И еще - из-за 37 строки val никогда не будет ровна 4, условие там должно быть "больше 4"
В итоге - проблема не с EEPROM, а со знанием языка и составлением алгоритмов.
Там у кнопки всего одно положение.
Это как? Это такая намертво нажатая (хрен отожмёшь) кнопка? Или наоборот - сколько не нажимай ничего не происходит? Обычно у кнопок как минимум два положения.
Суть устройства в том, чтобы при нажатии кнопки ...
....
нет смысла опрашивать кнопки.
Как-то так :-)
Кроме того таким методом засадить EEPROM проще некуда - у него конечное число перезаписей, а с delay(10) вы быстро его наберете.
Есть EEPROM - есть проблема, нет EEPROM - нет проблемы.
ТС, смысл EEPROM сохранить данные на выключенном устройстве.
Вопрос, нахрена их постоянно оттуда читать, когда устройство включено ?
Мы же и после первого раза уже узнали , что там было записано.
У ТС - весенняя паранойя "а вдруг напряжение пропадет и данные потеряются". Хотя по мне имело бы смысл хранить val