Почему не работает код включения реле

вот пример без библиотеки

#include <OneWire.h>
OneWire ds(4);
int16_t temperature;
unsigned long lastUpdateTime;
unsigned long timing;

void setup() {
  Serial.begin(57600);
}

void loop() {
  if (millis() - timing > 2000) {
    timing = millis();
    detectTemperature();
    Serial.println(temperature);
  }
}

int detectTemperature() {
  byte data[2];
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);
  if (millis() - lastUpdateTime > 1500) {
    lastUpdateTime = millis();
    ds.reset();
    ds.write(0xCC);
    ds.write(0xBE);
    data[0] = ds.read();
    data[1] = ds.read();
    temperature = (data[1] << 8) + data[0];
    temperature = temperature >> 4;

  }
}

О, спасибо!)))

Шикарно. Почему вы такие злые и не можете диктовать безрукому чтобы он написал слепому как починить прибор которого у него нет.

3 лайка

Объясните другу, что вебдев-новичок - это совсем не прогер.
Нормальный прогер в сообщении 4 обратил бы внимание не на эмоции, а на вполне ясные указания на ошибки. И у нормального прогера обязательно нашелся бы свой датчик для тестов…

Вам совет - откажитесь от этой задачи. Даже человеку, хорошо знающему архитектуру - очень трудно писать, не имея в руках железа. А новичку это попросту невозможно. И от помощи на форуме это не зависит.

3 лайка

Еще один умник…

Ну во-первых я не новичок в веб-деве. Я уже 5 с лишним лет этим занимаюсь. Во-вторых я написал работающий код. В слепую. Без ваших сверх-знаний. Он работает. Пересадить на другую библиотеку его я смогу тоже без ваших сверх-знаний. И в-третьих, мне совершенно пофиг, что вы думаете на этот счет. Если я хочу этим заниматься, я буду этим заниматься. Ваш совет ущербный. Все с чего-то начинают. Я начал с этого. А вы сами знаете, куда вам стоит прогуляться со подобными советами.

Потому что readTemp это прочитать температуру с датчика.
а надо getTempInt получить температуру.


#include <microDS18B20.h>               // библиотека ds18b20      https://github.com/GyverLibs/microDS18B20


#define Rele 13                         // пин реле (13 светодиод на плате)
#define Pin_DS18 2                      // пин DS18B20

uint8_t Temp_Resolution = 12;           // точность 9-12 попугаев
int8_t Temp_On = 10;                    // температура включения
int8_t Temp_Off = 15;                   // выключения
uint32_t Temp_Timer, Temp_Time = 10;    // таймер, опрос в секундах
bool Rele_On;                           //

MicroDS18B20<Pin_DS18> DS18;

void setup()
{
  Serial.begin(74880);                  //
  DS18.setResolution(Temp_Resolution);
  pinMode(Rele, OUTPUT);
  Temp_Time = Temp_Time * 1000;         //переводим секунды в милисекунды
}

void loop()
{
  if (millis() - Temp_Timer >= Temp_Time)
  {
    Temp_Timer = millis();             // сбросим таймер
    DS18.requestTemp();                // запросим температуру


    //====== проверка на получение температуры
    if (DS18.readTemp())                     // если получили температуру
    {
      Serial.println(DS18.getTemp());        // выведем в порт температуру
      
      if (DS18.getTempInt() <= Temp_On)         // если температура ниже getTempInt
      {
        Rele_On = true;
      }
      else if (DS18.getTempInt() >= Temp_Off)   // если выше
      {
        Rele_On = false;
      }
    }
    else                                      // если не получили температуру
    {
      Serial.println(" error ds");
      Rele_On = false;
    }
    Serial.println(Rele_On);
  }
  digitalWrite(Rele, Rele_On);       
}
~~~ возможно так как то

Спасибо.

дурак ты просто.
Я занимаюсь С++ “почти профессионально” (временами пишу код на заказ) почти 30 лет. Но за редчайшим исключением я не пишу кода без тестов на реальном железе.

То что я написал - это не насмешка, а реальный совет. Не хочешь - трахайся сам.

Меня тут уже дураком и имбецилом назвали… Я просто задал вопрос. Я жалею, что это сделал уже.

Ни хрена ты не понял! Ты в каждом!!! проходеvoid loop() запрашиваешь преобразование и раз в секунду в там же походе, практически мгновенно!!! пытаешься прочесть температуру

Понял, понял. Я знаю, что запрос надо убрать в if. И увеличить время секунд до 15-20 лучше.

чего ж ты пришел спрашивать тогда, если твой код работает? :)))
ну и врун

А не че, что я спросил еще вчера? Теперь он работает. Тут я узнал только как его улучшить. Ну и вот на счет запроса тоже. Всем, кто помог, спасибо.

Ни хера себе! Все ошибки подробно расписаны. Ну, если Вам это не полезно, то я с позором удаляюсь, т.к. ничего более полезного всё равно не скажу. Разбирайтесь сами. Удачи!.

а вот почему ты такой борзый… потому что уже просить не надо? :slight_smile:

И как к вам, “новечкам”, еще относится, если вы унижаетесь, когда выпрашиваете - а как получили, начинаете поливать всех помощников грязью?

Модераторы, предлагаю закрыть тему.
А ТС - не плюй в колодец. Ты еще приди сюда с вопросом… шутка.

а голову пеплом посыпать будете?

Некому посыпать, ТС нахамил и отвалился.

ТС забанен

Я бы предложил снести ветку полностью, но не знаю как другие участники отнесутся

Да там выше есть ответы по существу, которые ТС не увидел/проигнорировал/не понял. Пусть висит