ASOLED - компактная библиотека для OLED дисплея 128х64 с кириллицей UTF-8

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Не тот ты String в ея пхаешь

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

kholonkin пишет:

Здравтсвуйте!

Хотелось бы выводить....

если хочется выводить так - надо библиотеку переписывать. А пока она не работает с классом String, только с char*
sadman41
Offline
Зарегистрирован: 19.10.2016

Так у стринга есть же дырка, через которую char* виден?

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

sadman41 пишет:

Так у стринга есть же дырка, через которую char* виден?

это костыль :)

kholonkin
Offline
Зарегистрирован: 14.10.2013

Это я уже понял :)))))))))))))))

kholonkin
Offline
Зарегистрирован: 14.10.2013

А по подробнее?
Я не сильно силен в этих изысках.

 

Спасибо.

aidar_i
Offline
Зарегистрирован: 07.10.2018

Посмотрите здесь  https://forum.flprog.ru/viewtopic.php?p=64316#p64316, я там стринг делал. 

И поддержку ESP8266 сделал.

aidar_i
Offline
Зарегистрирован: 07.10.2018

Сама конструкция:

char textStr[60];

void setup()
{
}

void loop()
{
text = String("Текст строкой");
text.toCharArray(textStr, text.length()+1);
 		LD.printString_18x16(textStr, 0, 0);
		
}

 

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

aidar_i пишет:

И поддержку ESP8266 сделал.

можно узнать, в чем она заключалась? Вроде в этой библиотеке нет ничего. что бы мешало ей работать на ЕСП сразу "из коробки"

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

aidar_i пишет:

Сама конструкция:

char textStr[60];

void setup()
{
}

void loop()
{
text = String("Текст строкой");
text.toCharArray(textStr, text.length()+1);
 		LD.printString_18x16(textStr, 0, 0);
		
}

 

а что помешало срзу сделать так:

void setup()
{
}

void loop()
{
char textStr[] = "Текст строкой";
LD.printString_18x16(textStr, 0, 0);
		
}

 

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

или хотя бы вот так, если уж очень хочется String



void setup()
{
}

void loop()
{
String text = "Текст строкой";
LD.printString_18x16(text.toCharArray(), 0, 0);
		
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Или LD.printString_18x16(text.c_str, 0, 0); ?

kholonkin
Offline
Зарегистрирован: 14.10.2013

sadman41 пишет:

Или LD.printString_18x16(text.c_str, 0, 0); ?

Не катит гипотенуза так

kholonkin
Offline
Зарегистрирован: 14.10.2013

kholonkin пишет:

sadman41 пишет:

Или LD.printString_18x16(text.c_str, 0, 0); ?

Не катит гипотенуза так

 

вот так катит

char charBufVar[6];
tCube.toCharArray(charBufVar,tCube.length()+1);
LD.printString(charBufVar,RightFloat12(Temp1),0);
b707
Offline
Зарегистрирован: 26.05.2017

kholonkin пишет:

вот так катит

char charBufVar[6];
tCube.toCharArray(charBufVar,tCube.length()+1);
LD.printString(charBufVar,RightFloat12(Temp1),0);

так вы сразу свое значение в charBufVar пишите - и никакие пляски со стринг не понадобятся

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

kholonkin пишет:

sadman41 пишет:

Или LD.printString_18x16(text.c_str, 0, 0); ?

Не катит гипотенуза так

От так катит LD.printString_18x16(text.c_str(), 0, 0);

kholonkin
Offline
Зарегистрирован: 14.10.2013

b707 пишет:

kholonkin пишет:

вот так катит

char charBufVar[6];
tCube.toCharArray(charBufVar,tCube.length()+1);
LD.printString(charBufVar,RightFloat12(Temp1),0);

так вы сразу свое значение в charBufVar пишите - и никакие пляски со стринг не понадобятся

 

Да там float преобразуем в стринг или вместо float строку пихаем типа "--.--"
В общем потом просто лень там что топроверять. 
В общем это вопрос вкуса.

kholonkin
Offline
Зарегистрирован: 14.10.2013

DetSimen пишет:

kholonkin пишет:

sadman41 пишет:

Или LD.printString_18x16(text.c_str, 0, 0); ?

Не катит гипотенуза так

От так катит LD.printString_18x16(text.c_str(), 0, 0);

Яволь! :))))) 

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

kholonkin пишет:

Да там float преобразуем в стринг или вместо float строку пихаем типа "--.--"

да пишите уж сразу "я не умею" - это будет честнее :)

Флоат и в char* можно преобразовать запросто, а еще более вероятно. что и сам флоат вам вовсе не нужен.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Открой для себя dtostrf(...);

kholonkin
Offline
Зарегистрирован: 14.10.2013

b707 пишет:

kholonkin пишет:

Да там float преобразуем в стринг или вместо float строку пихаем типа "--.--"

да пишите уж сразу "я не умею" - это будет честнее :)

Флоат и в char* можно преобразовать запросто, а еще более вероятно. что и сам флоат вам вовсе не нужен.

нужен float, там температура считается с датчиков Temp1=(float)((int)bufData_1[0] | (((int)bufData_1[1]) << 8))*0.0625+0.03125
 

Да, я не умею преобразовать float в массив char и мне не стыдно. :)
Да, я не знаю многих СИшных плюшек.
Знал бы, вопрос тут не задавал бы.
:)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

#170

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

kholonkin пишет:

нужен float, там температура считается с датчиков Temp1=(float)((int)bufData_1[0] | (((int)bufData_1[1]) << 8))*0.0625+0.03125

вообще-то эту функцию можно записать в целых числах

((int)bufData_1[0] | (((int)bufData_1[1]) << 8))/16

 

kholonkin
Offline
Зарегистрирован: 14.10.2013

b707 пишет:

kholonkin пишет:

нужен float, там температура считается с датчиков Temp1=(float)((int)bufData_1[0] | (((int)bufData_1[1]) << 8))*0.0625+0.03125

вообще-то эту функцию можно записать в целых числах

((int)bufData_1[0] | (((int)bufData_1[1]) << 8))/16

 

А зачем? Там результат температура, с точностью до 0,06 градуса, зачем целые числа?
Да и делые делить и умножать нужно аккуратно тут,  а то переполнение то еще чего, сразу не въезжаешь, от чего рузльтат не понятный :))))))))))))))))
Операциями с float я не злоупотребляю, посему зачем лишний реверанс?

 

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

kholonkin пишет:

Операциями с float я не злоупотребляю, посему зачем лишний реверанс?

даже однократное упоминание флоат в коде резко увеличивает его размер. От того, что потом вы им "не злоупотребляете" - уже ничего не меняется.

А что касается функции - датчик работает с температурой в целых числах и это неспроста. Подумайте об этом.

kholonkin
Offline
Зарегистрирован: 14.10.2013

b707 пишет:

kholonkin пишет:

Операциями с float я не злоупотребляю, посему зачем лишний реверанс?

даже однократное упоминание флоат в коде резко увеличивает его размер. От того, что потом вы им "не злоупотребляете" - уже ничего не меняется.

А что касается функции - датчик работает с температурой в целых числах и это неспроста. Подумайте об этом.


Работает то в целых, а физическая величина, получаемая с них, не в целых, а в дробных.
У меня в проекте 5 float переменных. я понимаю что на 8-битах на float  кататься не совсем кошерно.

Но!
Sketch uses 18 708 bytes (60%) of program storage space. Maximum is 30 720 bytes.
Global variables use 901 bytes (43%) of dynamic memory, leaving 1 147 bytes for local variables. Maximum is 2 048 bytes.
И мне этого хватает выше крыши, и быстродействия тоже. 
Так что это вопрос больше вкуса. 
Tomat7
Offline
Зарегистрирован: 09.11.2018

b707 пишет:

aidar_i пишет:

И поддержку ESP8266 сделал.

можно узнать, в чем она заключалась? Вроде в этой библиотеке нет ничего. что бы мешало ей работать на ЕСП сразу "из коробки"

да ничего не мешает. так, ifdef'ы поправить

http://arduino.ru/forum/proekty/asoled-kompaktnaya-biblioteka-dlya-oled-...

http://arduino.ru/forum/proekty/asoled-kompaktnaya-biblioteka-dlya-oled-...

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

kholonkin пишет:

 Там результат температура, с точностью до 0,06 градуса, зачем целые числа?

Это с каким даччиком?

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

DetSimen пишет:

kholonkin пишет:

 Там результат температура, с точностью до 0,06 градуса, зачем целые числа?

Это с каким даччиком?

по описанию очень на ds18b20 похоже

kholonkin
Offline
Зарегистрирован: 14.10.2013

b707 пишет:

DetSimen пишет:

kholonkin пишет:

 Там результат температура, с точностью до 0,06 градуса, зачем целые числа?

Это с каким даччиком?

по описанию очень на ds18b20 похоже


Он и есть. 18 b20

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

О какой точности ты тогда говоришь?  У него погрешность 0.5 гра.  В целых мерь, всё равно точнее не будет

kholonkin
Offline
Зарегистрирован: 14.10.2013

DetSimen пишет:

О какой точности ты тогда говоришь?  У него погрешность 0.5 гра.  В целых мерь, всё равно точнее не будет


Точность измерения в абсолютных единицах и разрешающая способность, разные вещи и не надо их путать. И 0.06 это реально. Правда попадаются хрегоаые экземпляры, те плавают в пределах 0.15...0.2 гр.
Мне лично больше важно на сколько изменилась температура, а не ее абсолютное значение.

aidar_i
Offline
Зарегистрирован: 07.10.2018

b707 пишет:

aidar_i пишет:

Сама конструкция:

char textStr[60];

void setup()
{
}

void loop()
{
text = String("Текст строкой");
text.toCharArray(textStr, text.length()+1);
 		LD.printString_18x16(textStr, 0, 0);
		
}

 

а что помешало срзу сделать так:

void setup()
{
}

void loop()
{
char textStr[] = "Текст строкой";
LD.printString_18x16(textStr, 0, 0);
		
}

 


text у меня меняется и соответственно в дисплее изображение.

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

.

Цитата:
text у меня меняется и соответственно в дисплее изображение.

и что это меняет?

В любом случае промежуточные переменные лишние