Чтение Номера Пина Из Конфига
- Войдите на сайт для отправки комментариев
Доброго времени суток, уважаемые!
Вопрос в следующем - возможно ли из конфига прочесть номера пинов, заполнить их каким то образом в массив и уже после этого стартовать даллас и вывод температуры на экран?
Судя по моим попыткам, это не совсем возможно, может кто то знает как можно сделать?
У меня есть файл в нем построчно записаны номера пинов на датчики
4
5
Я делаю следующее - до инициализации железки объявляю сам объект, в этом и проблема, когда объявляешь, то пины уже записываются из пустого, еще пока, массива, а дальше когда я переписываю массив и стартую даллас, то ничего не меняется...
Вот код
byte dallasSensors[2] = {0}; //Пины температурных датчиков OneWire oneWireOne(dallasSensors[0]); //1 датчик температуры OneWire oneWireTwo(dallasSensors[1]); //2 датчик температуры DallasTemperature sensorsOne(&oneWireOne); DallasTemperature sensorsTwo(&oneWireTwo); //инициализация void setup(void) { Serial.begin(9600); dallasSensors[0] = 4; //НАПРИМЕР ТУТ Я ПРОЧИТАЛ ЭТИ ДАННЫЕ С КАРТЫ ПАМЯТИ И ЗАПИСАЛ В МАССИВ dallasSensors[1] = 5;//НАПРИМЕР ТУТ Я ПРОЧИТАЛ ЭТИ ДАННЫЕ С КАРТЫ ПАМЯТИ И ЗАПИСАЛ В МАССИВ //Стартуем даллас sensorsOne.begin(); sensorsTwo.begin(); } //главный цикл void loop(void) { sensorsOne.requestTemperatures(); sensorsTwo.requestTemperatures(); if (sensorsOne.getTempCByIndex(0) == DEVICE_DISCONNECTED_C) //если датчик отключен Serial.println("sensor disable"); else Serial.println(sensorsOne.getTempCByIndex(0)); if (sensorsTwo.getTempCByIndex(0) == DEVICE_DISCONNECTED_C) //если датчик отключен Serial.println("sensor disable"); else Serial.println(sensorsTwo.getTempCByIndex(0)); delay(3000); }
Соответственно ничего не выводится на экран кроме sensor disable, потому как в объекте уже я так понял объявлены пустые пины и если мы их и читаем из карты и переписываем массив пинов ничего не изменится. Какие идеи?
так задай заранее значения
Мне заранее не надо, у меня все лежит в конфиге, поэтому я читаю номера пинов из файла, чтобы в случае чего можно было только поправить номера пинов и не лезти в исходники, перекинув датчик на другой пин
спасибо, все получилось вот так...только одна проблема - вывод завис на одном значении температуры - считалось первое значение и все, висит на нем..
С указателями работаете нормально. Висит не из-за них. Тут мне трудно говорить, во-первых скетч неполный, во-вторых я не знаю этой библиотеки. Например, как часто можно читать значения? Вы в строках 45-47 читаете дважды подряд безо всякой паузы. Я бы считал один раз в переменную, а уж её бы анализировал в if и печатал бы. (тоже про строки 48-50). Но, повтоярю, я не знаю этой библиотек и мне трудно говорить.
Попробуйте поставить отладочную печать после строки 57 и в функции ReadTemperature одну печать в начале, а вторую в конце. Тогда Вы по крайней мере локализуете место в котором она у Вас залипла. Станет понятнее куда рыть дальше.
С указателями работаете нормально. Висит не из-за них. Тут мне трудно говорить, во-первых скетч неполный, во-вторых я не знаю этой библиотеки. Например, как часто можно читать значения? Вы в строках 45-47 читаете дважды подряд безо всякой паузы. Я бы считал один раз в переменную, а уж её бы анализировал в if и печатал бы. (тоже про строки 48-50). Но, повтоярю, я не знаю этой библиотек и мне трудно говорить.
Попробуйте поставить отладочную печать после строки 57 и в функции ReadTemperature одну печать в начале, а вторую в конце. Тогда Вы по крайней мере локализуете место в котором она у Вас залипла. Станет понятнее куда рыть дальше.
Благодарю!
Понял, попробую как вы написали
С переменными вряд ли залипает без задержки, потому как это возможно когда на одной шине висит 2 датчика, то необходимо delay прописать, у меня же датчики на разных пинах и созданы 2 разных объекта под них. Хотя можно и с переменными попробовать, посмотрим.
Нет-нет, Вы меня не поняли. Меня смутило не то, что Вы часто читаете с разных пинов, а то, что дважды подряд читаете с одного и того же пина (строки 48 и 50, например). Понимаете?
KorPaEv, это очень убогая библа для DS. Она для начинающих. Ни с чем другим её лучше не сочетать, -возможны глюки. На форуме сто раз обсуждали как работать просто через Oneware и таймер.
Нет-нет, Вы меня не поняли. Меня смутило не то, что Вы часто читаете с разных пинов, а то, что дважды подряд читаете с одного и того же пина (строки 48 и 50, например). Понимаете?
Понимаю, лучше попробовать в переменную было записать, но это не помогло.
Ошибку нашел. Как и написано ниже:
KorPaEv, это очень убогая библа для DS. Она для начинающих. Ни с чем другим её лучше не сочетать, -возможны глюки. На форуме сто раз обсуждали как работать просто через Oneware и таймер.
Функция запроса к датчику не отрабатывается по таймеру.
В общем таймер не работает с этой библиотекой.
А таймер мне все же нужен. Поэтому, видимо, придется через OneWire читать.