Доработать готовый скетч (термостат на arduino, до 5 датчиков ds18b20 )

Тема в разделе "Закажу проект", создана пользователем shum93, 23 авг 2021.

  1. shum93

    shum93 Нуб

    Требуется добавить возможность установки температуры вкл\откл нагрузки с точностью до 0.5 градуса.Сейчас в готовом коде только целые значения установки температуры
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Дак а в чем проблема?Или тупо Лень?
     
  3. shum93

    shum93 Нуб

    тупо не умею програмировать
     
  4. Airbus

    Airbus Радиохулиган Модератор

  5. shum93

    shum93 Нуб

  6. Airbus

    Airbus Радиохулиган Модератор

    Дак этож Пушной Звер! Уважаемый форумер-напиши ему в личку
     
  7. a1000

    a1000 Гуру

    Давно я не занимался этим. Если не ошибаюсь, делаем следующее:
    1. В объявленном массиве
    Код (C++):
    byte tempOUTon[5];  // массив с температурой включения выхода
    меняем тип с byte на float
    Код (C++):
    float tempOUTon[5];  // массив с температурой включения выхода
     
    2. В функции void setMenu(byte pos){ // установка температуры меняем кусок
    Код (C++):
    if (KEY == 2) { // если нажата кнопка
          tempOUTon[pos]--;   // изменяем значение
            if (tempOUTon[pos] > 125) tempOUTon[pos] = 0;
          EEPROM.write(pos, tempOUTon[pos]); // сохраняем в еепром
         }
         else if (KEY == 5){
           tempOUTon[pos]++;
             if (tempOUTon[pos] > 125) tempOUTon[pos] = 0;
           EEPROM.write(pos, tempOUTon[pos]);  
         }
    на
    Код (C++):
    if (KEY == 2) { // если нажата кнопка
          tempOUTon[pos] = tempOUTon[pos]-0,5;   // изменяем значение
            if (tempOUTon[pos] > 125) tempOUTon[pos] = 0;
          EEPROM.write(pos, tempOUTon[pos]); // сохраняем в еепром
         }
         else if (KEY == 5){
           tempOUTon[pos] = tempOUTon[pos]+0,5;
             if (tempOUTon[pos] > 125) tempOUTon[pos] = 0;
           EEPROM.write(pos, tempOUTon[pos]);  
         }
    Сильно не вникал, но вроде должно работать.
     
    Andrey12 нравится это.
  8. shum93

    shum93 Нуб

    благодарю парни.уже все сделали.
     
  9. shum93

    shum93 Нуб

    мне вот так сделали
    if (KEY == 2) { // если нажата кнопка
    tempOUTon[pos] -= 0.1; // изменяем значение
    if (tempOUTon[pos] < 0) tempOUTon[pos] = 125;
    EEPROM.put(pos*sizeof(float), tempOUTon[pos]); // сохраняем в еепром
    }
    else if (KEY == 5){
    tempOUTon[pos] += 0.1;
    if (tempOUTon[pos] > 125) tempOUTon[pos] = 0;
    EEPROM.put(pos*sizeof(float), tempOUTon[pos]);
    }
    все работает.единственное перед загрузкой скетча необходимо очистить ЕЕРROM/
     
  10. shum93

    shum93 Нуб



    этот код не работает.невозможно задать температуру
     
  11. SergeiL

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

    А зачем точность то 0.5'C ?
    Причем в выложенном вами коде - вообще 0.1'С
     
  12. shum93

    shum93 Нуб

    занимаюсь самогоноварением.точность до 0.1 необходима по технологии ректификации
     
  13. akl

    akl Гуру

    а дс18 в 0.1 градус может? он и 0.5 не факт что адекватно показывает
     
    Airbus и Andrey12 нравится это.
  14. shum93

    shum93 Нуб

    я занимаюсь зерновыми дистиллятами .мне пока интересно
     
  15. parovoZZ

    parovoZZ Гуру

    Для 0.1 нужна хорошая опора. DS18b20 откровенно говоря здесь пасует.
     
    KindMan, Airbus и Andrey12 нравится это.
  16. Airbus

    Airbus Радиохулиган Модератор

    Тогда точно промышленное решение
     
  17. parovoZZ

    parovoZZ Гуру

    Да для самогона достаточно откалиброваться в узком диапазоне температур и всё. Хорошая опора (может даже две - снизу и сверху) + хороший линейный АЦП.
     
  18. a1000

    a1000 Гуру

    И что, в массив типа byte пихаются дробные числа?
     
    microsystems нравится это.
  19. shum93

    shum93 Нуб

    закройте тему.вопрос решен.всем спасибо
     
  20. akl

    akl Гуру

    EEPROM.put(pos*sizeof(float), tempOUTon[pos]); намекает, что массив был переделан во флоат
     
    Andrey12 нравится это.