#1 2018-03-16 00:15:25

Ru
Учасник
Зареєстрований: 2018-03-15
Повідомлень: 2

помогите с записью на EEPROM

управление двумя 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
я новичок в программировании
заранее благодарен

Неактивний

#2 2018-03-16 08:59:47

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: помогите с записью на EEPROM

ошибки видны сразу.
а что у вас не работает.

Неактивний

#3 2018-03-16 11:52:47

Arduino Junior
Учасник
Зареєстрований: 2018-02-06
Повідомлень: 23

Re: помогите с записью на EEPROM

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

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 минут) если это не противоречит требованиям.

Неактивний

#4 2018-03-16 22:42:37

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: помогите с записью на EEPROM

почему у вас адреса записи addr0 и  addr1 оба равны нулю? Второй переписывает первый. и второе в сетапе вы считываете  pos c адреса 0 а pos1 c адресса 1 . и третие в ардуино уно переменная интеджер занимает 2 байта.  поэтому адрес первого должен быть 0 а второго 2

Остання редакція Selen (2018-03-16 22:44:03)

Неактивний

#5 2018-03-17 00:22:32

Ru
Учасник
Зареєстрований: 2018-03-15
Повідомлень: 2

Re: помогите с записью на EEPROM

доброго времени суток

VVr,
Пожалуйста, можна поподробней о ошибках?
не запоминает положение двигателей, после перезагрузки…

Arduino Junior,
хорошая идея, добавлю цифровой сигнал на запись перед перезагрузкой,

Selen,
устранил ошибку

благодарен всем за ответ, но ЕЕПРОМ не запоминает...
не могу понять где ошибка?

Неактивний

#6 2018-03-17 08:57:34

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: помогите с записью на EEPROM

Помойму, AVRlib имеет более удобные средства, нежели библиотека EEPROM. И для ресурса можно использовать хотя бы update.

Неактивний

#7 2018-03-17 23:05:33

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: помогите с записью на EEPROM

Вячеслав Азаров пише:

Например, внезапное отключение питания или рестарт микропроцессора может привести, так же, и к прекращению программирования EEPROM. В результате чего записываемое число может оказаться неверным. И т. п.

Такое может быть (с исчерпывающе малой вероятностью), но, если требуется экстремальная надёжность, такие вещи блокируются тем, что называется обменной буферизацией:
- имеете 2 копии данных data[ 2 ] (где data - произвольная структура данных, любой размерности)
- и индикатор-указатель-индекс i = 0/1;
- при обновлении обновляете экземпляр data[ не i ]
- и только проверив, что запись и обновление успешны, меняете i = !i

Неактивний

#8 2018-03-18 12:30:46

Olej
Учасник
З Харьков
Зареєстрований: 2018-03-08
Повідомлень: 234

Re: помогите с записью на EEPROM

Ru пише:

пожалуйста помогите прописать на EPPROM

У вас переменные - типов int.
Не используйте EEPROM.read() и EEPROM.write() функции - эти функции работают с 1-байтовыми переменными.
Используйте EEPROM.get() и EEPROM.put() - в отличие от выше названных, это не функции, а макросы, и они определяют размер тех типов переменных, которые вы хотите читать/писать.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму