1

Topic: Вопрос по "текстовой строке"

Подскажите, как корректно вывести на экран температуру со значком градусов цельсия, например:  «t=-10.1 °С»?

2

Re: Вопрос по "текстовой строке"

Можно так

  
  float val = -10.1;
  char sval[7];  // сюда поместим число как строку, уесть максимально возможное 
                 // количество символов числа + один завершающий 0
  dtostrf(val, 0, 1, sval); // преобразуем число в строку
  sprintf (RemoteXY.text_1, "t=%s °С", sval); // собираем результирующую строку

3

Re: Вопрос по "текстовой строке"

В данный момент текстовая строка поддерживает 3 типа данных (текст, целое, вещественное). Мне кажется, было бы неплохо добавить варианты "дата" и "время". Либо м.б. вообще выделить в отдельный элемент управления с возможностью синхронизации времени с мобильного устройства?

4

Re: Вопрос по "текстовой строке"

klen wrote:

В данный момент текстовая строка поддерживает 3 типа данных (текст, целое, вещественное).

Вообще то вы не совсем правы. В текстовую строку вы можете вывести абсолютно любую информацию. И текстовая строка поддерживает только текст. Если вы хотите что то в нее вывести вам просто надо значение преобразовать в текст. Хоть числа, хоть время хоть вообще что угодно.

5

Re: Вопрос по "текстовой строке"

Прошу прощения, спутал тему, имел в виду не индикатор типа текстовая строка, а элемент управления "поле ввода".

6

Re: Вопрос по "текстовой строке"

Да, тогда вы правы. Все это запланировано.

7

Re: Вопрос по "текстовой строке"

remotexy wrote:

Можно так

  
  float val = -10.1;
  char sval[7];  // сюда поместим число как строку, уесть максимально возможное 
                 // количество символов числа + один завершающий 0
  dtostrf(val, 0, 1, sval); // преобразуем число в строку
  sprintf (RemoteXY.text_1, "t=%s °С", sval); // собираем результирующую строку

с "dtostrf" - все нормально. а вот "sprintf" - в листинге программы подсвечивается ... и при компиляции выдает ошибку:




C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp: In function 'main':

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51:1: error: unable to find a register to spill in class 'NO_REGS'

}

^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51:1: error: this is the insn:

(insn 1326 1323 1329 123 (set (mem:QI (post_dec:HI (reg/f:HI 32 __SP_L__)) [0  S1 A8])

        (subreg:QI (reg/f:HI 1365) 1)) W:\Users\KRV\Documents\2017\SharePoint\Внутренний сайт - Файлы\Умный РґРѕРј\Arduino\ArdM\ArdM.ino:707 1 {pushqi1}

     (expr_list:REG_ARGS_SIZE (const_int 5 [0x5])

        (nil)))

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51: confused by earlier errors, bailing out

lto-wrapper: C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-gcc returned 1 exit status

c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.9.2/../../../../avr/bin/ld.exe: lto-wrapper failed

collect2.exe: error: ld returned 1 exit status

exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.

8

Re: Вопрос по "текстовой строке"

Похоже ругается на какую то скобку. Проверьте.
}
^

9

Re: Вопрос по "текстовой строке"

remotexy wrote:

Похоже ругается на какую то скобку. Проверьте.
}
^


Эх, если бы было все так просто.
Попробовал я убрать из кода все лишнее...

Вот вариант А
____________________________________________________

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

...         для экономии места на форуме убрал

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////


void setup() 
{
   RemoteXY_Init (); 
   
}

void loop() {
  RemoteXY_Handler ();

  float val =  -10.1;
  char sval[7];  // сюда поместим число как строку, уесть максимально возможное
                 // количество символов числа + один завершающий 0
  dtostrf(val, 0, 1, RemoteXY.text_temp_int);   
// dtostrf(val, 0, 1, sval); // преобразуем число в строку 
// sprintf (RemoteXY.text_temp_int, "t=%s °С", sval); // собираем результирующую строку
}


_______________________________________________
в таком варианте все ок


Две последние строчки снимаем открываем, получаем вариант B:

_______________________________________________
//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

...         для экономии места на форуме убрал

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////


void setup() 
{
   RemoteXY_Init (); 
   
}

void loop() {
  RemoteXY_Handler ();

  float val =  -10.1;
  char sval[7];  // сюда поместим число как строку, уесть максимально возможное
                 // количество символов числа + один завершающий 0
//  dtostrf(val, 0, 1, RemoteXY.text_temp_int);   
  dtostrf(val, 0, 1, sval); // преобразуем число в строку 
  sprintf (RemoteXY.text_temp_int, "t=%s °С", sval); // собираем результирующую строку
}

__________________________________________

и после компиляции получаем следующее сообщение

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp: In function 'main':

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51:1: error: unable to find a register to spill in class 'NO_REGS'

}

^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51:1: error: this is the insn:

(insn 819 816 822 48 (set (mem:QI (post_dec:HI (reg/f:HI 32 __SP_L__)) [0  S1 A8])

        (subreg:QI (reg/f:HI 470) 1)) D:\Документы\Arduino\Test\Test\Test.ino:189 1 {pushqi1}

     (expr_list:REG_ARGS_SIZE (const_int 5 [0x5])

        (nil)))

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51: confused by earlier errors, bailing out

lto-wrapper: C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-gcc returned 1 exit status

c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.9.2/../../../../avr/bin/ld.exe: error: lto-wrapper failed

collect2.exe: error: ld returned 1 exit status

exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.



______________________________________________


Капаем дальше. Теперь решил вообще с 0 собрать маленький проект

_______________________________________________
//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

...         Тут другой текст

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////


void setup() 
{
   RemoteXY_Init (); 
   
}

void loop() {
  RemoteXY_Handler ();

  float val =  -10.1;
  char sval[7];  // сюда поместим число как строку, уесть максимально возможное
                 // количество символов числа + один завершающий 0
  dtostrf(val, 0, 1, sval); // преобразуем число в строку 
  sprintf (RemoteXY.text_temp_int, "t=%s °С", sval); // собираем результирующую строку
}

______________________________________________________
В таком варианте все работает.
А это значит, что ошибка где то во фрагменте RemoteXY include!!!
Я могу отправить листинг на емайл, который указан в контактах? Поможете разобраться?

10

Re: Вопрос по "текстовой строке"

отправьте полный  первый листинг который не компилируется, на info@remotexy.com

11

Re: Вопрос по "текстовой строке"

Действительно непонятно.
Во многих местах пишут что ошибка компилятора. Но будем изучать эту штуку.
Вот такой код работает:

  float val =  -10.1;
  char sval[7];
  char temp[20];
  dtostrf (val, 0, 1, sval); // преобразуем число в строку   
  sprintf (temp, "t=%s °С", sval); // собираем результирующую строку
  strcpy (RemoteXY.text_temp_int, temp); // копируем строку в переменную RemoteXY

12

Re: Вопрос по "текстовой строке"

Здравствуйте. А где можно прочитать про текстовые строки, с подробным описанием элементов? Например,
sprintf (temp, "t=%s °С", sval);, что такое t=%s ?