пояснения по скетчу

restiv
Offline
Зарегистрирован: 03.01.2016

Доброго времени форумчане!

Прошу вас помочь со скетчем. Скетч не мой, взял в инете. Я поубирал лишнее, но по тексту там есть много строк, назначение которых мне не понятно. Мне кажется там есть куча ненужных функций, но я не понимаю их смысл. Если Вам не сложно, разъясните пожалуйста их смысл или хотябы помогите максимально упростить его. Спросить не у кого. Остается надежда только на вас:



#include <OneWire.h>

OneWire  ds(8);  // подключен к 8 пину (резистор на 4.7к обязателен)

void setup(void) {
  Serial.begin(9600);
  pinMode(6, OUTPUT);   // Включаем нагрев
  digitalWrite(6, LOW);   
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  
  if ( !ds.search(addr)) {
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
  for( i = 0; i < 8; i++)
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // начало коммуникации
  
  delay(1000);
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // читаем значение

  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // смотрим 9 байтов
    data[i] = ds.read();
    Serial.print(" ");
  }
  // Преобразуем получненный данные в температуру
  // Используем int16_t тип, т.к. он равен 16 битам
  // даже при компиляции под 32-х битный процессор
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3;
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;
    else if (cfg == 0x20) raw = raw & ~3;
    else if (cfg == 0x40) raw = raw & ~1;
  }
  celsius = (float)raw / 16.0;
    Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" C, ");
 

  // Если температура достигает заданной температуры (с погрешностью), отключаем нагрев 
  if (celsius > 35) 
  {
    digitalWrite(6, HIGH); 
  }
  else digitalWrite(6, LOW);
}

 

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

И еще при выводе на монитор порта надписи появляются не с самого края, а на некотором расстоянии от края, подскажите как это исправить?

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

Заранее всех благодарю за любую помощь! 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

25-26 строчка вы 8мь раз выполняете ресет... Это так задумано?

А сдвиг происходит в 39 строке, у вас там 9ть раз выводится " " пробел.

type_s нигде значение не задается, поидее должен быть выбор между 18b20 18s20 1820.

В общем надо сначала разобраться что какая строка значит а потом уже вычищять.