Вывод переменных на дисплей S65 LPH8836

AlexZima
Offline
Зарегистрирован: 18.08.2017

Помогите пожалуйста кто знает, как можно выводить переменные на дисплей S65 LPH8836. Программа у меня Arduino 1.8.4. Пока не заменил в файлах библиотеки S65Display prog_uint8_t font_PGM на uint8_t font_PGM библиотека не компилировалась, после замены заработала, но вместо текста выводится какой-то мусор. В версии 1.0.6 вывел текст, а вот переменные выводить не получается, не пойму какой командой это можно сделать. Может кто подскажет или пример какой-нибудь скинет.

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

Ну, если текст выводите, так преобразуйте Ваши переменные в текст и выводите их как текст. Или я чего-то не понял в вопросе? 

AlexZima
Offline
Зарегистрирован: 18.08.2017

Евгений, спасибо за ответ. Я и хотел преобразовать, но не понял как. Вчера всё-таки у меня получилось включить в библиотеке команды drawInteger и drawFloat и всё пошло.

AlexZima
Offline
Зарегистрирован: 18.08.2017

Появился ещё один вопрос, а есть ли возможность получить hex в Arduino 1.0.6?

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

Зайдите в "Настройки" и установите подробный вывод при компиляции

Затем запустите компиляцию и в самом конце выдачи будет адрес Вашего hex-файла. 

Зайдёте туда "проводником" и возьмёте.

AlexZima
Offline
Зарегистрирован: 18.08.2017

Спасибо, получилось.

AlexZima
Offline
Зарегистрирован: 18.08.2017

ЕвгенийП, всё-таки интересно мне попытаться вывести переменные при помощи команды вывода текста. Мне нужно вывести на дисплей например результат вычисления КСВ. Беру команду 

  lcd.drawText(120,48,SWR,1,RGB(255,255,255),RGB(0,0,0))

SWR вставляю без ковычек и выпадают ошибки, а если в ковычках то естественно печатает сам текст SWR. Как вы имели ввиду преобразовать переменную в текст?

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

А как у Вас описана SWR?

И как описана  lcd.drawText?

Понимаю, что второй вопрос Вам непонятен, но хотя бы дайте полный текст сообщения об ошибке о которой Вы говорили или ссылку на имеено ту библиотеку, которую Вы пользуете.

AlexZima
Offline
Зарегистрирован: 18.08.2017
//****************************** Расчёт КСВ **************        
  if ((U1==0)&&(U2==0)){SWR=1;}                               
  if ((U1!=0)&&(U2!=0)&&(U1==U2)||(U2>U1)){SWR=9.99;}
  if (U1>U2){SWR=(U1+U2)/(U1-U2);                                                                   
  lcd.drawText(120,48,SWR,1,RGB(255,255,255),RGB(0,0,0));
 
 
  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Diecimila or Duemilanove w/ ATmega168"
S_SWR_PWR_U_LPH8836.ino: In function 'void loop()':
S_SWR_PWR_U_LPH8836:72: error: no matching function for call to 'S65Display::drawText(int, int, float&, int, int, int)'
C:\Program Files\Arduino\libraries\S65Display/S65Display.h:113: note: candidates are: uint8_t S65Display::drawText(uint8_t, uint8_t, char*, uint8_t, uint16_t, uint16_t)

 

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

Ну, про drawText понял, а SWT-то как описана?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

AlexZima пишет:

ЕвгенийП, всё-таки интересно мне попытаться вывести переменные при помощи команды вывода текста. Мне нужно вывести на дисплей например результат вычисления КСВ. Беру команду 

  lcd.drawText(120,48,SWR,1,RGB(255,255,255),RGB(0,0,0))

SWR вставляю без ковычек и выпадают ошибки, а если в ковычках то естественно печатает сам текст SWR. Как вы имели ввиду преобразовать переменную в текст?

Вам название функции drawText ни о чём таком, связанном с текстом, не говорит, не? Перевожу: нарисоватьТекст, а вы ей скармливаете переменную типа float. Не находите странности, не?

Надо хотя бы так:

String s = SWR;
lcd.drawText(120,48,s.c_str(),1,RGB(255,255,255),RGB(0,0,0));

 

AlexZima
Offline
Зарегистрирован: 18.08.2017

Ну почему же не нахожу странности, нахожу, поэтому и интересуюсь можно ли drawText-том выводить переменные. Пока в библиотеке не было команд типа drawInteger и drawFloat чем это делалось или небыло такой возможности.

Попробовал я так как вы предложили, но на String s = SWR; программа ругается:

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Diecimila or Duemilanove w/ ATmega168"
S_SWR_PWR_U_LPH8836.ino: In function 'void loop()':
S_SWR_PWR_U_LPH8836:74: error: two or more data types in declaration of 's'

 

S_SWR_PWR_U_LPH8836:75: error: 's' was not declared in this scope
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Просто s у Вас уже есть.

2. Вы мне когда-нибудь скажете, как описана SWR? Или будете секретничать?

AlexZima
Offline
Зарегистрирован: 18.08.2017

Да я просто не понял что значит описана. Если вы имеете ввиду как назначены переменные то вот:

//************************* Назначаем переменные ********************************************************************************
  float U1=0;                                                 
  float U2=0;                                                 
  float U3=0;                                                 
  float SWR=0;                                               
  float PWR=0;                                                
Я вместо s ставил другую букву, которой в переменных небыло, а в ошибках исправил чтобы не плодить непонятки, но видимо получилось обратное.
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, тогда примерно так

{
    char strSWR[10];
    dtostrf(SWR, 9, 3, strSWR);
    lcd.drawText(120,48,strSWR,1,RGB(255,255,255),RGB(0,0,0));
}

Если нужно другое количество знаков после запятой, то см. описание функции dtostrf.

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

AlexZima
Offline
Зарегистрирован: 18.08.2017

Проверить в работе пока не смогу(накрылся индикатор), но программа компилирует. Как проверю- отпишусь. А пока спасибо за помощь.

AlexZima
Offline
Зарегистрирован: 18.08.2017

ЕвгенийП, работает нормально, поигрался количеством знаков после запятой, но есть непонятка: ставлю коардинаты той позиции которая мне нужна, а выводится значительно правее. Попробовал подкорректировать, но стало затирать надпись слева. Получается, что если по x выставить 0, то напечатается где-то на 30. И ещё что спросить хотел, вы не в курсе как победить остаточное изображение после выключения питания. И на сколько это опасно для индикатора, если мер не принимать?

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

С лидирующими пробелами бороться леко. Вы, видимо не до конца прочитали описание dtostrf.

Второй параметр - общая ширина поля для числа (включая точку, и знак "-". если есть). Число выравнивается по правому краю поля. Если этот параметр отрицательный, то всё также, но число выравнивается по левому краю. Т.е. в моём примере замените 9 на -9 и лидирующих пробелов не будет (лишние пробелы в конце скопятся).

Кстати, не забывайте, что размер буфера (в моём примере - 10) всегда на 1 больше максимальной ширины поля (т.е. второго параметра dtostrf взятого по модулю).

Про послесвечение ничего сказать не могу.

AlexZima
Offline
Зарегистрирован: 18.08.2017

Всё понял, спасибо. Поэксперементирую.

AlexZima
Offline
Зарегистрирован: 18.08.2017

Всё понял, спасибо. Поэксперементирую.

AlexZima
Offline
Зарегистрирован: 18.08.2017

Появился такой вопрос: а есть ли в S65Display возможность выбирать шрифты? У меня получилось всё одним шрифтом сделать, а хочется разными.