помогите примером пожалуйста, как хранить переменную char у которой диапазон от -30 до 30. спасибо
это один байт. так что никаких ухищрений не надо, просто пишешь ее туда и все. только когда читаешь - читай в знаковую переменную. а то твои -127... 127 превоатяться в 0..255
помогите примером пожалуйста, как хранить переменную char у которой диапазон от -30 до 30. спасибо
Берите пример с меня! Я любые переменные, независимо от типа, храню очень БЕРЕЖНО
У переменной char размер сколько бит? Размер одной адресуемой ячейки EEPROM сколько бит? Намек ясен? EEPROM-у пофиг что хранить. Важно то, как вы это интерпретируете
УПС, не заметил, что вторая страница уже пошла )) Припоздал с разжевыванием очевидного
помогите примером пожалуйста, как хранить переменную char у которой диапазон от -30 до 30. спасибо
Пилять - char это 0-255. И никаких минусов. Читайте мануалы к си.
Пример дам из своей программы. Не правил - вставил "как есть":
#define EEPROM_Kp 0 //Адрес Kp в EEPROM
#define EEPROM_Tset 1
#define EEPROM_Tinset 5
#define EEPROM_init 9
void setup(void) {
// Serial.begin(9600);
EEPROM_In=EEPROM.read(EEPROM_init);
if(EEPROM_In!=22){
EEPROM.put(EEPROM_Kp,3);
EEPROM.put(EEPROM_Tset,(float)40.00);
EEPROM.put(EEPROM_Tinset,(float)23.00);
EEPROM.put(EEPROM_init,22);
}
// ************************ Чтение установок из памяти ************************************************
Kp=EEPROM.read(EEPROM_Kp); //Коэффициент пропорциональности. Пока предполагаем не более 15
if (Kp!=3) { // пока так
Kp=3;
EEPROM.put(EEPROM_Kp,Kp);
}
EEPROM.get(EEPROM_Tset,Tset); //Установленная температура теплоносителя
if ((Tset <20.00f)||(Tset>80.00f)) { // если в EEPROM не поймешь чего
Tset=20.00f;
EEPROM.put(EEPROM_Tset,Tset);
}
EEPROM.get(EEPROM_Tinset,Tinset); //Установленная температура внутренняя
if ((Tinset <20.00f)||(Tinset>40.00f)) { // если в EEPROM не поймешь чего
Tset=23.00f;
EEPROM.put(EEPROM_Tinset,Tinset);
}
}
Пилять - char это 0-255. И никаких минусов. Читайте мануалы к си.
Хочется человеку signed char ))
Кстати, когда использовал набортную EEPROM ардуины, всегда использовал UPDATE вместо PUT. Очень во многих сценариях с большой вероятностью в ячейку пишется одно и то-же значение. Хотя, если разобраться, практического смысла в этом не много. Больше для успокоения нервов
Кстати, когда использовал набортную EEPROM ардуины, всегда использовал UPDATE вместо PUT. Очень во многих сценариях с большой вероятностью в ячейку пишется одно и то-же значение. Хотя, если разобраться, практического смысла в этом не много. Больше для успокоения нервов
put интересен тем, что он перед записью проверяет содержимое. Тем самым сохраняя EEPROM. update - это какая-то часть put, ну мне так кажется...
починил коррекцию, запись в EEPROM выглядела так EEPROM.put(0,fan_val); и я не мог изменить fan_val, сделал EEPROM.update(0,fan_val); и все заработало...
починил коррекцию, запись в EEPROM выглядела так EEPROM.put(0,fan_val); и я не мог изменить fan_val, сделал EEPROM.update(0,fan_val); и все заработало...
починил коррекцию, запись в EEPROM выглядела так EEPROM.put(0,fan_val); и я не мог изменить fan_val, сделал EEPROM.update(0,fan_val); и все заработало...
Это я не понял предыдущего сообщения. fan_val у вас 8 бит, поэтому put и update в вашем случае по результату и по синтаксису эквивалентны. Про остальное вообще не понял.
В строке №189 неправильно используется локальная автоматическая переменная timer_pid. Он не будет запоминать время начала между вызовами функции, как Вам того, похоже, хотелось бы. А потому функция pid_timer (условие в ней) срабатывает когда ей вздумается и предсказать когда она сработает, а когда - нет, невозможно.
Ровно та же байда в строке №221 с переменной filter_temp_timer. Точно также условие в функции average_tempсрабатывает когда ему заблагорассудится.
Вот, как раз и Вы это заметили
Smarodina пишет:
таймеры своей жизнью жить вздумали...
Пока хватит.
Smarodina пишет:
и попутно вопрос, ячейка EEPROM Хранит значение 0...255 и только? или -128...127
Это Вам кажется, что между "0..255" и "-128..127" есть какая-то разница. На самом деле это одно и то же.
или как я понимаю датчик пока не родит новое значение температуры дает то что есть и ничего страшного не происходит?
или спрашивать надо по таймеру? а не долбить?
Наверное Вам будет трудно понять, но представьте ситуацию - Вам шеф дал работу и каждую секунду (для примера) требует отчета по работе. При этом он кричит из окна, а у Вас "болгарка" работает. И в какой-то момент Вам кажется, что Вас посылают нах...
Кроме того злые языки утверждают, что если опрашивать микруху слишком усердно, то она сама по себе начинает нагреваться, соответственно, и температуру начинает показывать не совсем ту, что нужно ))
Кроме того злые языки утверждают, что если опрашивать микруху слишком усердно, то она сама по себе начинает нагреваться, соответственно, и температуру начинает показывать не совсем ту, что нужно ))
Точно!
И, в принципе, можно даташит почитать. Он не просто так написан и не людьми с улицы, а разработчиками микросхемы...
помогите примером пожалуйста, как хранить переменную char у которой диапазон от -30 до 30. спасибо
это один байт. так что никаких ухищрений не надо, просто пишешь ее туда и все. только когда читаешь - читай в знаковую переменную. а то твои -127... 127 превоатяться в 0..255
и попутно вопрос, ячейка EEPROM Хранит значение 0...255 и только? или -128...127
Это решает программист.
помогите примером пожалуйста, как хранить переменную char у которой диапазон от -30 до 30. спасибо
Используйте signed char вместо char.
помогите примером пожалуйста, как хранить переменную char у которой диапазон от -30 до 30. спасибо
Берите пример с меня! Я любые переменные, независимо от типа, храню очень БЕРЕЖНО
У переменной char размер сколько бит? Размер одной адресуемой ячейки EEPROM сколько бит? Намек ясен? EEPROM-у пофиг что хранить. Важно то, как вы это интерпретируете
УПС, не заметил, что вторая страница уже пошла )) Припоздал с разжевыванием очевидного
помогите примером пожалуйста, как хранить переменную char у которой диапазон от -30 до 30. спасибо
Пилять - char это 0-255. И никаких минусов. Читайте мануалы к си.
Пример дам из своей программы. Не правил - вставил "как есть":
Пилять - char это 0-255. И никаких минусов. Читайте мануалы к си.
Хочется человеку signed char ))
Кстати, когда использовал набортную EEPROM ардуины, всегда использовал UPDATE вместо PUT. Очень во многих сценариях с большой вероятностью в ячейку пишется одно и то-же значение. Хотя, если разобраться, практического смысла в этом не много. Больше для успокоения нервов
Кстати, когда использовал набортную EEPROM ардуины, всегда использовал UPDATE вместо PUT. Очень во многих сценариях с большой вероятностью в ячейку пишется одно и то-же значение. Хотя, если разобраться, практического смысла в этом не много. Больше для успокоения нервов
put интересен тем, что он перед записью проверяет содержимое. Тем самым сохраняя EEPROM. update - это какая-то часть put, ну мне так кажется...
Пилять - char это 0-255. И никаких минусов. Читайте мануалы к си.
Уверены?
спасибо всем за ответы, буду пробовать. а пока поломал эту коррекцию как то что значение меняется на единицу и сразу обратно...
починил коррекцию, запись в EEPROM выглядела так EEPROM.put(0,fan_val); и я не мог изменить fan_val, сделал EEPROM.update(0,fan_val); и все заработало...
починил коррекцию, запись в EEPROM выглядела так EEPROM.put(0,fan_val); и я не мог изменить fan_val, сделал EEPROM.update(0,fan_val); и все заработало...
Щито?
починил коррекцию, запись в EEPROM выглядела так EEPROM.put(0,fan_val); и я не мог изменить fan_val, сделал EEPROM.update(0,fan_val); и все заработало...
Щито?
не понял вопроса
не понял вопроса
Это я не понял предыдущего сообщения. fan_val у вас 8 бит, поэтому put и update в вашем случае по результату и по синтаксису эквивалентны. Про остальное вообще не понял.
ну я же написал, через put не работало, написал update заработало
полтергейст
И таких хватает... Полтергейстов... Вот что опять таймеры своей жизнью жить вздумали... Не одно так другое...
теперь жду комментариев где не правильно!
Обалдеть! Ощущеие, что Вам должны.
Ну, ладно, держите:
В строке №189 неправильно используется локальная автоматическая переменная timer_pid. Он не будет запоминать время начала между вызовами функции, как Вам того, похоже, хотелось бы. А потому функция pid_timer (условие в ней) срабатывает когда ей вздумается и предсказать когда она сработает, а когда - нет, невозможно.
Ровно та же байда в строке №221 с переменной filter_temp_timer. Точно также условие в функции average_tempсрабатывает когда ему заблагорассудится.
Вот, как раз и Вы это заметили
Пока хватит.
и попутно вопрос, ячейка EEPROM Хранит значение 0...255 и только? или -128...127
Это Вам кажется, что между "0..255" и "-128..127" есть какая-то разница. На самом деле это одно и то же.
спасибо за ответ.
я далек от программирования... но быстро учусь:)
классный форум, глаза болят читать:)
мне подсказывают что не правильно обращаюсь с датчиком ds18b20
что нельзя запрашивать температуру и тут же требовать результат. в чем собственно вопрос, оно работает, но оно влияет на выполнение программы?
или как я понимаю датчик пока не родит новое значение температуры дает то что есть и ничего страшного не происходит?
или спрашивать надо по таймеру? а не долбить?
классный форум, глаза болят читать:)
или как я понимаю датчик пока не родит новое значение температуры дает то что есть и ничего страшного не происходит?
или спрашивать надо по таймеру? а не долбить?
Если вместо форума почитать инструкцию на датчик, то можно легко узнать сколько нужно ждать конвертацию и что будет если не ждать.
классный форум, глаза болят читать:)
или как я понимаю датчик пока не родит новое значение температуры дает то что есть и ничего страшного не происходит?
или спрашивать надо по таймеру? а не долбить?
Наверное Вам будет трудно понять, но представьте ситуацию - Вам шеф дал работу и каждую секунду (для примера) требует отчета по работе. При этом он кричит из окна, а у Вас "болгарка" работает. И в какой-то момент Вам кажется, что Вас посылают нах...
Кроме того злые языки утверждают, что если опрашивать микруху слишком усердно, то она сама по себе начинает нагреваться, соответственно, и температуру начинает показывать не совсем ту, что нужно ))
Кроме того злые языки утверждают, что если опрашивать микруху слишком усердно, то она сама по себе начинает нагреваться, соответственно, и температуру начинает показывать не совсем ту, что нужно ))
Точно!
И, в принципе, можно даташит почитать. Он не просто так написан и не людьми с улицы, а разработчиками микросхемы...
считывай через секунду. Или, если процесс позволяет, реже.
в общем получился вот такой контроллер на данный момент
а вот ссылка на плейлист вся боль за три месяца рождения этого скетча
https://youtube.com/playlist?list=PL5SKdGoX_Z_RHaOFNApHLiNN40W0TvVu1
теперь думаю как сделать не фиксированные режимы работы, а выставить минимальный и максимальный и модуляцию между ними
какую еще модуляцию ?
Ну чтоб контроллер сам делал режим между минимум и максимум
Ну типо вот тебе рамки, а дальше сам:)
А что сам ? ) Температуру поддерживал ?
режим для работы изобретал чтоб держать заданную температуру