EEPROM - что не так с записью
- Войдите на сайт для отправки комментариев
Вс, 26/05/2019 - 02:46
Arduino Nano 328
Простой код -читаем с ком порта и пытаемся записать в EEPROM
#include <Arduino.h>
#include <EEPROM.h>
String cmd="";
void setup() {
Serial.begin(9600);
}
void loop() {
while(Serial.available()){
char c=Serial.read();
delay(100);
if(c!='\r' && c!='\n') //если не конец строки, то читаем дальше
{
Serial.print(c); //эхо
cmd=cmd+c;
continue;
}
cmd.trim();
cmd.toLowerCase();
if(cmd.length()==0) continue;
//обрабатываем команду
int pos=cmd.indexOf(" ");
if(pos>0)
{
uint16_t addr=cmd.substring(0,pos).toInt();
if(cmd.substring(pos+1).indexOf(".")>0)
{
double val=cmd.substring(pos+1).toDouble();
EEPROM.put(addr,val);
}
else
{
uint8_t val=cmd.substring(pos+1).toInt();
EEPROM.update(addr,val);
}
}
else
{
Serial.println(cmd);
}
//Serial.println();
cmd="";
}
delay(100);
}
Непонятный момент: при таком коде, после любой команды на запись ( например 100 100) - аппарат зависает и не реагирует.
Но если раскомментировать строку //Serial.println();, то все работает нормально, как положено.
Возможно, это известно и описано, но почему это так?
А ты вместо Serial.println() попробовай delay(4) поставить
Я дико извиняюсь, что влез в чужую тему у меня тоже вопрос по еепрому
#include <EEPROM.h> int oxrana ; // Переменные для записи данных int eeAddress = 0; // условие проверяем каждые 10 сек------------------ oxrana = EEPROM.read(eeAddress); // каждые 10 сек читаем данные из еепром if (oxrana == 1) { // если прочитана "1" то считаем охрану активной Secury = true; } else { Secury = false; } //-------------------------------------------------------------------- else if (at.indexOf("S/Alarm", 4) > -1) { // если получена команда постановки на охрану if (VoltRead() < Vstart) { detachInterrupt(0); delay(50); oxrana = 1; EEPROM.update(eeAddress, oxrana); // то записываем "1" в память attachInterrupt(1, callback, LOW); // attachInterrupt(0, hitback, LOW); gethit = false; Secury = true; // Serial.println ("OK"); } } --------------- else if (at.indexOf("S/Calm", 4) > -1) { // если получена команда снятия с охраны void Silence (); } --------------- void Silence(){ detachInterrupt(1); // отключаем прерывания detachInterrupt(0); // oxrana = 0; EEPROM.update (eeAddress, oxrana); // то записываем "0" в памятьданная конструкция заработала на тестовом контроллере , перенеся код в рабочее устройство , почему то перестал записываться 0 в память, 1 записывается без проблем , подскажите в чём может быть проблема .
voidSilence ();вызывать функцию надо без void
Ну да спасибо, проглядел, изначально функции не было ... Копипаст и спешка подвели .