По неопытности считал что освоил дисплей LCD5110. Однако с моим любимым DS18b20 не желает работать. скетч компилируется, ошибки не выдает. но я вижу (по светодиодам), что никакого обмена по шине 1-Wire не происходит. Помогите пожалуйста разобраться : Код (C++): // пытаюсь на NANO подключить DS18b20 к LCD5110 #include <OneWire.h> #include <DallasTemperature.h> #include <LCD5110_Basic.h> LCD5110 myGLCD(3,4,5,7,6); OneWire ds(10); extern uint8_t MediumNumbers[]; void setup() { myGLCD.InitLCD(); } void loop(){ byte data[12]; byte addr[8]; if (!ds.search(addr)) { Serial.println("No more addresses."); return; } ds.reset_search(); // должен искать, не мигают Rx, Tx???? или не так считаю? if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); delay(1000); return; } //это здесь не нужно? у меня 3 конца //write(byte, 1) //Передает информационный байт на устройство, работающее в паразитном режиме питания //read()//Считывает информационный байт с устройства //crc8(dataArray, length)//Вычисляет CRC код байтов из массива dataArray, длиной length //ds.reset(); // сброс шины перед связью с датчиком ds.select(addr); //выбор устройства после сброса, передается ROM Код устройства. ds.write(0x44); //0x44 провести измерение температуры и записать данные в оперативную память delay(1000); ds.reset(); // должен искать, но ведь не мигают Rx, Tx ds.select(addr); ds.write(0xBE); // 0xBE – считать последовательно 9 байт оперативной памяти 0xB4 – вернет тип питания (0 – паразитное, 1 – внешнее) for (int i = 0; i < 9; i++) { data[i] = ds.read(); } int raw = (data[1] << 8) | data[0]; // Переводим в температуру if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6]; float temperature = raw / 16.0; myGLCD.setFont(MediumNumbers); myGLCD.printNumF(temperature, 2, CENTER, 0); delay(100); myGLCD.clrScr(); }
Тесты из загруженных библиотек выполняются нормально. Однако подключение шины на 2 пин не проходит. Только начиная с 8 и выше.
Это описка. Подключение шины соответствует скетчу. Перебирал, думал пины не работают, пробовал на других НАНО и УНО. компилируется без вопросов ... и не пишет.
Все получилось! не указал шрифт Вот работающий код Код (C++): Работает! #include <OneWire.h> //#include <DallasTemperature.h> #include <LCD5110_Basic.h> LCD5110 myGLCD(3,4,5,6,7); OneWire ds(8); extern uint8_t BigNumbers[]; // extern uint8_t SmallFont[]; // void setup() { myGLCD.InitLCD(); } void loop(){ byte data[12]; byte addr[8]; if (!ds.search(addr)) { Serial.println("No more addresses."); return; } ds.reset_search(); //поиск нового устр в сети ds.reset(); // сброс шины перед связью с датчиком ds.select(addr); ds.write(0x44); delay(10); ds.reset(); ds.select(addr); ds.write(0xBE); // 0xBE – считать последовательно 9 байт оперативной памяти for (int i = 0; i < 9; i++) { data[i] = ds.read(); } int raw = (data[1] << 8) | data[0]; //Переводим в температуру if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6]; float temperature = raw / 16.0; myGLCD.setFont(BigNumbers); myGLCD.printNumF(temperature, 2, CENTER, 0); myGLCD.clrScr(); }