помогите разобраться с EEPROM
- Войдите на сайт для отправки комментариев
Чт, 22/10/2015 - 13:32
Помогите решить проблему
программа определяет минимальные значения аналогового датчика, эти данные записываются в EEPROM. в следующем цикле считывания должны записаться другие минимальные показания, но если они больше предыдущих, EEPROM видит только предыдущие, но если меньше предыдущих он их записывает, а нужны текущие после каждого считывания. Вот такой кусочек скэтча:
void tune(){
digitalWrite(led1, HIGH);
stepper.setSpeed(20);
stepper.step(-5);
swr = analogRead(swrPin) /4;
swr= map(swr, 0, 1023, 0, 630);
swr = constrain(swr, 0, 1023);
if (swr < swrMin) {
swrMin = swr;
}
EEPROM.write(addr, swrMin);
{ lcd.print(" Scan all Bands");
lcd.setCursor(0,1);
lcd.print("-SWR- "); lcd.print(swr); lcd.print(" -SWR- ");
}
}
Используй симулятор Atmel Studio 7 или протеус и все вопросы отпадут
считывание восстанавливается после выключения и вклчения снова АРДУИНО. Такое впечатление, что где-то мин. показания записываются и хранятся в оперативной памяти и оперативка не даёт записывать другие показания.
Весь скетч показывай. В этом куске вообще чтения из EEPROM нет. И осиль уже Ctrl+T, а то от такого форматирования кода глаза вытекают.
Весь скетч показывай. В этом куске вообще чтения из EEPROM нет. И осиль уже Ctrl+T, а то от такого форматирования кода глаза вытекают.
это реально спасёт твои глаза.
void tune() { digitalWrite(led1, HIGH); stepper.setSpeed(20); stepper.step(-5); swr = analogRead(swrPin) / 4; swr = map(swr, 0, 1023, 0, 630); swr = constrain(swr, 0, 1023); if (swr < swrMin) { swrMin = swr; } EEPROM.write(addr, swrMin); { lcd.print(" Scan all Bands"); lcd.setCursor(0, 1); lcd.print("-SWR- "); lcd.print(swr); lcd.print(" -SWR- "); } }Спасибо за ответ
Я обнаружил. что EEPROM там не нужен, можно считывать через ОЗУ и ОЗУ держит минимальные показания, при каждом новом запуске считывания записываются показания меньше меньшего, а нужно обнулять озу в конце второй функции и при каждом запуске записывать на чистый лист новые показания датчика- swrMin. Теперь не знаю как обнулять ОЗУ, какие применяют команды, не могу нигде найти. Показываю скэтч:
void tune(){ digitalWrite(led1, HIGH); stepper.setSpeed(20); stepper.step(-5); swr = analogRead(swrPin) /4; swr= map(swr, 0, 1023, 0, 630); swr = constrain(swr, 0, 1023); if (swr < swrMin) { swrMin = swr; } { lcd.print(" Scan all Bands"); lcd.setCursor(0,1); lcd.print("min:"); lcd.print(swrMin); lcd.print(" swr:"); lcd.print(swr ); } } void fineTune() { digitalWrite(led2, HIGH); swr = analogRead(swrPin) /4; swr= map(swr, 0, 1023, 0, 630); if (abs(swr - swrMin) > 1) { if ((swr - swrMin) > 0){ { stepper.setSpeed(20); stepper.step(-3); } } else { stepper.setSpeed(20); stepper.step(3); } } lcd.print(" Fine Tune "); lcd.setCursor(0, 1); lcd.print("min:"); lcd.print(swrMin); lcd.print(" swr:"); lcd.print(swr ); }ответ послал
ОЗУ не обнуляют, обнуляют переменные: а = 0;
дело в том. что программа смотрит на ноль как на наилучшее показания датчика и не хочет ничего другого записывать
дело в том. что программа смотрит на ноль как на наилучшее показания датчика и не хочет ничего другого записывать
Тогда наоборот, максимально недостижимое.
О! Я так и сделал, всё заработало, спасибо за участие.