Нужно вывести температуру с DS18B20 на OLED LCD 1,3 128x64

konog
Offline
Зарегистрирован: 17.12.2015

Всем привет. Делал я себе в машину термометр на 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);//обратно инвертировали дисплей, теперь моргает.
  }
}

Подскажите как его переделать

vvadim
Offline
Зарегистрирован: 23.05.2012

вы  хотя бы ссылку на ваш дисплей дали

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А что такое OLED LCD?

BRUTUS
Offline
Зарегистрирован: 13.05.2016

andriano пишет:

А что такое OLED LCD?

...сам долго ломал мозг, потом осенило)

Мне кажется, это привет из Поднебесной - слово "LCD" попросту употребили как обобщённое название экранов любого типа. А вообще хохма)

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

konog пишет:

Всем привет. Делал я себе в машину термометр на 0,96 оледе и решил заказать себе 1,3 чтоб виднее было, но когда залил скетч то понял что разные библиотеки. Для 1,3 нужна

#include <MicroLCD.h>
LCD_SH1106 lcd;

А почему LCD_SH1106? А не LCD_SH1306?

Опять же бывают i2c или spi интерфейс. Очень много бы прояснили фото ваших дисплеев, и ссылки на место где покупали. Различий масса, и чип и интерфейс и бывает что паяют стабилизатор 5 вольт а бывает нет.