После отключения считает слева направо

Приветствую. Такая беда собрал корявинький костыль для управления котлом на отработке, суть куправлять насосом масла при определенных температурах. Датчик обычный терморезистор NTC3950 выводит температуру с котла и далее с помощью кнопок выставляются значение верхней температуры и нижней. Как бы все гуд но после отключения и повторного включения происходить следующее действие, к примеру с eeprom сохранённая информация в 150С начинает отсчет не с единиц, а с десяток итого бывает с сотен хотя степень переключения задикларивона по еденично то есть:
int a = 1;
uint8_t verh = 0;

На кнопки отдельные функции:

void ( stick1){
verh = ++a;
}
void (stick2){
verh = --a;
}

После прошивки считает правильно с еденицы
После выкл, вкл. начинает считать с десяток пропуская еденицы.

Где косяк?
Если надо позже скину весь код и фото как все происходит.

Нам не надо. Надо вам. И код нужно вставлять правильно, если хотите, чтобы его кто-нибудь посмотрел

Дополню, не только

но и объяснять хоть сколько-нибудь внятно. Например, из Вашего объяснения

я понял только то, что Вы употребляете какие-то тяжёлые антидепрессанты.

2 лайка

Нам то нафиг надо.

Как бы помощи просил, а не медицинского диагноза. Что именно не понятно в тексте давайте поясню.

Ваще ничего не понятно

Почитайте пожалуйста внимательно пост номер 2 уважаемого v258, особое внимание обратите на то что он подчеркнул красным, и оформите свой первый пост в соответствии с правилами. Отношение к вам как к адекватному человеку изменится.

1 лайк

В первую очередь непонятно, что Вам непонятно в посте №2. Где правильно вставленный код?

А в тексте непонятно ничего. Просто неясно, что Вы хотели сказать.

Попробуйте начать сначала и с кодом и с текстом.

надо

А вообще, если код предполагался “позже”. то и начинать не стоило. Когда будет код, тогда и вопросы зададите.

1 лайк

Хорошо чуть позже отправлю код. Просто в данный момент пишу с телефона.

И уже 10 сообщений выносите нам мозг. Нет кода - нет разговора, запомните это. И слова перепишите, то, что Вы сейчас написали не понимает никто, уверен, что и Вы сами тоже.

#include <EEPROM.h>
#include <OneButton.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

#define B 3950 // B-коэффициент
#define SERIAL_R 102000 // сопротивление последовательного резистора, 102 кОм
#define THERMISTOR_R 100000 // номинальное сопротивления термистора, 100 кОм
#define NOMINAL_T 25 // номинальная температура (при которой TR = 100 кОм)

const byte tempPin = A0;
int NASOS = 2;
int relem = 12; 

uint8_t addr = 0;
uint8_t addr1 = 1; 

#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO_EVERY)
#define PIN_INPUT1 3
#define PIN_INPUT2 4
#define PIN_INPUT3 5
#define PIN_INPUT4 6
#define PIN_INPUT5 7
#endif
  
int8_t verh = 0;
int8_t niz = 0;
int8_t a=1;

OneButton button1(PIN_INPUT1, OUTPUT);
OneButton button2(PIN_INPUT2, OUTPUT);
OneButton button3(PIN_INPUT3, OUTPUT);
OneButton button4(PIN_INPUT4, OUTPUT);
OneButton button5(PIN_INPUT5, OUTPUT);

void setup() {
    Serial.begin( 9600 );
    pinMode( tempPin, INPUT );
   
    pinMode(NASOS, OUTPUT);
    pinMode(relem, OUTPUT);
    lcd.init();  
    lcd.backlight();
 lcd.clear();
   button1.attachClick(click1);
  button2.attachClick(click2);
  button3.attachClick(click3);
  button4.attachClick(click4);
  button5.attachClick(click5);

  }
void loop() {
    int t = analogRead( tempPin );
    float tr = 1023.0 / t;
    tr = SERIAL_R /tr;
  float temperatura;
    temperatura = tr / THERMISTOR_R; // (R/Ro)
    temperatura = log(temperatura); // ln(R/Ro)
    temperatura /= B; // 1/B * ln(R/Ro)
    temperatura += 1.0 / (NOMINAL_T + 273.15); // + (1/To)
    temperatura = 1.0 / temperatura; // Invert
    temperatura -= 273.15; 
     
  if(temperatura >= verh) digitalWrite(NASOS,HIGH);
  if(temperatura <= niz) digitalWrite(NASOS,LOW);
    lcd.setCursor(0,0);
    lcd.print("T:");
    lcd.print(temperatura);
    
    lcd.setCursor(0,1);
    lcd.print("Tv:");
    lcd.print(verh);

    lcd.setCursor(9,1);
    lcd.print("Tn:");
    lcd.print(niz);

  int st = 85;  
  if(temperatura >= st) digitalWrite(relem,HIGH);
else digitalWrite(relem,LOW);
  button1.tick();
  button2.tick();
  button3.tick();
  button4.tick();
  button5.tick();

    delay(10);
}  
void click1() {
  niz = ++a;
} 
void click2() {
 niz = --a;
 }
void click3() {
 verh = ++a;
}
void click4() {
verh = --a;

}
void click5() {

}
  if (niz >= 1)EEPROM.write(addr1, niz);
   niz = EEPROM.read(addr1);
  if (verh >= 2)EEPROM.write(addr, verh);
   verh = EEPROM.read(addr);
  

теперь мне надо понять почему на LCD при первом включение, при помощи кнопок прописывается правильный параметр Tv и Tn, но как только перезагружаешь, то параметры начинают отсчитываться от сотен либо десяток. сейчас постараюсь отправить как это выглядит на фото.

Что код надо выкладывать полностью

:man_facepalming:
Да!!! помощи километр!!!

«Какой мерой вы мерите, той и Бог вам отмерит и прибавит еще» (Мк 4:24). Но, если Вам трудно понимать такой язык, я могу перевести: «Всякому взбрыкнувшему да отбрыкнется, и с лихвой, ибо нефиг»

1 лайк

А как помочь то, если кто-то даже код не в состоянии выложить?

Просто замечательный комментарий.