Нужно вывести температуру с 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 вольт а бывает нет.