Ви не увійшли.
пожалуйста помогите прописать на EPPROM
У вас переменные - типов int.
Не используйте EEPROM.read() и EEPROM.write() функции - эти функции работают с 1-байтовыми переменными.
Используйте EEPROM.get() и EEPROM.put() - в отличие от выше названных, это не функции, а макросы, и они определяют размер тех типов переменных, которые вы хотите читать/писать.
Например, внезапное отключение питания или рестарт микропроцессора может привести, так же, и к прекращению программирования EEPROM. В результате чего записываемое число может оказаться неверным. И т. п.
Такое может быть (с исчерпывающе малой вероятностью), но, если требуется экстремальная надёжность, такие вещи блокируются тем, что называется обменной буферизацией:
- имеете 2 копии данных data[ 2 ] (где data - произвольная структура данных, любой размерности)
- и индикатор-указатель-индекс i = 0/1;
- при обновлении обновляете экземпляр data[ не i ]
- и только проверив, что запись и обновление успешны, меняете i = !i
Помойму, AVRlib имеет более удобные средства, нежели библиотека EEPROM. И для ресурса можно использовать хотя бы update.
доброго времени суток
VVr,
Пожалуйста, можна поподробней о ошибках?
не запоминает положение двигателей, после перезагрузки…
Arduino Junior,
хорошая идея, добавлю цифровой сигнал на запись перед перезагрузкой,
Selen,
устранил ошибку
благодарен всем за ответ, но ЕЕПРОМ не запоминает...
не могу понять где ошибка?
почему у вас адреса записи addr0 и addr1 оба равны нулю? Второй переписывает первый. и второе в сетапе вы считываете pos c адреса 0 а pos1 c адресса 1 . и третие в ардуино уно переменная интеджер занимает 2 байта. поэтому адрес первого должен быть 0 а второго 2
мой коммент не в контексте вопроса, однако может быть полезен. у EEPROM ограниченный ресурс на запись\чтение
An EEPROM write takes 3.3 ms to complete. The EEPROM memory has a specified life of 100,000 write/erase cycles, so you may need to be careful about how often you write to it.
я не вникал в суть, но похоже что EEPROM.write(); в цикле вызывается неоднократно. возможно есть смысл оптимизировать, записывая раз в какое-то время (5 минут) если это не противоречит требованиям.
ошибки видны сразу.
а что у вас не работает.
управление двумя servos с помощью четырех кнопок
#include <Servo.h>
#include <EEPROM.h>
int pos = 20;
int pos1 = 20;
int addr0 = 0;
int addr1 = 0;
Servo servo;
Servo servo1;
void setup() {
{
Serial.begin(9600);
Serial.println("Powerup");
pos = EEPROM.read(0);
pos1 = EEPROM.read(1);
Serial.println(EEPROM.read(0));
Serial.println(EEPROM.read(1));
}
pinMode(2, INPUT); {
pinMode(3, INPUT);
servo.attach(9);
}
pinMode(4, INPUT); {
pinMode(5, INPUT);
servo1.attach(10);
}
}
void loop() {
if (digitalRead(2) == HIGH && pos < 180) {
pos++;
servo.write(pos);
EEPROM.write(addr0, pos);
delay(25);
}
if (digitalRead(3) == HIGH && pos > 20) {
pos--;
servo.write(pos);
EEPROM.write(addr0, pos);
delay(25);
}
if (digitalRead(4) == HIGH && pos1 < 180) {
pos++;
servo1.write(pos1);
EEPROM.write(addr1, pos1);
delay(25);
}
if (digitalRead(5) == HIGH && pos1 > 20) {
pos--;
servo1.write(pos1);
EEPROM.write(addr1, pos1);
delay(25);
}
}
нужно запомнить положение servos после перезагрузки Arduino
пожалуйста помогите прописать на EPPROM
я новичок в программировании
заранее благодарен