помогите разобраться с EEPROM

kmk
Offline
Зарегистрирован: 22.09.2015

Помогите решить проблему
программа определяет минимальные значения аналогового датчика, эти данные записываются в 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- ");
} 
 }

 

Immortal
Offline
Зарегистрирован: 28.12.2013

Используй симулятор Atmel Studio 7 или протеус и все вопросы отпадут

kmk
Offline
Зарегистрирован: 22.09.2015

считывание восстанавливается после выключения и вклчения снова АРДУИНО. Такое впечатление, что где-то мин. показания записываются и хранятся в оперативной памяти и оперативка не даёт записывать другие показания.

Radjah
Offline
Зарегистрирован: 06.08.2014

Весь скетч показывай. В этом куске вообще чтения из EEPROM нет. И осиль уже Ctrl+T, а то от такого форматирования кода глаза вытекают.

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

Radjah пишет:

Весь скетч показывай. В этом куске вообще чтения из 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- ");
  }
}

 

kmk
Offline
Зарегистрирован: 22.09.2015

Спасибо за ответ
Я обнаружил. что 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 );

}

 

 

kmk
Offline
Зарегистрирован: 22.09.2015

ответ послал

bwn
Offline
Зарегистрирован: 25.08.2014

ОЗУ не обнуляют, обнуляют переменные: а = 0;

kmk
Offline
Зарегистрирован: 22.09.2015

дело в том. что программа смотрит на ноль как на наилучшее показания датчика и не хочет ничего другого записывать

bwn
Offline
Зарегистрирован: 25.08.2014

kmk пишет:

дело в том. что программа смотрит на ноль как на наилучшее показания датчика и не хочет ничего другого записывать

Тогда наоборот, максимально недостижимое.

kmk
Offline
Зарегистрирован: 22.09.2015

О! Я так и сделал, всё заработало, спасибо за участие.