Добрый день, all,
Столкнулся с задачей когда подключается от 4 до 8 датчиков на разные порты. Почему так- потому что при какой либо проблеме с датчиком, он легко заменяется без поиска адреса датчика, а портов на меге достаточно для решения задачи. Решение Эдуарда использовать прерывание как counter красиво, но вот незадача при добавлении датчиков в лоб код становится громоздким и напрашивается вынести опрос в функцию. Но вот как функции передать задачу опрашивать датчики с разных шин? Забиваются ли в массив разные объекты класса onewire?
Оптимизация кода под несколько датчиков ds18b20
-
- Сообщения: 5
- Зарегистрирован: 06 мар 2017, 23:22
Re: Оптимизация кода под несколько датчиков ds18b20
Здравствуйте!
С объектами класса можно работать через указатели.
Вы можете передавать функции указатель на объект OneWire.
Можно создать динамические объекты.
С объектами класса можно работать через указатели.
Код: Выделить всё
#include <OneWire.h>
OneWire sens1(2);
OneWire sens2(3);
OneWire sens3(4);
OneWire * psens1 = &sens1;
OneWire * psens2 = &sens2;
OneWire * psens3 = &sens3;
void setup() {
}
void loop() {
psens1->reset(); // сброс шины 1-Wire
psens1->write(0xCC, 1); // пропуск ROM
psens1->write(0x44, 1); // инициализация измерения
// ...........
}
Вы можете передавать функции указатель на объект OneWire.
Код: Выделить всё
#include <OneWire.h>
OneWire sens1(2);
OneWire sens2(3);
OneWire sens3(4);
OneWire * psens1 = &sens1;
OneWire * psens2 = &sens2;
OneWire * psens3 = &sens3;
void setup() {
}
void loop() {
sensDS(psens1);
sensDS(psens2);
sensDS(psens3);
}
void sensDS(OneWire * psens) {
psens->reset(); // сброс шины 1-Wire
psens->write(0xCC, 1); // пропуск ROM
psens->write(0x44, 1); // инициализация измерения
// ...........
}
Можно создать динамические объекты.
Код: Выделить всё
OneWire * psens1 = new OneWire(2);
OneWire * psens2 = new OneWire(3);
OneWire * psens3 = new OneWire(4);
-
- Сообщения: 5
- Зарегистрирован: 06 мар 2017, 23:22
Re: Оптимизация кода под несколько датчиков ds18b20
Спс Эдуард:) Про динамически объекты почитаю. Пробел. По ссылкам еще раз проштудирую Ваш урок. Правда рождается еще вопрос. Переменная temp. Можно ли ее привязать к объекту класса чтоб на выходе функции получать результат?
Re: Оптимизация кода под несколько датчиков ds18b20
Да конечно. Методы класса это функции и они могут возвращать значения.
-
- Сообщения: 5
- Зарегистрирован: 06 мар 2017, 23:22
Re: Оптимизация кода под несколько датчиков ds18b20
При использовании прерываний на 483 такте функция начинает забивать массив из 8 байт. При этом разбивает это действие на такты дабы не завесить остальные процессы. В моем случае заполнение 6 массивов единовременно скажется не лучшим образом на быстродействии алгоритма. Существует ли возможность привязать массив к объекту класса и заполнять его постепенно. Иными словами 483 такт заполняем первый байт массива каждого из датчиков. 484 такт 2 байт массива каждого датчика. Динамические объекты здесь безсмысленны на мой взгляд, так как алгоритм постоянно ориентируется на хранимые показания датчиков для принятия решения по relayshield.
Re: Оптимизация кода под несколько датчиков ds18b20
А почему вы не хотите распределить операции работы с датчиками по интервалам.У вас есть цикл из 50 отрезков по 20 мс с общим временем 1 секунда. В первом интервале запускаете измерение первого датчика, во втором интервале - второго датчика, и так все датчики. Ждете время, необходимое для завершения измерения и считываете данные датчиков. Например, в 42 интервале - первый датчик, в 43 - второй и т.д. А в интервале можете вызывать функцию, которой передавать указатель на объект-датчик. Неважно на статический объект или динамический.
-
- Сообщения: 5
- Зарегистрирован: 06 мар 2017, 23:22
Re: Оптимизация кода под несколько датчиков ds18b20
Да как вариант думал размазать задачу по коду. Но когда новичек ищешь варианты красивее. Опыта то не хватает. По Вашему ответу понимаю, что невозможно обратиться вроде sensds::tempbuff[8].
-
- Сообщения: 5
- Зарегистрирован: 06 мар 2017, 23:22
Re: Оптимизация кода под несколько датчиков ds18b20
Задача была сделать универсальную функцию для обработки датчиков. Внутри функции все раскладывалось по интервалам. Хотел и массив внутри функции разложить по интервалам.
Вернуться в «Датчики температуры»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей