HHIMERA писал(а):А зачем вам номер датчика??? Он уже не нужен... Вся прелесть подсоединения на разные пины... что пофигу номер и можно цеплять/менять датчики на ходу...
оффтоп: давно внес этого товарища в черный список, но иной раз все-таки не удерживаюсь и просматриваю сообщения - а вдруг? всякий раз прихожу к выводу, что пора чудес прошла, ничего, кроме абсолютно бессмысленных изречений категории "прописных истин" и "риторических вопросов" этот товарищ не постит.
не_оффтоп: номер датчика - это количествнная характеристика проекта, т.е. у него не 1 датчик, а 2 или более. но чтобы это понять, надо умерить свою гордыню великого разработчика и знатока душ человеческих.
вам придется отказаться от дефайна, обозначающего порт/пин подключения датчика и использовать соответствующие переменные, где по ходу пьесы менять маску пина. например, так:
Код: Выделить всё
uint8_t pin_mask = _BV(PB0); // сначала работаем с линией 0
uint8_t get_bit(void){
return PINB & pin_mask != 1;
}
то есть все функции вывода и ввода битов, а так же импульса RESET, надо переделать по аналогии (остальное можно не трогать)
тогда будете делать так:
Код: Выделить всё
// первый датчик
pin_mask = _BV(PB0);
int temperature_1 = temp_18b20();
// второй датчик
pin_mask = _BV(PB2);
int temperature_2 = temp_18b20();
менять на ходу можно и порт, но лучше этого не делать, т.к. подменить порт можно только через указатель, а работа с указателем заметно медленнее прямой работы с портом, что может быть критичным для реализации протокола 1-wire, где каждая микросекунда на счету. лучше все датчики повесить на один порт.