Помогите с флагом для реле

Тема в разделе "Arduino & Shields", создана пользователем A.R., 25 дек 2017.

  1. akl

    akl Гуру

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

    Но конкретная реализация сильно зависит от того сколько там тысяч раз в секунду у ТСа изменяется температура.

    пусть разместит код целиком, скорее всего какой-нибудь мимокрокодил всё подправит без всяких денег
     
    Gritsan нравится это.
  2. b707

    b707 Гуру

    нет. не зависит.

    поскольку это вывод на экран - а значит предназначено для человеческих глаз - значит в любом случае обновлять картинку чаще 2-5 раз в секунду нет ни малейшего смысла. как бы в реальности температуру не колбасило...
     
  3. SergeiL

    SergeiL Оракул Модератор

    Там DS18B20, так как часто она может меняться??? ;)
     
    b707 нравится это.
  4. Gritsan

    Gritsan Нерд

    Если бы я все понимал то и не писал бы здесь. В своем первом посте, я как бы намекнул на желание помочь и хорошее настроение. Я понимаю Вас, с тупыми тяжело...
     
  5. SergeiL

    SergeiL Оракул Модератор

    Так а как вам помогать-то?
    Кода нет, что нужно - непонятно.
    Я вот читаю и до сих пор не могу понять что нужно.
    Как вывод на экран связан с условием >30 или <30?
    Вы же все равно выводите, и при больше и при меньше 30. :)
     
    b707 нравится это.
  6. b707

    b707 Гуру

    да. я тоже никак не вкурю значения этой цифры :)
    добро бы ">10" и "<10" - это было бы логично... но 30 ?! - число знаков до 30 и после 30 - одинаковое...
     
    Gritsan и SergeiL нравится это.
  7. akl

    akl Гуру

    больше 30 это уже жара. я бы добавлял там кокой-нибудь типа восклицательный знак.
     
    Gritsan нравится это.
  8. Gritsan

    Gritsan Нерд

    Моя цель обновить экран один раз, когда температура стала выше 30 и обновить один раз если стала ниже 30градусов. Выбрано именно 30 для удобной отладки, чтобы не бегать к морозильной камере). А так он должен обновлятся когда температура изменит колличество занаков.К примеру было 10.0(4знака) Стало 9.0(3) знака, и при изменении последний знак остается на экране как мусор и на экране уже 9.00 будет.
     
  9. SergeiL

    SergeiL Оракул Модератор

    А почему не разделить измерение температуры и вывод на экран?

    При измерении получаете температуру, проверяете равна ли она предыдущему значению, если НЕ РАВНА взводите фалаг в TRUE, сохраняете новое значение. Если РАВНА - ничего не делаете тут.
    В loop() отдельно проверяете этот флаг,
    • если флаг FALSE - не заходите в функцию отображения
    • если флаг TRUE - заходите, отображаете данные температуры из сохраненной переменной, скидываете флаг в FALSE
    ВСЕ...

    Надеюсь температуру из DS вы читаете не чаще чем раз в секунду... хотя бы?
     
    Gritsan нравится это.
  10. Gritsan

    Gritsan Нерд

    Измеряю не чаще 1 секунды. Но можно и реже хоть один раз в 4 секунды. Проблема моей связки тини85 и oled экрана что, он медленно обновляется, выглядит это как мигание. Термометр будет в поле зрения как правило, а боковое зрение хорошо замечает это. Поэтому в планах обновлять экран крайне редко)
     
  11. SergeiL

    SergeiL Оракул Модератор

    Ну так и обновляйте редко.
    Кто вам мешает задать порог изменения температуры для отображения на экране.
    Задали 1,0'С или 1,5'С порог отображения, и сравнивайте разницу между новым и старым значением с этим порогом.
     
    Gritsan нравится это.
  12. Gritsan

    Gritsan Нерд

    А могу попросить Вас привести пример как задавать этот порог?
     
  13. b707

    b707 Гуру

    ответ:
    интересно, что вот в этой фразе непонятно? Для того чтобы вычесть одно значение из другого - тоже пример нужен?
     
  14. parovoZZ

    parovoZZ Гуру

    а зачем? Что мешает обновлять экран раз в 5 секунд?
    Ещё раз спрашиваю - что за экран?
     
  15. akl

    akl Гуру

    Код (C++):
    если(миллиc()-засечка>2000){
       засечка=миллис();
       температура = получитьТемпературу();
       если(температура_прошлая!=температура){
            температура_прошлая=температура;
            олед.поставитьКурсор(9,2);
            олед.печатать("     ");// 5 пробелов
            олед.поставитьКурсор(9,2);
            олед.печатать(температура,1);
       }
    }
    что тут может не работать даже не знаю
     
    Gritsan нравится это.
  16. akl

    akl Гуру

    oled ssd1306 скорее всего. у меня такой же есть
     
    Gritsan нравится это.
  17. Gritsan

    Gritsan Нерд

    Экран i2c oled ssd1306. При обновлении сильно заметно мигание- некрасиво.
     
  18. Gritsan

    Gritsan Нерд

    Спасибо огромное!!! Все понятно и будет работать.
     
  19. akl

    akl Гуру

    кстати в этой аттини теоретически еще может глючить из-за нехватки оперативной памяти.
     
    Gritsan нравится это.
  20. Gritsan

    Gritsan Нерд

    Вполне вероятно. Использую поату digispark, но без загрузчика, т.к. ее можно питать 12вольт и не нужно плату разводить новую.