Перейти к содержанию
VALKNUT

Ардуино в помощь аквариуму

Рекомендуемые сообщения

7 минут назад, Haaans сказал(а):

image.thumb.png.3bc56ed2729d1257319866530d550b72.png

Что-то из этого всего мертвое

 

Рано хоронить. =)))
Оставляем 2 датчика и продолжаем.
Проверяем:
1. Резистор между красным и желтым есть?
2. Питание с пина контроллера (3.3) на красном есть?
3. Черный на GND?

Повесьте желтый на D1(в скетче замените)

#define ONE_WIRE_BUS  5

И все же, не люблю я макетные платы =))) Только пайка! =)
Но для проверки и макетка конечно пойдет..

Поделиться сообщением


Ссылка на сообщение
8 минут назад, VALKNUT сказал(а):

Рано хоронить. =)))

Не собирался :)

9 минут назад, VALKNUT сказал(а):

Проверяем:
1. Резистор между красным и желтым есть?
2. Питание с пина контроллера (3.3) на красном есть?
3. Черный на GND?

1. Есть. Номинал проверен мультиком.

2. Есть. Проверено мультиком на выходах макетки.

3. Да.

Переткнул датовые кабеля в соседние дырки на плате, на всякий случай.

Поделиться сообщением


Ссылка на сообщение
1 минуту назад, Haaans сказал(а):

Не собирался :)

1. Есть. Номинал проверен мультиком.

2. Есть. Проверено мультиком на выходах макетки.

3. Да.

Переткнул датовые кабеля в соседние дырки на плате, на всякий случай.

Ладно, хватит на сегодня физкультурки =))) Завтра продолжим.

Поделиться сообщением


Ссылка на сообщение
1 минуту назад, VALKNUT сказал(а):

Завтра продолжим.

Принято. Окна все равно упали в синий экран 

Победил. 

image.thumb.png.2f3504cb626b4c09758360f6d69453c2.png

Помогло выбрать другую плату - LOLION(WEMOS) D1 ESP-WROOM-02

Поделиться сообщением


Ссылка на сообщение
6 часов назад, Haaans сказал(а):

Победил

Теперь можно изменить разрешение датчиков с 9 на 12 - это повысит точность измерения.

Надо обратить внимание, что примеры даются как база и в них не сильно заботятся об эффетивности. Запрос температуры занимает время/ресурсы. По этому в бесконечные циклы (loop) опрос лучше не ставить, да и вообще, если измерять температуру воды в аквариуме, то чаще чем раз в 10сек не имеет смысла, т.к. за даже за 10сек невозможно изменить температуру воды (даже в 20 литровом аквсасе) на градус или даже на пол градуса.

Правильно было бы сделать первый опрос при старте устройства и потгм каждые 10 или 20, 30сек

Еще момент: эти датчики температуры при частом обращении (чаще 1 опрос/сек) сами по себе нагреваются и дают искаженные результаты.

Поделиться сообщением


Ссылка на сообщение
5 часов назад, VALKNUT сказал(а):

Теперь можно изменить разрешение датчиков с 9 на 12 - это повысит точность измерения.

Надо обратить внимание, что примеры даются как база и в них не сильно заботятся об эффетивности. Запрос температуры занимает время/ресурсы. По этому в бесконечные циклы (loop) опрос лучше не ставить, да и вообще, если измерять температуру воды в аквариуме, то чаще чем раз в 10сек не имеет смысла, т.к. за даже за 10сек невозможно изменить температуру воды (даже в 20 литровом аквсасе) на градус или даже на пол градуса.

Правильно было бы сделать первый опрос при старте устройства и потгм каждые 10 или 20, 30сек

Еще момент: эти датчики температуры при частом обращении (чаще 1 опрос/сек) сами по себе нагреваются и дают искаженные результаты.

Понятно. То есть теперь нужно просто прочитать пример (в нем есть комментарии), потом матчасть по программированию у Alex Gyver например и просто попробовать сделать как Вы написали. Окей. 

Еще момент. Несмотря на то что температуру они начали показывать. Точнее компьютер начал ее отображать корректно. Поиск датчика все равно не работает . Может надо попробовать другие платы (их там 4-5 штук)

Поделиться сообщением


Ссылка на сообщение

Если показывает температуру и уникальный адрес, то поиск уже был произведен и датчики в работе.

9 минут назад, Haaans сказал(а):

Поиск датчика все равно не работает

Как понять не работает?

Поделиться сообщением


Ссылка на сообщение
12 минут назад, VALKNUT сказал(а):

Как понять не работает?

Вывод остался точно такой как и был. Адреса датчиков не получил.

Поделиться сообщением


Ссылка на сообщение

Скрин можно?

Мы сейчас говорим о примере, который первый пробовали или о том, на котором увидели температуру?

Поделиться сообщением


Ссылка на сообщение

2 часов назад, AlexLi сказал(а):

Ничего не понимаю, но чтение захватывает дух!!!))))

Согласен, тенденция радует есть у кого проконсультироваться если понадобится собрать свет или датчики настроить.

Поделиться сообщением


Ссылка на сообщение
49 минут назад, shkush сказал(а):

Согласен, тенденция радует есть у кого проконсультироваться если понадобится собрать свет или датчики настроить.

@VALKNUT скоро все нужные приблуды изобретёт и будет их на траву менять)))))

Поделиться сообщением


Ссылка на сообщение
2 минут назад, AlexLi сказал(а):

@VALKNUT скоро все нужные приблуды изобретёт и будет их на траву менять)))))

Да ты оптимист! Я сам только учусь =)

Поделиться сообщением


Ссылка на сообщение
3 часов назад, VALKNUT сказал(а):

Да ты оптимист! Я сам только учусь =)

Все мы учимся.

Поделиться сообщением


Ссылка на сообщение
21 часов назад, VALKNUT сказал(а):

Скрин можно?

Мы сейчас говорим о примере, который первый пробовали или о том, на котором увидели температуру?

Вот в этом сообщении ссылка такая же выдача. Это я говорю про пример OneWire search.

А саму температуру в примере Multiplie показывает.

20 часов назад, AlexLi сказал(а):

Офигеть!!! Ничего не понимаю, но чтение захватывает дух!!!))))

А интерес появляется?

Поделиться сообщением


Ссылка на сообщение

В общем доделал, свою шурешку. Предварительный прогон прошла и проверку на помехи и пропадание питания.

Получилось 7 линий на любое управление (силовые реле) с оптической развязкой от сети + линия (2 шт USB) для зарядки самого планшета и еще что-то можно сунуть.

Программирование не требуется, запуск команд - это задача списка обычных будильников и ручное быстрое управление - это нажим на звуковой файл в галерее (звук 1-2 сек).

Интернет в данном случае вообще не нужен.

С интернета можно так-же дать команду на планшет (через транзитный сайт) и устройство команду получит ...

Вот на данный момент REG собран на 1564 и 533 серии, делать такое никто не будет, но при наличии времени, хочу сделать REG на контроллере , будет функций побольше.

Такие устройства жутко не любит майкрософт)) Их нельзя контролить и код неизвестен, и интернет не обязателен.

DSC_0003.JPG

DSC_0004.JPG

Поделиться сообщением


Ссылка на сообщение
1 час назад, Haaans сказал(а):

А интерес появляется?

я знаю, что это не моё(((

Поделиться сообщением


Ссылка на сообщение
2 минут назад, AlexLi сказал(а):

я знаю, что это не моё(((

Оу… что ж, приятного чтения.

Поделиться сообщением


Ссылка на сообщение
1 час назад, Lx671 сказал(а):

В общем доделал, свою шурешку. Предварительный прогон прошла и проверку на помехи и пропадание питания.

Рассматривал фотки и схемы, читал описание девайса и не нашел сабжа (предмета обсуждения данной темы).
В чем прикол? :ap: Хде ардуины или хотя бы еспэшки? Какое отношение к этой теме имеет устройство?
Можем обсудить "незамерзайку" для Австралии или ну, не знаю.. зимнюю резину для ЮАР.

Вам наверно следует создать отдельную тему, например "Крутые самоделки для аквариума" или "Теория заговора Майкрософт, в контексте управления аквариумом".
Да мало ли хороших названий! =))

Поделиться сообщением


Ссылка на сообщение
9 минут назад, VALKNUT сказал(а):

Хде ардуины или хотя бы еспэшки? Какое отношение к этой теме имеет устройство?

Так я написал где)) Там модуль собрать... Но надо понять, можно-ли обеспечить на контроллер 2 входа (0/1), для датчиков (монтажное ИЛИ оставить) и 8 выходов. И к контроллеру тоже силовой блок нужен, иначе вы останетесь с тем что дают.  Я например, не стал бы делать светодиодные матрицы на 30в. На 220 (308в полные) через полевики удобнее. И 5 проводов для управления RGB мне не надо, хватит 3-х (судя по коду).

Пока, да, обсуждать нечего, написал, что-бы понятно было куда хочу контроллер засунуть)) Просто с ним получается система типа умного дома - имеет смысл.

Поделиться сообщением


Ссылка на сообщение

@VALKNUT приветствую. Понял я почему адреса не определялись. image.thumb.png.4a45c148e7ada02de758a587bb8b89c0.png

Суть: Если один раз открывал некий пример, то он автоматом привяжется к выбранной на тот момент плате. И при новом открытии (т.е. файл - пример и т.д.) он снова выберет ту плату, что была указана при ПЕРВОМ открытии если не указать другого. И соответственно загрузиться так что не будет правильно понимать ответ.

А помогла мудрость одного старого еврея, да будет здравствовать он долго, "Если у тебя на выходе получается какая-то шляпа, то проверь, что у тебя на входе". Применимо ко многим вещам, куда запускаешь свои шелудивые ручки.

P.S. разобраться ставил именно цель, чтобы работало, а то как-то странно. один пример работает, второй нет.

Теперь пошел смотреть пример по опросу датчиков.:fw:

Поделиться сообщением


Ссылка на сообщение
3 минут назад, Haaans сказал(а):

P.S. разобраться ставил именно цель, чтобы работало, а то как-то странно. один пример работает, второй нет.

Ну вот! =))

Поделиться сообщением


Ссылка на сообщение
25 минут назад, Haaans сказал(а):

Теперь пошел смотреть пример по опросу датчиков

Шаг 1-ый. Переведем все комментарии. Английский не плох, но лучше все же для начала перевести

Поделиться сообщением


Ссылка на сообщение
1 минуту назад, Haaans сказал(а):

Английский не плох, но лучше все же для начала перевести

Английский плох. Английский фтопку.

Поделиться сообщением


Ссылка на сообщение
1 минуту назад, VALKNUT сказал(а):

Английский плох. Английский фтопку.

Согласен. Значит работать будем с русскими комментариями

Поделиться сообщением


Ссылка на сообщение
В 09.08.2024 - 04:54, VALKNUT сказал(а):

Правильно было бы сделать первый опрос при старте устройства и потгм каждые 10 или 20, 30сек

Уважаемый, будьте так любезны подтвердить логику моих размышлений как это реализовать.

Чтобы не строить все на задержках (delay). Думаю нужно сделать так:

1. Запуск и инициализация датчиков температуры (можно сообщение в порт бахнуть типа инициализация ОК.)

2. Запустить таймер и когда его значение будет проходить 30 секунд.

3. Проводить опрос датчиков температуры.

Не понимаю как можно реализовать первичный опрос. Но есть мысль: типа назначить переменную =0. Если она равно нулю то сделать 1 раз проверку температуры. Если нет то ничего не делать. И сброс переменной на ноль привязать на кнопку RESET или перезагрузку по питанию.

Поделиться сообщением


Ссылка на сообщение
2 минут назад, VALKNUT сказал(а):

Скиньте код, с которым сейчас работаете..

Нет кода. Я только перевел комментарии в примере. Алекса Гайвера уроки читаю и смотрю еще раз. Ниже пример тот что буду ковырять. Я там пока закоментировал строку с F температурой.

Спойлер

// Включите необходимые нам библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>

// Провод передачи данных подключен к порту D2 (GPIO4) на Arduino
#define ONE_WIRE_BUS 4
//Прецинзионность датчика температуры
#define TEMPERATURE_PRECISION 12

// Настройте экземпляр OneWire для взаимодействия с любыми устройствами OneWire (не только с температурными микросхемами Maxim/Dallas).
OneWire oneWire(ONE_WIRE_BUS);

// Передайте нашу ссылку OneWire в DallasTemperature
DallasTemperature sensors(&oneWire);

// массивы для хранения адресов устройств
DeviceAddress insideThermometer, outsideThermometer;

// Назначьте адрес вручную. Адреса, указанные ниже, необходимо будет изменить
// к действительным адресам устройств на вашей шине. Адрес устройства может быть получен
// используя любой из них oneWire.search(deviceAddress) or индивидуально через
// sensors.getAddress(deviceAddress, index)
// DeviceAddress insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
// DeviceAddress outsideThermometer   = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };

void setup(void)
{
  // старт serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // старт библиотек
  sensors.begin();

  // поиск устройства на шине
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");

  // сообщите о паразитной мощности
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");

  // Выполните поиск устройств на шине и назначьте их на основе индекса. В идеале
  // вы могли бы сделать это, чтобы сначала найти адреса на шине, а затем
  // использовать эти адреса и назначить их вручную (см. выше), как только узнаете
  // устройства на вашей шине (и при условии, что они не изменятся).
  //
  // метод 1: by index (индекс)
  if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
  if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1");

  // метод 2: поиск()
  // функция search() выполняет поиск следующего устройства. Возвращает значение 1, если был введен новый адрес.
  // Ноль может означать, что шина закорочена, устройств нет,
  // или вы уже извлекли их все. Возможно, было бы неплохо использовать
  // проверьте CRC, чтобы убедиться, что вы не получили мусор. Порядок является
  // детерминированным. Вы всегда будете получать одни и те же устройства в одном и том же порядке.
  //
  // Должен быть вызван перед search()
  //oneWire.reset_search();
  // присваивает первый найденый адрес insideThermometer
  //if (!oneWire.search(insideThermometer)) Serial.println("Не удалось найти адрес для insideThermometer");
  // присваивает второй найденый адрес outsideThermometer
  //if (!oneWire.search(outsideThermometer)) Serial.println("Не удалось найти адрес для outsideThermometer");

  // покажите адреса, которые мы нашли в bus
  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer);
  Serial.println();

  Serial.print("Device 1 Address: ");
  printAddress(outsideThermometer);
  Serial.println();

  // установите разрешение на 9 бит для каждого устройства
  sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
  sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);

  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(insideThermometer), DEC);
  Serial.println();

  Serial.print("Device 1 Resolution: ");
  Serial.print(sensors.getResolution(outsideThermometer), DEC);
  Serial.println();
}

// функция для печати адреса устройства
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    // при необходимости обнулите адрес
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

// функция печати (вывода) температуры для устройства
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  if(tempC == DEVICE_DISCONNECTED_C) 
  {
    Serial.println("Error: Could not read temperature data");
    return;
  }
  Serial.print("Temp C: ");
  Serial.print(tempC);
  //Serial.print(" Temp F: ");
  //Serial.print(DallasTemperature::toFahrenheit(tempC));
}

// фукция для вывода разрешения датчика (device's resolution)
void printResolution(DeviceAddress deviceAddress)
{
  Serial.print("Resolution: ");
  Serial.print(sensors.getResolution(deviceAddress));
  Serial.println();
}

// основная функция для печати информации об устройстве
void printData(DeviceAddress deviceAddress)
{
  Serial.print("Адрес уст-ва: ");
  printAddress(deviceAddress);
  Serial.print(" ");
  printTemperature(deviceAddress);
  Serial.println();
}

/*
   Основная функция, вызывающая значения температуры в цикле ПОСТОЯННО.
*/
void loop(void)
{
  // вызвать sensors.requestTemperatures() для определения глобальной температуры
  // запрос ко всем устройствам на шине (bus)
  Serial.print("Запрос температуры...");
  sensors.requestTemperatures();
  Serial.println("ГОТОВО");

  // print the device information
  //вывод информации устройства
  printData(insideThermometer);
  printData(outsideThermometer);
}

 

 

Я понимаю что мне надо вот эту часть перенести в другое место

Спойлер

void loop(void)
{
  // вызвать sensors.requestTemperatures() для определения глобальной температуры
  // запрос ко всем устройствам на шине (bus)
  Serial.print("Запрос температуры...");
  sensors.requestTemperatures();
  Serial.println("ГОТОВО");

  // print the device information
  //вывод информации устройства
  printData(insideThermometer);
  printData(outsideThermometer);
}

 

 

Поделиться сообщением


Ссылка на сообщение
22 минут назад, Haaans сказал(а):

Нет кода. Я только перевел комментарии в примере. Алекса Гайвера уроки читаю и смотрю еще раз. Ниже пример тот что буду ковырять.

Предлагаю такой вариант:
 

Спойлер

// Включите необходимые нам библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>

// Провод передачи данных подключен к порту D2 (GPIO4) на Arduino
#define ONE_WIRE_BUS 4
//Прецинзионность датчика температуры
#define TEMPERATURE_PRECISION 12

//=======================================================
unsigned long previousMillis = 0;
const long interval = 3000;
//=======================================================


// Настройте экземпляр OneWire для взаимодействия с любыми устройствами OneWire (не только с температурными микросхемами Maxim/Dallas).
OneWire oneWire(ONE_WIRE_BUS);

// Передайте нашу ссылку OneWire в DallasTemperature
DallasTemperature sensors(&oneWire);

// массивы для хранения адресов устройств
DeviceAddress insideThermometer, outsideThermometer;

// Назначьте адрес вручную. Адреса, указанные ниже, необходимо будет изменить
// к действительным адресам устройств на вашей шине. Адрес устройства может быть получен
// используя любой из них oneWire.search(deviceAddress) or индивидуально через
// sensors.getAddress(deviceAddress, index)
// DeviceAddress insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
// DeviceAddress outsideThermometer   = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };

void setup(void) {
  // старт serial port
  Serial.begin(115200);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // старт библиотек
  sensors.begin();

  // поиск устройства на шине
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");

  // сообщите о паразитной мощности
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");

  // Выполните поиск устройств на шине и назначьте их на основе индекса. В идеале
  // вы могли бы сделать это, чтобы сначала найти адреса на шине, а затем
  // использовать эти адреса и назначить их вручную (см. выше), как только узнаете
  // устройства на вашей шине (и при условии, что они не изменятся).
  //
  // метод 1: by index (индекс)
  if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
  if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1");

  // метод 2: поиск()
  // функция search() выполняет поиск следующего устройства. Возвращает значение 1, если был введен новый адрес.
  // Ноль может означать, что шина закорочена, устройств нет,
  // или вы уже извлекли их все. Возможно, было бы неплохо использовать
  // проверьте CRC, чтобы убедиться, что вы не получили мусор. Порядок является
  // детерминированным. Вы всегда будете получать одни и те же устройства в одном и том же порядке.
  //
  // Должен быть вызван перед search()
  //oneWire.reset_search();
  // присваивает первый найденый адрес insideThermometer
  //if (!oneWire.search(insideThermometer)) Serial.println("Не удалось найти адрес для insideThermometer");
  // присваивает второй найденый адрес outsideThermometer
  //if (!oneWire.search(outsideThermometer)) Serial.println("Не удалось найти адрес для outsideThermometer");

  // покажите адреса, которые мы нашли в bus
  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer);
  Serial.println();

  Serial.print("Device 1 Address: ");
  printAddress(outsideThermometer);
  Serial.println();

  // установите разрешение на 9 бит для каждого устройства
  sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
  sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);

  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(insideThermometer), DEC);
  Serial.println();

  Serial.print("Device 1 Resolution: ");
  Serial.print(sensors.getResolution(outsideThermometer), DEC);
  Serial.println();

  //=======================================================
  opros();
  //=======================================================
}

// функция для печати адреса устройства
void printAddress(DeviceAddress deviceAddress) {
  for (uint8_t i = 0; i < 8; i++) {
    // при необходимости обнулите адрес
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

// функция печати (вывода) температуры для устройства
void printTemperature(DeviceAddress deviceAddress) {
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == DEVICE_DISCONNECTED_C) {
    Serial.println("Error: Could not read temperature data");
    return;
  }
  Serial.print("Temp C: ");
  Serial.print(tempC);
  //Serial.print(" Temp F: ");
  //Serial.print(DallasTemperature::toFahrenheit(tempC));
}

// фукция для вывода разрешения датчика (device's resolution)
void printResolution(DeviceAddress deviceAddress) {
  Serial.print("Resolution: ");
  Serial.print(sensors.getResolution(deviceAddress));
  Serial.println();
}

// основная функция для печати информации об устройстве
void printData(DeviceAddress deviceAddress) {
  Serial.print("Адрес уст-ва: ");
  printAddress(deviceAddress);
  Serial.print(" ");
  printTemperature(deviceAddress);
  Serial.println();
}

/*
   Основная функция, вызывающая значения температуры в цикле ПОСТОЯННО.
*/
void loop(void) {
  //=======================================================
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    opros();
  }
  //=======================================================
}

void opros() {  //=======================================================
  // вызвать sensors.requestTemperatures() для определения глобальной температуры
  // запрос ко всем устройствам на шине (bus)
  Serial.print("Запрос температуры...");
  sensors.requestTemperatures();
  Serial.println("ГОТОВО");

  // print the device information
  //вывод информации устройства
  printData(insideThermometer);
  printData(outsideThermometer);
}  //=======================================================

 

const long interval = 3000; //3 секунды 5000 = 5 секунд... и.т.д.

В "void setup(void)" (это инициализация) в конце инициализации запустим самый первый опрос.. "opros();"

Создадим процедуру "opros() {}". Она в самом конце, но не имеет значения где она находится. И в нее вынесем всё, что было в бесконечном цикле "loop".

Loop будет проверять миллис и при достижении нужного значения "толкать" процедуру опроса.

Мои правки между "//======================================================="

Поделиться сообщением


Ссылка на сообщение

Вы не поверите, но я вероятно похоже думал. Я решил сначала добиться опроса датчика после нажатия на кнопку RESET. Очень простым движением. Блок из loop перекинул в конец setup, но при нажатии кнопки температуру не вижу.

Спойлер

// Включите необходимые нам библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>

// Провод передачи данных подключен к порту D2 (GPIO4) на Arduino
#define ONE_WIRE_BUS 4
//Прецинзионность датчика температуры
#define TEMPERATURE_PRECISION 12

// Настройте экземпляр OneWire для взаимодействия с любыми устройствами OneWire (не только с температурными микросхемами Maxim/Dallas).
OneWire oneWire(ONE_WIRE_BUS);

// Передайте нашу ссылку OneWire в DallasTemperature
DallasTemperature sensors(&oneWire);

// массивы для хранения адресов устройств
DeviceAddress insideThermometer, outsideThermometer;

// Назначьте адрес вручную. Адреса, указанные ниже, необходимо будет изменить
// к действительным адресам устройств на вашей шине. Адрес устройства может быть получен
// используя любой из них oneWire.search(deviceAddress) or индивидуально через
// sensors.getAddress(deviceAddress, index)
// DeviceAddress insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
// DeviceAddress outsideThermometer   = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };

void setup(void)
{
  // старт serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // старт библиотек
  sensors.begin();

  // поиск устройства на шине
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");

  // сообщите о паразитной мощности
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");

  // Выполните поиск устройств на шине и назначьте их на основе индекса. В идеале
  // вы могли бы сделать это, чтобы сначала найти адреса на шине, а затем
  // использовать эти адреса и назначить их вручную (см. выше), как только узнаете
  // устройства на вашей шине (и при условии, что они не изменятся).
  //
  // метод 1: by index (индекс)
  if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
  if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1");

  // метод 2: поиск()
  // функция search() выполняет поиск следующего устройства. Возвращает значение 1, если был введен новый адрес.
  // Ноль может означать, что шина закорочена, устройств нет,
  // или вы уже извлекли их все. Возможно, было бы неплохо использовать
  // проверьте CRC, чтобы убедиться, что вы не получили мусор. Порядок является
  // детерминированным. Вы всегда будете получать одни и те же устройства в одном и том же порядке.
  //
  // Должен быть вызван перед search()
  //oneWire.reset_search();
  // присваивает первый найденый адрес insideThermometer
  //if (!oneWire.search(insideThermometer)) Serial.println("Не удалось найти адрес для insideThermometer");
  // присваивает второй найденый адрес outsideThermometer
  //if (!oneWire.search(outsideThermometer)) Serial.println("Не удалось найти адрес для outsideThermometer");

  // покажите адреса, которые мы нашли в bus
  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer);
  Serial.println();

  Serial.print("Device 1 Address: ");
  printAddress(outsideThermometer);
  Serial.println();

  // установите разрешение на 9 бит для каждого устройства
  sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
  sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);

  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(insideThermometer), DEC);
  Serial.println();

  Serial.print("Device 1 Resolution: ");
  Serial.print(sensors.getResolution(outsideThermometer), DEC);
  Serial.println();
}

// функция для печати адреса устройства
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    // при необходимости обнулите адрес
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

// функция печати (вывода) температуры для устройства
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  if(tempC == DEVICE_DISCONNECTED_C) 
  {
    Serial.println("Error: Could not read temperature data");
    return;
  }
  Serial.print("Temp C: ");
  Serial.print(tempC);
  //Serial.print(" Temp F: ");
  //Serial.print(DallasTemperature::toFahrenheit(tempC));
}

// фукция для вывода разрешения датчика (device's resolution)
void printResolution(DeviceAddress deviceAddress)
{
  Serial.print("Resolution: ");
  Serial.print(sensors.getResolution(deviceAddress));
  Serial.println();
}

// основная функция для печати информации об устройстве
void printData(DeviceAddress deviceAddress)
{
  Serial.print("Адрес уст-ва: ");
  printAddress(deviceAddress);
  Serial.print(" ");
  printTemperature(deviceAddress);
  Serial.println();
}

/*
   Основная функция, вызывающая значения температуры в цикле ПОСТОЯННО.
*/
void printTemperature()
{
  // вызвать sensors.requestTemperatures() для определения глобальной температуры
  // запрос ко всем устройствам на шине (bus)
  Serial.print("Запрос температуры...");
  sensors.requestTemperatures();
  Serial.println("ГОТОВО");

  // print the device information
  //вывод информации устройства
  printData(insideThermometer);
  printData(outsideThermometer);
}
void loop(void){}

 

 

Поделиться сообщением


Ссылка на сообщение

7 минут назад, VALKNUT сказал(а):

пустой луп усыпит контроллер =)

Так я ж пишу, что первый эксперимент по нажатию кнопки получать температуру. Я думал "ресет" повторно начинает читать программу сверху вниз.

Поделиться сообщением


Ссылка на сообщение
5 минут назад, Haaans сказал(а):

Я думал "ресет" повторно начинает читать программу сверху вниз.

Перезапускает контроллер. А кто после запуска будет опрашивать датчики?

Ну, не суть.... получилось с моими правками?

Поделиться сообщением


Ссылка на сообщение
11 минут назад, VALKNUT сказал(а):

Перезапускает контроллер. А кто после запуска будет опрашивать датчики?

Ну, не суть.... получилось с моими правками?

Да. все получилось. Благодарю...

1 час назад, VALKNUT сказал(а):

Мои правки между "//======================================================="

Просмотрел весь скетч. Аккуратное решение.

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×