Нужна помощь OLED часы-погодная станция.

Anton95
Offline
Зарегистрирован: 04.03.2018

Здравствуйте, столкнулся с проблемой, собрал OLED часы на arduino nano с показанием температуры и влажности. Но возникла проблема с отображением отрицательной температуры (датчик температуры 18b20, датчик влажности DHT 11) искал на просторах интернета толком не нашел ничего. Если изменить шрифт с MegaNumbers на BigNumbers то отображает отрицательную температуру, но не сильно красиво получаеться. Библиотека для Oled I2C UKR_RUS. Если кто то знает в какую сторону копать, буду очень благодарен!

#include <dht11.h>
dht11 sensor;
#define DHT11PIN A2
 
#include <OLED_I2C.h>
//SDA pin   -> Arduino A4 или иной назначенный SDA pin
//SCL pin   -> Arduino A5 или иной назначенный SCL pin
OLED  myOLED(A4, A5, 8); //пины OLED: SDA на A4, SCK на A5 Arduino
 
extern uint8_t MegaNumbers[];//Установка шрифтов Больших
extern uint8_t RusFont[];// Установка русских шрифтов
extern uint8_t SmallFont[];// Установка малых шрифтов
extern uint8_t term[];//картинка термометра
extern uint8_t grad[];//картинка градуса
extern uint8_t water[];//картинка флажности
extern uint8_t percentage[];//картинка процента
 
#include <OneWire.h>//подключение библиотеки однопроводного интерфейса
OneWire ds(A3); // пин сенсора датчика температуры (средняя ножка) DS18b20 к пину A1 Arduino. Не  забываем этот пин сенсора подтянуть к 3,3V сопротивлением!
#include <DS1307.h>//подключение библиотеки часового модуля
DS1307 rtc(A0, A1);//часовой модуль подключен к пинам Arduino: Vcc к +5V, GND к 3емле, SDA к A3, SCL к A2
Time t; // присвоение переменной для времени
int x = 0;
int y = 0; //добавка
 
void setup() {
myOLED.begin();
rtc.halt(false);
//rtc.setDOW(SUNDAY);  // Настройка для недели  настроить при первом
//rtc.setTime(14, 57, 0); // Настройка часов
//rtc.setDate(04, 03, 2018); // Настройка даты
}
 
void loop() {
sensor.read(A2); // Пин сенсора на Ардуино подключать только на цифровые выходы
if (x >= 10) {  // 10 количество секунд, для переключения на температуру
temp();
delay(4000); //добавка
water_proc(); // добавка
delay(8000); //добавка
x=0;
}
else
{
watch();
}
x++;
}
void watch() {
myOLED.setFont(RusFont);
t = rtc.getTime();
switch (t.dow)
{
case 1:     myOLED.print("GJYTLTKMYBR", CENTER, 0);    break;
case 2:     myOLED.print("DNJHYBR", CENTER, 0);        break;
case 3:     myOLED.print("CHTLF", CENTER, 0);          break;
case 4:     myOLED.print("XTNDTHU", CENTER, 0);        break;
case 5:     myOLED.print("GZNYBWF", CENTER, 0);        break;
case 6:     myOLED.print("CE<<JNF", CENTER, 0);        break;
case 7:     myOLED.print("DJCRHTCTYMT", CENTER, 0);    break;
}
String stringOne = rtc.getTimeStr();
myOLED.setFont(MegaNumbers);
myOLED.print(stringOne.substring(0, 2), 4, 15);
myOLED.print("/", 51, 12);
myOLED.print(stringOne.substring(3, 5), 75, 15);
myOLED.setFont(RusFont);
switch (t.mon)
{
case 1:
myOLED.print(String(t.date), 30, 57);
myOLED.print("ZYDFHZ", CENTER, 57);
myOLED.print(String(t.year), 88, 57);
break;
case 2:
myOLED.print(String(t.date), 26, 57);
myOLED.print("ATDHFKZ", CENTER, 57);
myOLED.print(String(t.year), 92, 57);
break;
case 3:
myOLED.print(String(t.date), 30, 57);
myOLED.print("VFHNF", CENTER, 57);
myOLED.print(String(t.year), 88, 57);
break;
case 4:
myOLED.print(String(t.date), 30, 57);
myOLED.print("FGHTKZ", CENTER, 57);
myOLED.print(String(t.year), 88, 57);
break;
case 5:
myOLED.print(String(t.date), 36, 57);
myOLED.print("VFZ", CENTER, 57);
myOLED.print(String(t.year), 82, 57);
break;
case 6:
myOLED.print(String(t.date), 35, 57);
myOLED.print("B>YZ", CENTER, 57);
myOLED.print(String(t.year), 81, 57);
break;
case 7:
myOLED.print(String(t.date), 35, 57);
myOLED.print("B>KZ", CENTER, 57);
myOLED.print(String(t.year), 81, 57);
break;
case 8:
myOLED.print(String(t.date), 28, 57);
myOLED.print("FDUECNF", CENTER, 57);
myOLED.print(String(t.year), 90, 57);
break;
case 9:
myOLED.print(String(t.date), 24, 57);
myOLED.print("CTYNZ<HZ", CENTER, 57);
myOLED.print(String(t.year), 94, 57);
break;
case 10:
myOLED.print(String(t.date), 26, 57);
myOLED.print("JRNZ<HZ", CENTER, 57);
myOLED.print(String(t.year), 92, 57);
break;
case 11:
myOLED.print(String(t.date), 28, 57);
myOLED.print("YJZ<HZ", CENTER, 57);
myOLED.print(String(t.year), 90, 57);
break;
case 12:
myOLED.print(String(t.date), 26, 57);
myOLED.print("LTRF<HZ", CENTER, 57);
myOLED.print(String(t.year), 92, 57);
break;
}
myOLED.update();
delay(450);
myOLED.setFont(MegaNumbers);
myOLED.print("-", 51, 15);
myOLED.update();
delay(450);
}
 
void temp() {  
for(int x = 0; x < 10; x++){
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;
String stringOne = rtc.getTimeStr();
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(stringOne.substring(0, 5), 98, 0);
myOLED.print(rtc.getDateStr(), 0, 0);
myOLED.setFont(RusFont);
myOLED.print("NTVGTHFNEHF", CENTER, 57); //Температура
myOLED.drawBitmap(4, 18, term, 19, 40);
myOLED.setFont(MegaNumbers);
myOLED.print(String(Temp), CENTER, 15);
myOLED.drawBitmap(92, 18, grad, 13, 12); 
myOLED.update();
myOLED.clrScr();
 
 // Serial.println(sensor.temperature,1);
  }
}
void water_proc() {  
  for(int y = 0; y < 20; y++)
  {
  String stringOne = rtc.getTimeStr();
  
  myOLED.clrScr();
  myOLED.setFont(SmallFont);
  myOLED.print(stringOne.substring(0, 5), 98, 0);
  myOLED.print(rtc.getDateStr(), 0, 0);
  myOLED.setFont(RusFont);
  myOLED.print("DKF:YJCNM", CENTER, 57); // Влажность
  myOLED.drawBitmap(4, 18, water, 20, 40);
  myOLED.setFont(MegaNumbers);
  myOLED.print(String(sensor.humidity), CENTER, 15);
  myOLED.drawBitmap(90, 18, percentage, 35, 35);
  myOLED.update();
  myOLED.clrScr();
 
//  Serial.println(sensor.humidity,1);
 
  }
}
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Радикальное решение проблемы - поставить рядом нагреватель, чтобы температура не опускалась ниже нуля.

Код, естественно, не смотрел.

И никто не будет смотреть неправильно вставленный код.

Судя по словесному описанию, в фонте отсутствует символ "-". Либо дополняйте, либо пользуйтесь библиотекой, где он есть.

ven-til
Offline
Зарегистрирован: 13.02.2018

В комментариях к коду бардак.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вставьте код правильно (иначе его только мазохисты читать будут) и дайте фото - что показывается вместо - с большим шрифтом.

Anton95
Offline
Зарегистрирован: 04.03.2018
#include <dht11.h>
dht11 sensor;
#define DHT11PIN A2
 
#include <OLED_I2C.h>
//SDA pin   -> Arduino A4 или иной назначенный SDA pin
//SCL pin   -> Arduino A5 или иной назначенный SCL pin
OLED  myOLED(A4, A5, 8); //пины OLED: SDA на A4, SCK на A5 Arduino
 
extern uint8_t MegaNumbers[];//Установка шрифтов Больших
extern uint8_t RusFont[];// Установка русских шрифтов
extern uint8_t SmallFont[];// Установка малых шрифтов
extern uint8_t term[];//картинка термометра
extern uint8_t grad[];//картинка градуса
extern uint8_t water[];//картинка флажности
extern uint8_t percentage[];//картинка процента
 
#include <OneWire.h>//подключение библиотеки однопроводного интерфейса
OneWire ds(A3); // пин сенсора датчика температуры (средняя ножка) DS18b20 к пину A1 Arduino. Не  забываем этот пин сенсора подтянуть к 3,3V сопротивлением!
#include <DS1307.h>//подключение библиотеки часового модуля
DS1307 rtc(A0, A1);//часовой модуль подключен к пинам Arduino: Vcc к +5V, GND к 3емле, SDA к A3, SCL к A2
Time t; // присвоение переменной для времени
int x = 0;
int y = 0; //добавка
 
void setup() {
myOLED.begin();
rtc.halt(false);
//rtc.setDOW(SUNDAY);  // Настройка для недели  настроить при первом
//rtc.setTime(14, 57, 0); // Настройка часов
//rtc.setDate(04, 03, 2018); // Настройка даты
}
 
void loop() {
sensor.read(A2); // Пин сенсора на Ардуино подключать только на цифровые выходы
if (x >= 10) {  // 10 количество секунд, для переключения на температуру
temp();
delay(4000); //добавка
water_proc(); // добавка
delay(8000); //добавка
x=0;
}
else
{
watch();
}
x++;
}
void watch() {
myOLED.setFont(RusFont);
t = rtc.getTime();
switch (t.dow)
{
case 1:     myOLED.print("GJYTLTKMYBR", CENTER, 0);    break;
case 2:     myOLED.print("DNJHYBR", CENTER, 0);        break;
case 3:     myOLED.print("CHTLF", CENTER, 0);          break;
case 4:     myOLED.print("XTNDTHU", CENTER, 0);        break;
case 5:     myOLED.print("GZNYBWF", CENTER, 0);        break;
case 6:     myOLED.print("CE<<JNF", CENTER, 0);        break;
case 7:     myOLED.print("DJCRHTCTYMT", CENTER, 0);    break;
}
String stringOne = rtc.getTimeStr();
myOLED.setFont(MegaNumbers);
myOLED.print(stringOne.substring(0, 2), 4, 15);
myOLED.print("/", 51, 12);
myOLED.print(stringOne.substring(3, 5), 75, 15);
myOLED.setFont(RusFont);
switch (t.mon)
{
case 1:
myOLED.print(String(t.date), 30, 57);
myOLED.print("ZYDFHZ", CENTER, 57);
myOLED.print(String(t.year), 88, 57);
break;
case 2:
myOLED.print(String(t.date), 26, 57);
myOLED.print("ATDHFKZ", CENTER, 57);
myOLED.print(String(t.year), 92, 57);
break;
case 3:
myOLED.print(String(t.date), 30, 57);
myOLED.print("VFHNF", CENTER, 57);
myOLED.print(String(t.year), 88, 57);
break;
case 4:
myOLED.print(String(t.date), 30, 57);
myOLED.print("FGHTKZ", CENTER, 57);
myOLED.print(String(t.year), 88, 57);
break;
case 5:
myOLED.print(String(t.date), 36, 57);
myOLED.print("VFZ", CENTER, 57);
myOLED.print(String(t.year), 82, 57);
break;
case 6:
myOLED.print(String(t.date), 35, 57);
myOLED.print("B>YZ", CENTER, 57);
myOLED.print(String(t.year), 81, 57);
break;
case 7:
myOLED.print(String(t.date), 35, 57);
myOLED.print("B>KZ", CENTER, 57);
myOLED.print(String(t.year), 81, 57);
break;
case 8:
myOLED.print(String(t.date), 28, 57);
myOLED.print("FDUECNF", CENTER, 57);
myOLED.print(String(t.year), 90, 57);
break;
case 9:
myOLED.print(String(t.date), 24, 57);
myOLED.print("CTYNZ<HZ", CENTER, 57);
myOLED.print(String(t.year), 94, 57);
break;
case 10:
myOLED.print(String(t.date), 26, 57);
myOLED.print("JRNZ<HZ", CENTER, 57);
myOLED.print(String(t.year), 92, 57);
break;
case 11:
myOLED.print(String(t.date), 28, 57);
myOLED.print("YJZ<HZ", CENTER, 57);
myOLED.print(String(t.year), 90, 57);
break;
case 12:
myOLED.print(String(t.date), 26, 57);
myOLED.print("LTRF<HZ", CENTER, 57);
myOLED.print(String(t.year), 92, 57);
break;
}
myOLED.update();
delay(450);
myOLED.setFont(MegaNumbers);
myOLED.print("-", 51, 15);
myOLED.update();
delay(450);
}
 
void temp() {  
for(int x = 0; x < 10; x++){
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;
String stringOne = rtc.getTimeStr();
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(stringOne.substring(0, 5), 98, 0);
myOLED.print(rtc.getDateStr(), 0, 0);
myOLED.setFont(RusFont);
myOLED.print("NTVGTHFNEHF", CENTER, 57); //Температура
myOLED.drawBitmap(4, 18, term, 19, 40);
myOLED.setFont(MegaNumbers);
myOLED.print(String(Temp), CENTER, 15);
myOLED.drawBitmap(92, 18, grad, 13, 12); 
myOLED.update();
myOLED.clrScr();
 
 // Serial.println(sensor.temperature,1);
  }
}
void water_proc() {  
  for(int y = 0; y < 20; y++)
  {
  String stringOne = rtc.getTimeStr();
  
  myOLED.clrScr();
  myOLED.setFont(SmallFont);
  myOLED.print(stringOne.substring(0, 5), 98, 0);
  myOLED.print(rtc.getDateStr(), 0, 0);
  myOLED.setFont(RusFont);
  myOLED.print("DKF:YJCNM", CENTER, 57); // Влажность
  myOLED.drawBitmap(4, 18, water, 20, 40);
  myOLED.setFont(MegaNumbers);
  myOLED.print(String(sensor.humidity), CENTER, 15);
  myOLED.drawBitmap(90, 18, percentage, 35, 35);
  myOLED.update();
  myOLED.clrScr();
 
//  Serial.println(sensor.humidity,1);
 
  }

С большим шрифтом ничего не показывает при минусовой температуре, только цифры сьезжают вправо, как буд то пробел стоит там

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Фото выложить в лом?

Значит нет там в шрифте минуса, а на его месте пробел. Полезьте и добавьте минус.

Anton95
Offline
Зарегистрирован: 04.03.2018

Так показывает минусовую температуру.

А так плюсовую.

Изменить нужно в файле DefaultFonts.c я вас правильно понял, не сильно еще разбираюсь. Открываю этот файл через блокнот и там где fontdatatype fontdatatyp MegaNumbers[] PROGMEM =

{

0x18,0x28,0x2D,0x0D,

есть строка где ничего не стоит, я ставлю -, по новой заливаю скетч не меняеться ничего, наверно не там меняю?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Похоже, у Вас левая библиотека (и почему новички никогда не дают ссылок - всё вытягивать клещами надо!)

Возьмите вот эту (там есть ссылка "Download ZIP") , в ней вроде уже есть.

Anton95
Offline
Зарегистрирован: 04.03.2018

Увы не помогло, в ней нет шрифта MegaNumbers цифры получаются мелкие. А можно самому добавить знак минус? 

 

b707
Offline
Зарегистрирован: 26.05.2017

Anton95 пишет:

есть строка где ничего не стоит, я ставлю -, по новой заливаю скетч не меняеться ничего, наверно не там меняю?

меняете в правильном месте, только надо не "минус" добавлять в конце строки - а всю строку из шестнадцитиричных символов пересчитывать так, чтобы на экране рисовался символ минуса Сделать это можно вручную, если разобраться с системой кодирования символов

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Anton95 пишет:

Увы не помогло, в ней нет шрифта MegaNumbers цифры получаются мелкие. А можно самому добавить знак минус? 

Можно, конечно, только ... Вы моего намёка не поняли?

ЕвгенийП пишет:

(и почему новички никогда не дают ссылок - всё вытягивать клещами надо!)

Вот как мне прикажете угадывать что, как и куда добавить? 

Anton95
Offline
Зарегистрирован: 04.03.2018

Я вас понял))
http://data-ru.ru/forum/download/file.php?id=9
Скачивал библиотеку от сюда, в ней русские, украинские шрифты, думал она битая искал в интернете такие же, то же самое стоит пробел.

b707
Offline
Зарегистрирован: 26.05.2017

Anton95 пишет:
Я вас понял)) http://data-ru.ru/forum/download/file.php?id=9 Скачивал библиотеку от сюда, в ней русские, украинские шрифты, думал она битая искал в интернете такие же, то же самое стоит пробел.

От библиотеки это не зависит, просто в этом шоифте нет символа минуса. Либо рисуйте сами, либо просите кого-то, чтоб нарисовал.

Anton95
Offline
Зарегистрирован: 04.03.2018

Вы не знаете где можно посмотреть как это сделать?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

От библиотеки это не зависит

Ну, как, он же спросил в какое место его всунуть и как рислвать - а это как раз зависит от библиотеки. Вот, приду домой, посмотрю что там за библиотека, и, если разберусь чего там куда пихать, отпишусь.

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Ну, как, он же спросил в какое место его всунуть и как рислвать - а это как раз зависит от библиотеки. Вот, приду домой, посмотрю что там за библиотека, и, если разберусь чего там куда пихать, отпишусь.

Мы может говорим об одном и том же, но, ИМХО, это зависит не от библиотеки, а а формата фонта. Этот фонт входит в состав нескольких библиотек.

DenSyo
Offline
Зарегистрирован: 13.01.2017

Anton95 пишет:
Вы не знаете где можно посмотреть как это сделать?

http://arduino.ru/forum/proekty/binfontstool-redaktor-shriftov-adafruitg...

 

Anton95
Offline
Зарегистрирован: 04.03.2018

Пробовал менять, в строчке где пробел стоит в место нулей ставил буквы из примера который скинули, ничего на экране сразу абра кадабра получаеться)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Погодите, завтра я доберусь до ней. Сегодня не получилось.

DenSyo
Offline
Зарегистрирован: 13.01.2017

Anton95

я вам ссылку дал на редактор в котором ваш вопрос решается за две минуты. откройте в нем ваш файл со шрифтами установив чтение "fontdatatype" как OLED_I2C. дорисуйте необходимые символы или загрузите их из другого шрифта и сохраните полученный шрифт как OLED_I2C. можно сохранить в исходный файл с заменой шрифта. поэкспериментируйте. нужен только эксель. 

PS будет здорово если вы попробуете посоздавать шрифты для OLED_I2C разной высоты - больше 8 и не кратно 8. сам эту библиотеку не использовал, есть сомнения относительно шрифтов с такими размерами.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Антон, я разобрался в этом шрифте.

Он там сделан нестандартно (не как все), т.к. он огромный и его нестандартность позволяет сэкономить место в памяти.

Чтобы мне не расписывать все варианты, а их великое множество, ответьте на вопросы:

1. В Вашем шрифте сейчас есть 10 цифр, пробел, точка и двоеточие (двоеточие печатается если попытаться печатать символ '/'). Вам все эти символы нужны? Или можно минус вместо какого-то из них вставить?

2. Заинтересованы ли Вы в корректной работе функций printNumI и printNumF (сейчас они не печатают отрицательные числа, но это можно починить) или они Вам не нужны?

3. Согласны ли Вы, что шрифт увеличится в размере на 120 байтов (именно столько надо, чтобы добавить новый символ, сохранив имеющиеся).

DenSyo
Offline
Зарегистрирован: 13.01.2017

вот, нарисовал тире) замените этим строку массива первого символа и все заработает. сомневаюсь в целесообразности символа пробела в таком шрифте, он не для печати фраз. 

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x07,0x07,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,	// symbol -
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не, пробел нужен хотя бы, чтобы старую цифру стереть.

DenSyo
Offline
Зарегистрирован: 13.01.2017

ну как самый простой вариант. цена ток дорогая в данном случае) тут есть функция clrRect, можно ей закрашивать прямоугольник.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, пусть ТС думает что ему нужно, а что - нет. Я бы лучше от двоеточия избавился, чем от пробела (а если пмять пожиала бы, то и от того, и от другого :)

Anton95
Offline
Зарегистрирован: 04.03.2018

1. Да, цифры используются все, двоеточие тоже в показаниях времени, пробел тоже нужен без него совсем все плохо получаеться сливается все. А вот точка не используется нигде. 

2. Не совсем понял, хочеться, что бы при минусовой температуре с датчика на экран выводилась минусовая температура с знаком (-) щас выходит просто сдвинуто, может именно из за них (printNumI и printNumF) невозможный показ отрицательных чисел?

3. Сейчас скетч использует 41% памяти ардуинки, думаю влезит с изменениями, если я конечно правильно понял вас)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Anton95 пишет:

2. Не совсем понял, хочеться, что бы при минусовой температуре с датчика на экран выводилась минусовая температура с знаком (-) щас выходит просто сдвинуто, может именно из за них (printNumI и printNumF) невозможный показ отрицательных чисел?

Ну, отрицательные числа не выводятся потому, что нет минуса.

А вопрос был простой - Вы пользуете printNumI и printNumF или нет?

Anton95
Offline
Зарегистрирован: 04.03.2018

Вроде нигде не используется.

http://arduino-project.net/oled-chasy-na-arduino/ сам проект был взят от сюда, только добавлено еще показания влажности. А да точки используються в маленьком шрифте (при показании числа, мясяца и года), это играет роль?

DenSyo
Offline
Зарегистрирован: 13.01.2017

Anton95 пишет:
2. Не совсем понял, хочеться, что бы при минусовой температуре с датчика на экран выводилась минусовая температура с знаком (-) щас выходит просто сдвинуто, может именно из за них (printNumI и printNumF) невозможный показ отрицательных чисел?

сдвинуты потому-что вместо знака минус выводится пробел - в массиве шрифта MegaNumbers на месте знака минус стоят одни нули, это и есть пробел. замените строчку со всеми нулями на строчку которую я вам дал, в шрифте появится знак минус. даже с маленькими рюшечками, в стиле шрифта. замените строчку массива знака точка на строчку со всеми нулями и у вас будет пробел на месте символа точки которую вы не используете. т.е. когда надо напечатать пробел, будете печатать точку. 

вот вам версия этого же шрифта с высотой символов 35 точек, отрезал незначащие. он съэкономит память, но у меня нет уверенности, что он правильно отобразится библиотекой. проверьте пожалуйста

// OLED_I2C font MegaNumbers35 size: 24x35
fontdatatype MegaNumbers35[] PROGMEM = {
0x18,0x23,0x2D,0x0D,	// size 24x35, first 45, count 13
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1C,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3F,0x3F,
0x3F,0x3F,0x3C,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,	// symbol -
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x70,0xF8,0xFC,0xFE,0xFE,0xFC,0xF8,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,	// symbol .
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x1F,0x1F,0x0F,0x07,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0xC0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x03,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xE0,0xF0,0xF8,0xFC,0xFC,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,	// symbol /
0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0x1F,0x3C,0x7E,0xFE,0xFF,0xFF,0x7F,0x7F,0x3F,
0x1F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x1F,0x7F,0xFF,0xFF,0xE0,0x00,
0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFF,0xFF,0xFF,0xFF,0x7F,0x07,0x00,0x00,
0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xFF,0xFF,0xFE,0xE0,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFC,0xFE,0xFF,
0xFF,0xFF,0x7F,0x3F,0x3F,0x1F,0x0F,0x3E,0xFC,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,	// digit 0
0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x0F,0x1F,0x3F,0x7F,0x7F,0x3F,0x1F,0x07,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x0F,0x0E,0x0C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,	// digit 1
0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFE,0x7E,0x7C,0x3E,0x1F,
0x0F,0x0F,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xE0,
0xC0,0x80,0x00,0x00,0x00,0x01,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0xFE,0xFC,0xFC,0xF8,
0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x3F,0x7F,0xFF,0xFF,
0xDF,0xBF,0xBF,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x1F,0x1E,0x08,0x00,0x00,
0x03,0x69,0x20,0x00,0x00,0x00,0x00,0x00,0x00,	// digit 2
0x00,0x00,0x00,0x06,0x0F,0x1F,0x3F,0x3F,0x7F,0xFE,0xFC,0xFC,0x78,0x78,0x3F,0x3F,
0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC3,0x83,
0x03,0x07,0x07,0x0F,0x1F,0x7F,0xFF,0xFF,0xFF,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x03,0x07,0x07,0x83,0x81,0x80,0x80,0x80,0x80,0xC0,0xE0,0xFC,0xFF,
0xFF,0xFF,0x7F,0x3F,0x1F,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,
0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x1F,0xFE,0xFE,0xFC,0xF8,0xF8,0xE0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x92,	// digit 3
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x3E,0xFF,0xFF,0xFF,0x7F,
0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x1F,0x3E,0xF8,
0xE0,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFE,0xFE,0xFE,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0xFF,0xFF,0xFF,0xFF,
0xFF,0x3E,0x3E,0x3E,0x3E,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x04,0x1E,0xFE,0xFF,0xFF,0xFF,0xFF,0x1F,0x0E,0x1C,0x1C,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,	// digit 4
0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xF0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x03,
0x07,0x0F,0x1F,0x1F,0x3F,0x7F,0x3F,0x3F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x20,0xE1,0xE1,0xC1,0x80,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x30,0x78,0xFC,0xFC,0xFE,0xFF,
0x7F,0x7F,0x3F,0x1F,0x1F,0x0F,0x0F,0x3E,0xFC,0xFC,0xF0,0xE0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,	// digit 5
0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0x1F,0x3C,0x7C,0xFE,0xFE,0xFF,0x7F,0x7F,
0x3F,0x1F,0x1F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0xFF,0xFF,0xFF,0xF0,
0x81,0x03,0x03,0x07,0x0F,0x0F,0x9F,0x9F,0xDF,0x8F,0x07,0x03,0x00,0x00,0x00,0x00,
0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xC1,0xC0,0x80,0x00,0x80,0xC0,0xE0,0xF0,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFC,0xFE,0xFF,
0xFF,0xFF,0x7F,0x3F,0x1F,0x1F,0x0E,0x3E,0xFC,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,	// digit 6
0x00,0x00,0x00,0x03,0x1F,0x7F,0xFE,0xFE,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,
0xFF,0xFF,0xFE,0xFC,0xF0,0xE0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,
0x00,0x01,0x03,0x0F,0x1F,0x7F,0xFF,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x7F,0xFF,0xFF,0xFF,0xFE,0xE0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x24,0x00,0x00,0x00,0x00,0x00,0x00,	// digit 7
0x00,0x00,0x00,0x01,0x07,0x0F,0x3F,0x7C,0xFC,0xFC,0xFC,0xFC,0xFC,0xFE,0xFE,0xFF,
0x7F,0x3F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFF,0xFF,0xFF,0x3F,0x1F,
0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0xFF,0xFF,0xF7,0xE3,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0x9F,0xFF,0xFF,0xF0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xF0,0xF0,
0xF8,0xFE,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0xFF,0xFF,0x7F,
0x3F,0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0x3E,0x3C,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x93,	// digit 8
0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3C,0x7C,0x7C,0xFE,0xFF,0xFF,0x7F,0x3F,0x3F,
0x1F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x1E,0xFF,0xFF,0xFF,0xFF,0x0F,0x03,
0x01,0x00,0x00,0x00,0x80,0xC1,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,
0x00,0x00,0xC0,0xF0,0xF8,0xFC,0xFD,0xFE,0xFC,0xF8,0x78,0x70,0xE0,0xE0,0xC1,0x9F,
0xFF,0xFF,0xFF,0xFC,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x7C,0xFE,0xFE,0xFF,
0x7F,0x7F,0x3F,0x1F,0x1F,0x3E,0xFC,0xF8,0xF0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12	// digit 9
};

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, собственно, Вам всё уже подсказали.

Anton95
Offline
Зарегистрирован: 04.03.2018

Заменил в фрнте, вместо знака точки поставил минус тот что дали, потому что если менять вместо пробела на минус на экране появляються черточки, прийду домой проверю на показания минусовой температуры в морозилке)) а так с такими изменениями никаких черточек пока нет

 

ven-til
Offline
Зарегистрирован: 13.02.2018

А можно вычитанием воспользоваться.

ven-til
Offline
Зарегистрирован: 13.02.2018

А можно вычитанием воспользоваться.

Anton95
Offline
Зарегистрирован: 04.03.2018

Заменил все как вы написали, теперь такая беда вышла вместе с мигащим двоиточьем появился знак минус, за то отрицательная температура теперь со знаком минус))) Горе с этими часами)

Anton95
Offline
Зарегистрирован: 04.03.2018

ven-til пишет:
А можно вычитанием воспользоваться.

Можно по подробнее? вот если вставить этот код в скетч, то показывает знак и плюс и минус, но опять же пробел мешает и при двузначном значении отрицательной температуры цифры сливаються со знаком градуса

if (Temp > 0) {

 myOLED.print("+", 30, 30);

} else {

 myOLED.print("-", 30, 30);

}

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Anton95 пишет:

Заменил все как вы написали, теперь такая беда вышла вместе с мигащим двоиточьем появился знак минус, за то отрицательная температура теперь со знаком минус))) Горе с этими часами)

Так не выводите туда пробел, а просто отступите сменой координат

Anton95
Offline
Зарегистрирован: 04.03.2018

}
String stringOne = rtc.getTimeStr();
myOLED.setFont(MegaNumbers);
myOLED.print(stringOne.substring(0, 2), 4, 15);
myOLED.print("/", 51, 12);
myOLED.print(stringOne.substring(3, 5), 75, 15);
myOLED.setFont(RusFont);
switch (t.mon)
{

Здесь нужно поиграться с числами? Извините просто не силен в этом)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Здесь я не вижу в каком месте Вы туда пробел пихаете, видимо в другом.

Как Вы делаете мигание двоеточия? Наверняка там Вы выводите пробел (печатаете символ "минус". Найдите это место и замените печать минуса на стирание области (clr)

Anton95
Offline
Зарегистрирован: 04.03.2018

Поставл там где стоял знак "-" clr появилась вот такая штука мигающая) оставлял постыми лапки, такая ж фигня) Взял поставил в обеих :, только изменил координаты, теперь двоиточья мигают в верх, вниз)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ничего не понял из Вашего объяснения, что мигает, в какой верх и какой низ - ничего непонятно. Если clr дала такой эффект, значит Вы её неправильно вставили. Код-то у Вас секретный, Бог Вас значет, что Вы там творите.

Короче, простой вопрос, программировать совсем не умеете? Так?

Тогда, забудьте про все наши советы по экономии места и добавляйте дполонительный символ в оригиналтьный шрифт. 

DenSyo
Offline
Зарегистрирован: 13.01.2017

Если исходить из приведенного вами полного кода с учетом того, что мы изменили в шрифте использовавшийся ранее как пробел символ минус на знак минус и символ точка заменили на пробел, то в строке 134 надо заменить печать символа "-" на символ "."

Anton95
Offline
Зарегистрирован: 04.03.2018

Все, спасибо большое теперь понял.