Прошу помощи, запутался в простом вопросе. Делаю синтезатор частоты на ардуине, генераторе AD9850, с дисплеем SPI 1,8 дюйма. Только начал, пытаюсь выводить вычисленные значения частоты, напряжения на экран, пробовал библиотеку TFT.h. Запускаю файл TFTDisplayText, изменив пины под свой проект. Все ОК, текст выводится. Пытаюсь вывести несколько переменных и констант на экран. Непонятно, зачем и по каким правилам требуется преобразовать значение числовой переменной в строковый вид. Описание библиотеки не нашел. Поделитесь знаниями!!! Спасибо!!!
- Где ваш код (код ваших “потуг” вывода информации на дисплей)?
- Какая конкретно библиотека использовалась? Ссылку на её скачивание предоставьте
А как вы иначе собрались выводить числа? Когда вы печатаете на экране число 123 - для экрана это всегда не число, а строка “123”, состоящая из трех символов ‘1’ + ‘2’ + ‘3’
И если в каком-то случае вам не приходится самому конвертировать числа в строки - то это только потому, что добрые дяди, авторы библиотеки для экрана, сделали это за вас.
слишком общее название.
Дайте ссылку на библиотеку.
При отсутствии описания всегда можно заглянуть в текст самой библиотеки, чтобы выяснить, какие в ней есть методы, чтобы затем попытаться догадаться либо по названию, либо по типу входного параметра - что каждый конкретный метод делает.
Ну так то да, но я (например) делаю чтобы можно было передавать в функцию вывода на экран и просто числа разных типов. Они сами внутри функции в строки преобразуются…
ну ты, наверно, не сам это делаешь, а просто подсаживаешься на класс Print
Это не всегда удобно
Не, я ж не в ардуино иде это делаю… И на Си (а не Си++).
Мужики, если предложение после ответов типа как в №2 прекращать писать что-либо в тему и не тратить время (а, главное, не создавать у ТС иллюзии, что на такие ответы можно плевать). Самим же проще будет.
Библиотека TFT.h, та, что встроена в Ардуино 1.8.13. Пример называется TFTDisplayTest. Проблема в том, можно ли выводить значение переменной без преобразование в строковую форму. Или, какая библиотека позволяет это сделать… некоторые библиотеки позволяют это сделать, но мне они не подходят.(другие контроллеры дисплеев)
Примеры-ВЫБЫТ-TFT-Arduino-TFTDisplayTest… Не знаю, что такое ВЫБЫТ, но в Вашем скриншоте есть…
а что такого трудного в преобразовании ?
Трудного тут нет, просто я не понимаю, как и для чего. И вот, кусочек ранее написанного мной скетча для генератора ЗЧ на AD9833 и OLED дисплее, никакого преобразования числа в строку тут нет…
//============================== Блок функций =========================
void show (int stc,long freq,float v){ // вывод даных на экран
// индикация шага
oled.setScale(2);
oled.setCursorXY(2, textPos1);
oled.print(“Step=”); oled.print(stc);oled.print("Hz ");
//индикация частоты
// oled.setScale(2);
oled.setCursorXY(2, textPos2);
oled.print(“F=”);oled.print(freq);oled.print("Hz ");
// индикация выхода
//oled.setScale(2);
oled.setCursorXY(2, textPos3);
oled.print(“U=”);oled.print(v);oled.print("V ");
// обновление экрана
oled.sendBuffer();
oled.update();
Прошу прощения, что не смог отправить код по правилам форума…
Нет, прощения не будет. Тут даже попытки не видно
Я одного не понимаю. Вот открыл я пример, указанный ТС.
/*
Arduino TFT text example
This example demonstrates how to draw text on the
TFT with an Arduino. The Arduino reads the value
of an analog sensor attached to pin A0, and writes
the value to the LCD screen, updating every
quarter second.
This example code is in the public domain
Created 15 April 2013 by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/TFTDisplayText
*/
#include <TFT.h> // Arduino LCD library
#include <SPI.h>
// pin definition for the Uno
#define cs 10
#define dc 9
#define rst 8
// pin definition for the Leonardo
// #define cs 7
// #define dc 0
// #define rst 1
// create an instance of the library
TFT TFTscreen = TFT(cs, dc, rst);
// char array to print to the screen
char sensorPrintout[4];
void setup() {
// Put this line at the beginning of every sketch that uses the GLCD:
TFTscreen.begin();
// clear the screen with a black background
TFTscreen.background(0, 0, 0);
// write the static text to the screen
// set the font color to white
TFTscreen.stroke(255, 255, 255);
// set the font size
TFTscreen.setTextSize(2);
// write the text to the top left corner of the screen
TFTscreen.text("Sensor Value :\n ", 0, 0);
// ste the font size very large for the loop
TFTscreen.setTextSize(5);
}
void loop() {
// Read the value of the sensor on A0
String sensorVal = String(analogRead(A0));
// convert the reading to a char array
sensorVal.toCharArray(sensorPrintout, 4);
// set the font color
TFTscreen.stroke(255, 255, 255);
// print the sensor value
TFTscreen.text(sensorPrintout, 0, 20);
// wait for a moment
delay(250);
// erase the text you just wrote
TFTscreen.stroke(0, 0, 0);
TFTscreen.text(sensorPrintout, 0, 20);
}
Ну и что мешает делать так же?
Или свою функцию написать:
const char* intPrep (int32_t var, uint8_t chr_len = 4) {
char char_tmp[7];
String var_tmp = String(var);
var_tmp.toCharArray(char_tmp, chr_len);
return char_tmp;
}
ЗЫ: Компилируется, но я не уверен на счет const в возвращаемом типе…
никада так не делай.
Я ради примера, а не “истины в одном лице” ))
Но да, косяк. Признаю…
А как правильно массив чаров вернуть из финкции?
либо возвращать String, либо возвращаемую переменную делать static
Именно так я и делаю. Сначала получаю переменную, затем преобразовываю ее в массив символов , потом вывожу массив на дисплей. НО ЗАЧЕМ! У меня в программе будет с десяток (минимум) переменных, word и long , сколько же массивы символов займут места! и в том фрагменте, что я прислал, переменная выводится так : oled.print(“F=”); oled.print(freq); oled.print("Hz "); . Какую библиотеку применить для моего дисплея!
