использование EEPROM Arduino
Я хочу знать цель использования EEPROM, потому что не могу ее получить, Я имею в виду, что я знаю, что он может хранить значения в течение длительного времени, но я просто не могу получить цель здесь
#include<EEPROM.h>
void setup()
{
Serial.begin(9600);
EEPROM.write(0,4);
int s=EEPROM.read(0);
int f=10;
Serial.print(s);
Serial.print(" ");
Serial.print(10);
}
void loop() {}
Например, я использую EEPROM, чтобы увидеть разницу, если я печатаю значение внутри переменной s
на серийный монитор, используя EEPROM, и обычное значение внутри переменной f
.
Но я не мог найти разницу между ними, потому что при отключении питания и повторном включении они оба печатаются.
Надеюсь, вы поняли идею, и я надеюсь увидеть некоторые отзывы.
Спасибо..
программа светодиодов
затем я сделал эту программу, которая сравнивает значение EEPROM с числом 4 и сравнивает переменную F с числом 4. Известно, что значения F и EEPROM равны 4. а затем я изменил оба значения на 3. не должен ли ЗЕЛЕНЫЙ светодиод EEPROM все еще гореть, потому что он уже сохранил num.4??
#include<EEPROM.h>
void setup()
{
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
}
void loop()
{
EEPROM.write(0,4); //ЗЕЛЕНЫЙ СВЕТОДИОД
int f=4; //КРАСНЫЙ СВЕТОДИОД
if(EEPROM.read(0)==4) digitalWrite(12,HIGH);
if(f==4) digitalWrite(11,HIGH);
}
@klay, 👍0
Обсуждение2 ответа
Вкратце: Как только вы выключите Arduino, все переменные на нем, которые были рассчитаны скетчем, будут потеряны. Это потому, что они хранятся в оперативной памяти, которая не может хранить вещи без питания. Это не проблема EEPROM: хранящиеся там значения будут доступны при перезагрузке, и их не нужно будет вычислять снова.
Это может оказаться полезным, если ваше устройство позволяет пользователю сохранять пресеты: то есть конфигурацию программы. Если эта конфигурация, которая может быть, например, переменными, влияющими на поведение программы, хранится в оперативной памяти, она будет потеряна при следующей перезагрузке. С другой стороны, значение, сохраненное в EEPROM во время первого выполнения (например, введенное пользователем), все еще будет доступно при следующей перезагрузке, если вы потратили время на его запись (при первом запуске) и чтение (при первом запуске). второй заход). Точно так же, как сохранить, а затем вызвать предустановку.
Остерегайтесь того, что EEPROM не любит перезаписываться слишком много раз и изнашиваться, поэтому вы должны свести это к минимуму (значения, которые действительно необходимо восстанавливать при перезагрузке и не могут быть рассчитаны в настоящее время).
спасибо @Tom_C Я отредактировал свой пост и добавил программу LED и спросил, почему светодиод EEPROM не горит, надеюсь, что вы также можете дать мне отзыв, @klay
@klay, как и раньше, в вашем новом примере нет НИКАКИХ преимуществ EEPROM. Вы читали мой ответ? Вот вы пишете и читаете eeprom подряд, что немного похоже на: "Я положила сыр в холодильник, что сейчас у меня в холодильнике? Оооо, сыр!", @Tom
@klay Кроме того, как сказано в ответе, EEPROM [НЕ нравится, когда его часто записывают](https://www.arduino.cc/en/Tutorial/EEPROMUpdate). Ваш EEPROM.write(0,4);
в цикле
убьет его за очень (очень) короткое время, @Tom
Я просто хочу применить концепцию этого, вы знаете, когда вы сохраняете для него значение, а затем используете его, например, как умный дом, который работает с определенными заказами, поэтому идея здесь состоит в том, чтобы изменить его только один раз, чтобы показать принцип ЭСППЗУ. даже когда я пишу это в НАСТРОЙКЕ, светодиод также не будет работать. так что рассмотрите возможность написания этого скетча внутри установки пустоты, как я могу заставить его работать только один раз?, @klay
Извините, я не понимаю, что вы хотите или не понимаете. Возможно, @Sim Son ближе к тому, что вы ищете. В любом случае, если вы не видите смысла писать в EEPROM, то оно вам скорее всего и не нужно ;). Кроме того, если вы запустили скетч в своем ответе сейчас, имейте в виду, что первый блок памяти EEPROM, скорее всего, не работает., @Tom
"Он может хранить значения в течение длительного времени" - это не совсем то, что делает eeprom, главное свойство заключается в том, что информация в eeprom сохраняется во время циклов питания и перезагрузки чипа. Напротив, ОЗУ теряет всю информацию, когда вы отключаете питание чипа.
Чтобы получить представление о eeprom, я предлагаю вам выполнить следующую процедуру:
1. Загрузите этот скетч:
#include "EEPROM.h"
void setup() {
EEPROM.write(0,4);
}
void loop(){}
2. После того, как этот скетч будет выполнен, загрузите и запустите приведенный ниже скетч (вы можете даже отключить Arduino перед этим шагом):
#include "EEPROM.h"
void setup() {
pinMode(12,OUTPUT);
if(EEPROM.read(0)==4) digitalWrite(12,HIGH);
EEPROM.write(0,3);
}
void loop(){}
3. Теперь загорится зеленый индикатор.
4. Сбросьте atmega, и теперь зеленый светодиод не будет гореть.
Просто используя переменную int f
, которая находится в ОЗУ, вы не можете "переносить" значение между этими скетчами/средами выполнения.
- Не получается читать из / писать в EEPROM
- о том, как разделить один внешний последовательный EEprom с помощью двух микроконтроллеров?
- Serial.println не будет форматировать DEC
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
откуда этот код? Поменяйте местами строки с чтением и записью. Запустите код. Затем измените 4 на 42 и загрузите снова., @Juraj
В вашем скетче светодиоды никогда не будут выключены, потому что вы записываете в eeprom и сразу же считываете его значение. Это довольно тривиально, что они одинаковы. Кроме того, вы довольно быстро убьете eeprom, если будете так часто писать в него. Eeprom обычно рассчитаны примерно на 100 тыс. операций записи, поэтому ваш скетч может заблокировать eeprom в течение нескольких минут., @Sim Son
теперь, даже если я напишу это внутри настройки пустоты, ЗЕЛЕНЫЙ светодиод не загорится, когда я изменю значение на 3. Я имею в виду, что он должен сохранить число 4 внутри, чтобы значение просто оставалось внутри, верно?, @klay
Что вы переместили в
setup()
? Весь код вloop()
? Вы понимаете, что написал Tom_C в своем ответе? ОДНОГО скетча недостаточно, чтобы действительно продемонстрировать назначение eeprom. Вместо этого вы должны загрузить и запустить скетч1, который записывает значение в eeprom вsetup()
, затем загрузить и запустить скетч2, который читает eeprom и использует соответствующее значение., @Sim Sonя отредактировал свой ответ, @Sim Son