По поводу пробелов, нет не помогает. И оди и два пробела вставлял, не помогает. Вот изменить условие кнопок думаю попробовать.
niz = ++a на niz++ вот это мне кажется действительно исправит ситуацию.
Я всегда делаю 50-60 герц. Это минимальная частота обновления компьютерных мониторов, вот я с них и содрал. Не жалуюсь, ничего не фликует никогда.
Вот это было действительно верным решением. Теперь как положено во время перезагрузки все остается на своих местах, и при повторном включение начинает считать с единиц.
А так же думаю что как Yurik предложил, усадить запись в EEPROM на 5-ю кнопку, дабы запись производилась только когда к примеру выставил значение-записал, а не циклично постоянная запись.
Чтение разумеется тоже однократно- при инициализации переменных. В противном случае от перезаписи еепром просто умрет- она у Вас перезаписывается по разу за цикл.
Всё прошло удачно теперь код правильный. но позже планирую его редактировать.
[code]
#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;
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);
niz = EEPROM.read(addr1);
verh = EEPROM.read(addr);
}
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.setCursor(3,0);
lcd.print(temperatura);
lcd.setCursor(0,1);
lcd.print("Tv:");
lcd.setCursor(3,1);
lcd.print(verh);
lcd.setCursor(9,1);
lcd.print("Tn:");
lcd.setCursor(12,1);
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++;
}
void click2() {
niz--;
}
void click3() {
verh++;
}
void click4() {
verh--;
}
void click5() {
EEPROM.write(addr1, niz);
EEPROM.write(addr, verh);
}
[/code]
Это не может “не помогать”, т.к. это проверенный факт.
Если есть сомнения - проведите эксперимент.
Возьмите первый код, без EEPROM.
Прошейте ардуинку ест-нно. Запустите.
Нажимая кнопку, выставьте не экране значение, к примеру niz = 13;
Затем, нажимая кнопку “-” уменьшайте значения переменной niz до 9.
И всё увидите.
P.S. Пока писал, не заметил появление нового кода.
Попробуйте тоже самое проделать на новой прошивке
Да все работает. только теперь на переменной нужно видимо выставит диапазон, так как доходит до 127 и потом начинает считать со знаком минус -126, -125 и примерно после -120 выходит вообще 1278, буду курить знания!
Как горох об стенку))
переменные изменил
int verh = (0,300);
int niz = (0,300);
вместо:
int8_t verh = 0;
int8_t niz = 0;
теперь нормально идет отсчет
Эффект Да́ннинга — Крю́гера ))
Что бы это значило?
дак это чтобы справа налево считало
Дословно здесь написано : присвой переменой verh типа int значение 0. Ой, нет, лучше 300. С niz то же самое.
Ты же это имел ввиду?
А
См #121
А если без ограничения переменных, как в последней версии#170 , то 4 пробела для int8_t.
А для float (temperatura) вообще 5, или 6, если с отрицательной
И , затем, после пробела, адрес(т.е. курсор) вручную вернуть
на позицию до пробела -
см #94
Закон Брукса гласит: «Всякая найденная в программе последняя ошибка, на самом деле является предпоследней» (в оригинале: «Every last bug you found is actually the penultimate»).
Хотя, Вы, похоже, из тех кому на Руси закон не писан, так что не парьтесь ![]()
Я тебя удивлю я не на Руси.
У нас говорят: “В коде было 7 ошибок, 5 исправили, осталось 9”.
Простите, не припомню, чтобы мы с Вами переходили “на ты”. Покорнейше прошу Вас соблюдать дистанцию и не набиваться мне в друзья.
Это Ваши проблемы. Вы можете быть хоть в Папуа-Новой Гвинее. Разве это мешает тому, что Вам и таким как Вы на Руси закон не писан? По-моему, не мешает.
