Нужно вывести температуру с DS18B20 на OLED LCD 1,3 128x64
- Войдите на сайт для отправки комментариев
Вс, 30/10/2016 - 19:38
Всем привет. Делал я себе в машину термометр на 0,96 оледе и решил заказать себе 1,3 чтоб виднее было, но когда залил скетч то понял что разные библиотеки. Для 1,3 нужна
#include <MicroLCD.h>
LCD_SH1106 lcd;
И уже весь мозг вынес как переделать под эту библиотеку описания ее почти нету
#include <OneWire.h> #include <Wire.h> #include <OLED_I2C.h> OLED myOLED(SDA, SCL, 8); extern uint8_t MegaNumbers[]; extern uint8_t SmallFont[]; extern uint8_t BigNumbers[]; extern uint8_t MediumNumbers[]; extern uint8_t water[]; extern uint8_t subarulogo[]; //инициализируем библиотеку дисплея, включаем все наши шрифты и картинки OneWire ds(4);// инифициализация протокола обмена с сенсорами, указываем 4ый пин подключения //или любой другой пин, к которому мы его прицепим. Контакт выбираем согласно модели ардуино. int w = 103;//Температура предупреждения int x = 0; int y = 0; //инициализация переменных для того, чтоб нам потом варнинг поставить void setup()// в сетапе выполняемый 1 раз код, задержка 4сек до выполнения следующих команд { myOLED.begin(); myOLED.clrScr(); /* myOLED.drawBitmap(20, 4, subarulogo, 88, 59);//субару картинко =) myOLED.update(); delay(4000);//сама задержка на 4 сек. Когда есть задержка в функции, то останавливается исполнение всего кода. Аккуратнее с этим. */ } void loop() //непосредственное "тело" кода нашего датчика { byte data[2]; ds.reset(); ds.write(0xCC); ds.write(0x44); delay(500); ds.reset(); ds.write(0xCC); ds.write(0xBE); data[0] = ds.read(); data[1] = ds.read(); int Temp = (data[1] << 8) + data[0]; Temp = Temp >> 4;//команлы ds. — обращение к сенсору, считыванием температуру с сенсора x = Temp; //присваиваем Х значение нашей температуры в каждом такте программы int MaxTemp = y; //вводим переменную максимальной температуры и даем ей значение Y if (x > y) { y = x; }//сравнили наши цифры, если Х в какой то момент стал больше чем Y, то присваиваем большее значение Y-ку. myOLED.clrScr();//очистили экран myOLED.setFont(SmallFont);//выбрали шрифт myOLED.print(String(w), 1, 1);//строчка температуры WARNING myOLED.print("WATER", 6, 48);//написали строчку WATER и показали координаты текста 6 по горизонтали и 48 по вертикали, все в пикселях myOLED.print("TEMP", 6, 56);//написали строчку ТЕМП и показали координаты текста 6 по горизонтали и 51 по вертикали, все в пикселях myOLED.drawBitmap(5, 8, water, 26, 36); //нарисовали нашу картинку по заданным координатам начала 5,8 и указали её размер 26,36 if (Temp <= w) //пошло сравнение температуры { myOLED.invert (true); myOLED.setFont(MegaNumbers); myOLED.print(String(Temp), 60, 10); myOLED.setFont(SmallFont); myOLED.print(String(MaxTemp), 90, 55); myOLED.print("PEAK ", 60, 55); myOLED.update(); } else { //а вот если нифига не 30, то вот этот код myOLED.invert (true);//инвертировали дисплей myOLED.setFont(SmallFont); myOLED.print("WARNING!!!", 50, 8);//строчка варнинг! myOLED.setFont(MegaNumbers);//выбрали шрифт пожирнее, не 24, а 32 пикселя myOLED.print(String(Temp), 50, 20);//строчка нашей температуры myOLED.update();//команда, которая рисует все, что находится в "теле" кода. Написать принт — недостаточно, надо экран обновить. myOLED.invert (false);//обратно инвертировали дисплей, теперь моргает. } }
Подскажите как его переделать
вы хотя бы ссылку на ваш дисплей дали
А что такое OLED LCD?
А что такое OLED LCD?
...сам долго ломал мозг, потом осенило)
Мне кажется, это привет из Поднебесной - слово "LCD" попросту употребили как обобщённое название экранов любого типа. А вообще хохма)
Всем привет. Делал я себе в машину термометр на 0,96 оледе и решил заказать себе 1,3 чтоб виднее было, но когда залил скетч то понял что разные библиотеки. Для 1,3 нужна
#include <MicroLCD.h>
LCD_SH1106 lcd;
А почему LCD_SH1106? А не LCD_SH1306?
Опять же бывают i2c или spi интерфейс. Очень много бы прояснили фото ваших дисплеев, и ссылки на место где покупали. Различий масса, и чип и интерфейс и бывает что паяют стабилизатор 5 вольт а бывает нет.