Відповісти

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

Назад

Огляд теми (нові повідомленні вгорі)

Olej
2018-03-18 12:30:46
Ru пише:

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

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

Olej
2018-03-17 23:05:33
Вячеслав Азаров пише:

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

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

Green
2018-03-17 08:57:34

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

Ru
2018-03-17 00:22:32

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

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

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

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

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

Selen
2018-03-16 22:42:37

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

Arduino Junior
2018-03-16 11:52:47

мой коммент не в контексте вопроса, однако может быть полезен. у 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 минут) если это не противоречит требованиям.

vvr
2018-03-16 08:59:47

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

Ru
2018-03-16 00:15:25

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

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