А зачем? Там результат температура, с точностью до 0,06 градуса, зачем целые числа?
Да и делые делить и умножать нужно аккуратно тут, а то переполнение то еще чего, сразу не въезжаешь, от чего рузльтат не понятный :))))))))))))))))
Операциями с float я не злоупотребляю, посему зачем лишний реверанс?
Операциями с 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.
И мне этого хватает выше крыши, и быстродействия тоже.
Так что это вопрос больше вкуса.
О какой точности ты тогда говоришь? У него погрешность 0.5 гра. В целых мерь, всё равно точнее не будет
Точность измерения в абсолютных единицах и разрешающая способность, разные вещи и не надо их путать. И 0.06 это реально. Правда попадаются хрегоаые экземпляры, те плавают в пределах 0.15...0.2 гр.
Мне лично больше важно на сколько изменилась температура, а не ее абсолютное значение.
Библиотека предназначена для работы с кодировкой переменной длины, поэтому печать отдельного символа в ней не предусмотрена (в Си нет для этого подходящего типа данных). Единственный способ вывести символ - преобразовать его в строку (которая может иметь длину 2 или 3 байта). В Вашем коде как бы предполагается однобайтовая кодировка, в этом случае заведите массив из двух символов, в первый читайте байт с карточки, а во второй запишите 0 (именно число 0, а не символ "0"), и передайте адрес массива в функцию печати.
Для начала сделайте это.
Судя по Вашему сообщению, Вам нужен вывод не только латиницы, но и кириллицы. Для вывода символа кириллицы нужен массив символов длиной 3, в последнем - 0, а в двух первых - код символа кириллицы (он двухбайтовый).
PS. На самом деле самый прямой метод - вытащить наружу приватную функцию printChar() и пользоваться ею, но для этого нужно хорошо понимать, что и как работает. Собственно, именно поэтому я ее и спрятал. Так что рекомендую делать именно в указанной последовательности.
предлагаете выводить строку а остальные символы в строке (до 21-го) забивать пробелами?
я вам такого не предлагал. Вы справшивали, как вылечить ситуацию, когда на экране после вывода "100" при выводе "99" остается лидирующая единица. Ответ - выводить " 99" с пробелом вначале.
А откуда вы взяли строчку из 21 пробела - это не ко мне
"Напомню: создание библиотеки преследовало две цели:
1. Добиться, чтобы без всекого шаманства что мы видим на экране в Arduino IDE, то же было на дисплее.
2. Уменьшить расход оперативной памяти при использовании библиотеки.
Вторая цель достигнута за счет отказа от экранного буфера в оперативной памяти. И, соответственно, вынужденного отказа от пиксельной графики: библиотека может выводить только текст или битмап... "
shpektr, пиксельная графика на монохромных дисплеях требует возможности чтения с экрана. Если физически такой возможности нет (как на применяемом дисплее), то чтение можно производить не с экрана, а из экранного буфера. Т.е. для пискельной графики экранный буфер обязателен. Другое дело, что не обязательно буфер должен быть размером с экран, если пиксельная графика занимает лишь часть площади экрана.
В случае данной библиотеки можно создать небольшой экранный буфер на нужную часть экрана и выводить его функцией вывода битмапа.
Не тот ты String в ея пхаешь
Здравтсвуйте!
Хотелось бы выводить....
Так у стринга есть же дырка, через которую char* виден?
Так у стринга есть же дырка, через которую char* виден?
это костыль :)
Это я уже понял :)))))))))))))))
А по подробнее?
Я не сильно силен в этих изысках.
Спасибо.
Посмотрите здесь https://forum.flprog.ru/viewtopic.php?p=64316#p64316, я там стринг делал.
И поддержку ESP8266 сделал.
Сама конструкция:
01
char
textStr[60];
02
03
void
setup
()
04
{
05
}
06
07
void
loop
()
08
{
09
text = String(
"Текст строкой"
);
10
text.toCharArray(textStr, text.length()+1);
11
LD.printString_18x16(textStr, 0, 0);
12
13
}
И поддержку ESP8266 сделал.
можно узнать, в чем она заключалась? Вроде в этой библиотеке нет ничего. что бы мешало ей работать на ЕСП сразу "из коробки"
Сама конструкция:
01
char
textStr[60];
02
03
void
setup
()
04
{
05
}
06
07
void
loop
()
08
{
09
text = String(
"Текст строкой"
);
10
text.toCharArray(textStr, text.length()+1);
11
LD.printString_18x16(textStr, 0, 0);
12
13
}
а что помешало срзу сделать так:
01
void
setup
()
02
{
03
}
04
05
void
loop
()
06
{
07
char
textStr[] =
"Текст строкой"
;
08
LD.printString_18x16(textStr, 0, 0);
09
10
}
или хотя бы вот так, если уж очень хочется String
01
void
setup
()
02
{
03
}
04
05
void
loop
()
06
{
07
String text =
"Текст строкой"
;
08
LD.printString_18x16(text.toCharArray(), 0, 0);
09
10
}
Или LD.printString_18x16(text.c_str, 0, 0); ?
Или LD.printString_18x16(text.c_str, 0, 0); ?
Не катит гипотенуза так
Или LD.printString_18x16(text.c_str, 0, 0); ?
Не катит гипотенуза так
вот так катит
вот так катит
так вы сразу свое значение в charBufVar пишите - и никакие пляски со стринг не понадобятся
Или LD.printString_18x16(text.c_str, 0, 0); ?
Не катит гипотенуза так
От так катит LD.printString_18x16(text.c_str(), 0, 0);
вот так катит
так вы сразу свое значение в charBufVar пишите - и никакие пляски со стринг не понадобятся
Да там float преобразуем в стринг или вместо float строку пихаем типа "--.--"
В общем потом просто лень там что топроверять.
В общем это вопрос вкуса.
Или LD.printString_18x16(text.c_str, 0, 0); ?
Не катит гипотенуза так
От так катит LD.printString_18x16(text.c_str(), 0, 0);
Яволь! :)))))
Да там float преобразуем в стринг или вместо float строку пихаем типа "--.--"
да пишите уж сразу "я не умею" - это будет честнее :)
Флоат и в char* можно преобразовать запросто, а еще более вероятно. что и сам флоат вам вовсе не нужен.
Открой для себя dtostrf(...);
Да там float преобразуем в стринг или вместо float строку пихаем типа "--.--"
да пишите уж сразу "я не умею" - это будет честнее :)
Флоат и в char* можно преобразовать запросто, а еще более вероятно. что и сам флоат вам вовсе не нужен.
нужен float, там температура считается с датчиков Temp1=(float)((int)bufData_1[0] | (((int)bufData_1[1]) << 8))*0.0625+0.03125
Да, я не умею преобразовать float в массив char и мне не стыдно. :)
Да, я не знаю многих СИшных плюшек.
Знал бы, вопрос тут не задавал бы.
:)
#170
нужен 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
нужен 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 я не злоупотребляю, посему зачем лишний реверанс?
Операциями с float я не злоупотребляю, посему зачем лишний реверанс?
даже однократное упоминание флоат в коде резко увеличивает его размер. От того, что потом вы им "не злоупотребляете" - уже ничего не меняется.
А что касается функции - датчик работает с температурой в целых числах и это неспроста. Подумайте об этом.
Операциями с float я не злоупотребляю, посему зачем лишний реверанс?
даже однократное упоминание флоат в коде резко увеличивает его размер. От того, что потом вы им "не злоупотребляете" - уже ничего не меняется.
А что касается функции - датчик работает с температурой в целых числах и это неспроста. Подумайте об этом.
Работает то в целых, а физическая величина, получаемая с них, не в целых, а в дробных.
У меня в проекте 5 float переменных. я понимаю что на 8-битах на float кататься не совсем кошерно.
Sketch uses 18 708 bytes (60%) of program storage space. Maximum is 30 720 bytes.
Так что это вопрос больше вкуса.
И поддержку ESP8266 сделал.
можно узнать, в чем она заключалась? Вроде в этой библиотеке нет ничего. что бы мешало ей работать на ЕСП сразу "из коробки"
да ничего не мешает. так, ifdef'ы поправить
http://arduino.ru/forum/proekty/asoled-kompaktnaya-biblioteka-dlya-oled-...
http://arduino.ru/forum/proekty/asoled-kompaktnaya-biblioteka-dlya-oled-...
Там результат температура, с точностью до 0,06 градуса, зачем целые числа?
Это с каким даччиком?
Там результат температура, с точностью до 0,06 градуса, зачем целые числа?
Это с каким даччиком?
по описанию очень на ds18b20 похоже
Там результат температура, с точностью до 0,06 градуса, зачем целые числа?
Это с каким даччиком?
по описанию очень на ds18b20 похоже
Он и есть. 18 b20
О какой точности ты тогда говоришь? У него погрешность 0.5 гра. В целых мерь, всё равно точнее не будет
О какой точности ты тогда говоришь? У него погрешность 0.5 гра. В целых мерь, всё равно точнее не будет
Точность измерения в абсолютных единицах и разрешающая способность, разные вещи и не надо их путать. И 0.06 это реально. Правда попадаются хрегоаые экземпляры, те плавают в пределах 0.15...0.2 гр.
Мне лично больше важно на сколько изменилась температура, а не ее абсолютное значение.
Сама конструкция:
01
char
textStr[60];
02
03
void
setup
()
04
{
05
}
06
07
void
loop
()
08
{
09
text = String(
"Текст строкой"
);
10
text.toCharArray(textStr, text.length()+1);
11
LD.printString_18x16(textStr, 0, 0);
12
13
}
а что помешало срзу сделать так:
01
void
setup
()
02
{
03
}
04
05
void
loop
()
06
{
07
char
textStr[] =
"Текст строкой"
;
08
LD.printString_18x16(textStr, 0, 0);
09
10
}
text у меня меняется и соответственно в дисплее изображение.
.
и что это меняет?
В любом случае промежуточные переменные лишние
Добрый день, подскажите команду как отключать дисплей
Тут не команда, тут или мозг или молоток нужен. Что есть?
В библиотеке SSD1306AsciiAvrI2c есть команда oled.ssd1306WriteCmd(SSD1306_DISPLAYOFF), отключающая дисплей.
Есть что то подобное в Asoled?
ПЫ сы Сам я абсолютный новичок в ардуино - пожалуйста давайте без сарказма обойдемся. Я обязательно дойду до тонкостей всех - но не сразу.
В библиотеке нашел setPowerOff() и setPowerOn(). Поменял функции с PRIVATE на PUBLIC.
всем привет. помогите пожалуйста мучаюсь уже 3 день ничего не получается :(
скачал данную библиотеку. при команде LD.printString_6x8("текст"); отображается все хорошо и правильно.
Но у меня есть char с данными которые получаю с SD КАРТОЧКИ. Пытаюсь их вывести на экран. Такой командой:
LD.printString_6x8(theChar); Но получаю ошибку компиляции.
кусок кода:
1
char
theChar;
2
3
File dataFile = SD.open(
"test.txt"
);
4
5
theChar = dataFile.read();
6
7
LD.printString_6x8(theChar);
// ЭТА СТРОЧКА НЕ ХОЧЕТ КОМПИЛИРОВАТЬСЯ
сам я новичек в ардуино
или помогите в библиотеку SSD1306Ascii подключить шрифт с поддержкой английским и русским.
theChar - это не "текст".
theChar - это не "текст".
а можно как нибудь вывести эти данные этой библиотекой?
Библиотека предназначена для работы с кодировкой переменной длины, поэтому печать отдельного символа в ней не предусмотрена (в Си нет для этого подходящего типа данных). Единственный способ вывести символ - преобразовать его в строку (которая может иметь длину 2 или 3 байта). В Вашем коде как бы предполагается однобайтовая кодировка, в этом случае заведите массив из двух символов, в первый читайте байт с карточки, а во второй запишите 0 (именно число 0, а не символ "0"), и передайте адрес массива в функцию печати.
Для начала сделайте это.
Судя по Вашему сообщению, Вам нужен вывод не только латиницы, но и кириллицы. Для вывода символа кириллицы нужен массив символов длиной 3, в последнем - 0, а в двух первых - код символа кириллицы (он двухбайтовый).
PS. На самом деле самый прямой метод - вытащить наружу приватную функцию printChar() и пользоваться ею, но для этого нужно хорошо понимать, что и как работает. Собственно, именно поэтому я ее и спрятал. Так что рекомендую делать именно в указанной последовательности.
спасибо. разобрался )
к сожалению библиотеку хочу поставить немного другую. Легче работать с ней получается. сам еще новичок и не все еще понятно. но пытаюсь разбираться.
создам новую тему и есть 1 вопрос по русским шрифтам но в другой библиотеке .
спасибо за советы
Отличная библиотека!
А как организовать такое:
1
void
loop
()
2
{
3
long
randNumber = random(30000);
4
//LD.clearDisplay();
5
LD.printNumber(randNumber, 0, 0);
6
delay(500);
7
}
не очищайте весь дисплей. просто выводите пробел в старшем разряде
1
const
char
str1[] PROGMEM =
"Start ."
;
предлагаете выводить строку а остальные символы в строке (до 21-го) забивать пробелами?
1
const
char
str1[] PROGMEM =
"Start ."
;
предлагаете выводить строку а остальные символы в строке (до 21-го) забивать пробелами?
я вам такого не предлагал. Вы справшивали, как вылечить ситуацию, когда на экране после вывода "100" при выводе "99" остается лидирующая единица. Ответ - выводить " 99" с пробелом вначале.
А откуда вы взяли строчку из 21 пробела - это не ко мне
Доброго дня! Подскажите, пожалуйста, можно ли с помощью библиотеки вывести один пиксель с координатами (x,y)?
Если нет, то возможно есть варианты как это сделать минуя библиотеку?
Смысл в том, что мне нужно выводить на экран только текст и график по координатам.
ты первое сапщение читал?
"Напомню: создание библиотеки преследовало две цели:
1. Добиться, чтобы без всекого шаманства что мы видим на экране в Arduino IDE, то же было на дисплее.
2. Уменьшить расход оперативной памяти при использовании библиотеки.
Вторая цель достигнута за счет отказа от экранного буфера в оперативной памяти. И, соответственно, вынужденного отказа от пиксельной графики: библиотека может выводить только текст или битмап... "
shpektr, пиксельная графика на монохромных дисплеях требует возможности чтения с экрана. Если физически такой возможности нет (как на применяемом дисплее), то чтение можно производить не с экрана, а из экранного буфера. Т.е. для пискельной графики экранный буфер обязателен. Другое дело, что не обязательно буфер должен быть размером с экран, если пиксельная графика занимает лишь часть площади экрана.
В случае данной библиотеки можно создать небольшой экранный буфер на нужную часть экрана и выводить его функцией вывода битмапа.