1

Topic: "Текстовая строка"

Подскажите пожалуйста, как правильно скопировать СТРОКУ.В моей программе  информация выводится на LCD 16x2 ( display_lcd(0,0,'                ');display_lcd(0,1,'               '));.В РЕДАКТОРЕ сформировал две СТРОКИ. ВОПРОС: Как правильно прописать:  strcpy  (RemoteXY.text_1, str) и strcpy  (RemoteXY.text_2, str)? Подставляю вместо str ---> display_lcd(0,0,'                ') и display_lcd(0,1,'                ') соответственно , IDE выдает ошибку :  error: invalid use of void expression (ошибка: недопустимое использование void выражение).

2

Re: "Текстовая строка"

Функция С++ strcpy  (str1, str2) копирует str2 в str1 (str2 -> str1 )

strcpy  (str1, str2); 
strcpy  (RemoteXY.text_1, "My text");
strcpy  (RemoteXY.text_1, str);

Однако из вашего поста не совсем понял что куда вы хотите скопировать? Поясните пожалуйста.

3 (edited by Nikolaih 2016-12-30 19:22:55)

Re: "Текстовая строка"

Есть Контролер  на Arduino UNO, 4 кнопки и LCD 16x2 дисплей . Как скопировать выводимую в строки   LCD информацию на смартфон? Информация в LCD выводится построчно , функцией display_lcd(0,0\1,"xx...xx").

4

Re: "Текстовая строка"

Так

display_lcd(0,0,"xx...xx");
strcpy  (RemoteXY.text_1, "xx...xx");

или так

char *s = "xx...xx";
display_lcd(0,0,s);
strcpy  (RemoteXY.text_1,s);

5

Re: "Текстовая строка"

Не получается . Я так понял , что может копировать только просто строку "ххххх...хххх", а информацию из функции вывода в LCD --нет. Инфу с датчиков выводит (ds18b20, dht11)
Вообще задумка проекта хорошая, что то включить-выключить, отобразить данные датчиков и прочие "детские штучки". Так , чтоб поиграться.

6

Re: "Текстовая строка"

Nikolaih wrote:

Я так понял , что может копировать только просто строку "ххххх...хххх", а информацию из функции вывода в LCD --нет.

Так уж устроен C++ или, может быть, функция вывода в LCD. RemoteXY тут не причем.

7

Re: "Текстовая строка"

/*
   -- 123 --
   
   This source code of graphical user interface 
   has been generated automatically by RemoteXY editor.
   To compile this code using RemoteXY library 2.2.5 or later version 
   download by link http://remotexy.com/en/library/
   To connect using RemoteXY mobile app by link http://remotexy.com/en/download/                   
     - for ANDROID 3.7.1 or later version;
     - for iOS 1.0.7 or later version;
    
   This source code is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.    
*/

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

// определение режима соединения и подключение библиотеки RemoteXY 
#define REMOTEXY_MODE__HARDSERIAL

#include <RemoteXY.h>

// настройки соединения 
#define REMOTEXY_SERIAL Serial2
#define REMOTEXY_SERIAL_SPEED 115200


// конфигурация интерфейса  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 18,266,111,2,6,0,6,1,0,87
  ,36,12,12,49,72,12,12,2,1,43
  ,0,1,0,87,50,12,12,49,86,12
  ,12,2,1,45,0,1,0,36,50,12
  ,12,18,70,12,12,2,1,69,83,67
  ,0,1,0,36,33,12,12,19,87,12
  ,12,2,1,77,47,69,110,116,101,114
  ,0,1,0,25,42,12,12,6,79,12
  ,12,2,1,60,0,1,0,47,42,12
  ,12,31,78,12,12,2,1,62,0,1
  ,0,80,39,20,20,53,34,12,12,2
  ,2,32,208,161,208,190,209,133,209,128
  ,208,176,208,189,208,184,209,130,209,140
  ,0,7,32,76,28,25,7,53,28,20
  ,5,2,2,11,67,0,30,13,47,17
  ,11,35,44,23,2,1,9,67,0,36
  ,1,6,10,42,0,20,5,2,0,2
  ,67,0,53,1,10,10,42,5,20,5
  ,2,0,3,67,0,20,18,20,5,24
  ,18,20,5,2,2,9,67,0,20,23
  ,20,5,23,24,20,5,2,2,9,67
  ,0,20,28,20,5,24,28,20,5,2
  ,2,9,67,0,20,33,20,5,24,34
  ,20,5,2,2,9,67,0,20,38,20
  ,5,24,39,20,5,2,2,9,67,0
  ,20,43,20,5,23,44,20,5,2,2
  ,9,67,0,20,48,20,5,24,49,20
  ,5,2,2,9,67,0,20,53,20,5
  ,24,54,20,5,2,2,9,67,0,40
  ,18,20,5,45,19,20,5,2,2,9
  ,67,0,40,23,20,5,45,24,20,5
  ,2,2,9,67,0,40,28,20,5,44
  ,31,20,5,2,2,9,67,0,40,33
  ,20,5,46,35,20,5,2,2,9,67
  ,0,40,38,20,5,45,39,20,5,2
  ,2,9,67,0,40,43,20,5,46,44
  ,20,5,2,2,9,67,0,40,48,20
  ,5,46,49,20,5,2,2,9,67,0
  ,40,53,20,5,45,55,20,5,2,2
  ,9,67,0,60,18,20,5,53,18,20
  ,5,2,2,9,67,0,60,23,20,5
  ,53,24,20,5,2,2,9,67,0,60
  ,28,20,5,53,29,20,5,2,2,9
  ,67,0,60,33,20,5,53,35,20,5
  ,2,2,9,67,0,60,38,20,5,53
  ,40,20,5,2,2,9,67,0,60,43
  ,20,5,53,43,20,5,2,2,9,67
  ,0,60,48,20,5,53,47,20,5,2
  ,2,9,67,0,60,53,20,5,53,52
  ,20,5,2,2,9,67,0,80,18,20
  ,5,53,18,20,5,2,2,9,67,0
  ,26,1,10,10,6,2,20,5,2,0
  ,3,67,0,39,1,10,10,14,3,20
  ,5,2,0,3,67,0,63,1,5,10
  ,53,3,20,5,2,0,2,67,0,67
  ,1,10,10,53,4,20,5,2,0,3
  ,67,0,77,1,5,10,53,4,20,5
  ,2,0,2,67,0,81,1,10,10,53
  ,13,20,5,2,0,3,67,4,4,5
  ,20,5,4,5,20,5,2,0,11,131
  ,1,2,18,15,11,3,92,14,7,2
  ,1,49,0,131,0,2,30,15,10,33
  ,92,14,7,2,2,50,0 };
  
// структура определяет все переменные вашего интерфейса управления 
struct {

    // input variable
  uint8_t button_1; // =1 если кнопка нажата, иначе =0 
  uint8_t button_2; // =1 если кнопка нажата, иначе =0 
  uint8_t button_3; // =1 если кнопка нажата, иначе =0 
  uint8_t button_4; // =1 если кнопка нажата, иначе =0 
  uint8_t button_5; // =1 если кнопка нажата, иначе =0 
  uint8_t button_6; // =1 если кнопка нажата, иначе =0 
  uint8_t button_7; // =1 если кнопка нажата, иначе =0 
  char edit_1[11];  // =строка UTF8 оканчивающаяся нулем  

    // output variable
  char text_1[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_2[2];  // =строка UTF8 оканчивающаяся нулем 
  char text_3[3];  // =строка UTF8 оканчивающаяся нулем 
  char text_4[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_5[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_6[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_7[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_8[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_9[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_10[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_11[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_12[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_13[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_14[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_15[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_16[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_17[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_18[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_19[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_20[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_21[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_22[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_23[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_24[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_25[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_26[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_27[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_28[9];  // =строка UTF8 оканчивающаяся нулем 
  char text_29[3];  // =строка UTF8 оканчивающаяся нулем 
  char text_30[3];  // =строка UTF8 оканчивающаяся нулем 
  char text_31[2];  // =строка UTF8 оканчивающаяся нулем 
  char text_32[3];  // =строка UTF8 оканчивающаяся нулем 
  char text_33[2];  // =строка UTF8 оканчивающаяся нулем 
  char text_34[3];  // =строка UTF8 оканчивающаяся нулем 
  char text_35[2];  // =строка UTF8 оканчивающаяся нулем 

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 

} RemoteXY;
#pragma pack(pop)

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



void setup() 
{
  RemoteXY_Init (); 
  
  
  // TODO you setup code
  
}

void loop() 
{ 
  RemoteXY_Handler ();
  
  
  // TODO you loop code
  // используйте структуру RemoteXY для передачи данных


}

http://cdn1.savepice.ru/uploads/2017/3/17/7024693314c63a37001025bd1b47fddd-full.jpg чистка ноутбука

http://cdn1.savepice.ru/uploads/2017/3/17/f7fc2cecc2c88136414a2f43313afdf6-full.jpg чистка ноутбука

http://cdn1.savepice.ru/uploads/2017/3/17/35cf0aafd2a9af7e0606c298eeb11a33-full.jpg чистка ноутбука

Здравствуйте!
Возникла проблема с добавлением еще одной текстовой строки, на третьим изображение она добавлена и код приложен.
Ну и суть проблемы, немого подключиться по блютусу, как тока удаляю строку все работает без проблем, аналогично с  индикатором.
Спасибо!

8

Re: "Текстовая строка"

Суммарная длина всех выходных переменных превысила 255, по этому не подключается.
Смотрите вторую цифру в массиве RemoteXY_CONF
Это известная нам проблема, будет исправлена уже скоро в ближайшем обновлении.
Пока постарайтесь не превышать этого значения, например уменьшив длины строк, которые реально не нуждаются в таком количестве символов. И все будет работать.

9

Re: "Текстовая строка"

Спасибо, буду пребывать.

10

Re: "Текстовая строка"

Возникла проблема с текстовой строкой! Вероятно с русскими символами...

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

С короткими сообщениями все ок.

strcpy(RemoteXY.text_1, "/Режимы/");

Пробовал длинное

strcpy(RemoteXY.text_1, "/Режимы устройств/");

выдало "/Режимы уст",  а "_ойств/" перенеслось само в переменную text_2. тобишь сбой какой то...

Попробовал заменить на:

strcpy(RemoteXY.text_1, "01234567890123456789"); 

все отобразилось правильно, т.е. с длинной никак не связано.
Есть какие то ограничения по кириллице?

11 (edited by Naladchik 2017-07-24 17:47:54)

Re: "Текстовая строка"

ohotnik13

В свое время нарвался на эти же грабли. Задавал вопрос разработчику, цитирую ответ "...Это особенность кодировки символов в UTF-8, где одному символу может соответствовать более 1 байта. Русским буквам как правило 2 байта. Подробнее читайте в документации по строкам UTF-8 в языке C++..."
Заменяйте кириллицу латиницей.

12

Re: "Текстовая строка"

Да, все верно. При определении длины текстового поля умножайте количество предполагаемых символов на 2.

13 (edited by iulian 2017-12-30 07:35:10)

Re: "Текстовая строка"

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

Не пойму что не так, из примера с текстовой строкой там где температура, приложение показывает данные.

А вот там где я кодю через редактор на Вашем сайте, пишет: Device not reply. Receive time out error.
В чему может быть причина?

Вот код:

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

// определение режима соединения и подключение библиотеки RemoteXY 
#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>

#include <RemoteXY.h>

// настройки соединения 
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600


// конфигурация интерфейса   
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,0,0,11,0,12,0,8,13,0,
  67,4,28,24,41,15,2,26,11 };
   
// структура определяет все переменные вашего интерфейса управления 
struct {

    // output variable
  char text_1[11];  // =строка UTF8 оканчивающаяся нулем

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

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



void setup() 
{
  RemoteXY_Init (); 
     

   
  // TODO you setup code
   
}

void loop() 

  RemoteXY_Handler ();
      strcpy  (RemoteXY.text_1, "My text"); 

  // TODO you loop code
  // используйте структуру RemoteXY для передачи данных


}

А вот этот код уже работает, скопирован из Вашего примера про вывод температуры:

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

// определение режима соединения и подключение библиотеки RemoteXY 
#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>

#include <RemoteXY.h>

// настройки соединения 
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600


// конфигурация интерфейса   
#pragma pack(push, 1)
unsigned char RemoteXY_CONF[] = 
{ 0,11,27,0,1,5,67,0,24,23
  ,54,16,2,11,129,0,23,12,39,9
  ,0,84,101,109,112,44,32,194,176,67
  ,0 }; 
   
// структура определяет все переменные вашего интерфейса управления 
struct {

     char text_1[11];  /* =строка оканчивающаяся нулем UNICODE */

    /* other variable */
  unsigned char connect_flag;  /* =1 if wire connected, else =0 */


} RemoteXY;
#pragma pack(pop)

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



void setup() 
{
  RemoteXY_Init (); 
     

   
  // TODO you setup code
   
}

void loop() 

  RemoteXY_Handler ();
      strcpy  (RemoteXY.text_1, "My text"); 

  // TODO you loop code
  // используйте структуру RemoteXY для передачи данных


}

14

Re: "Текстовая строка"

Заработало, обновил библиотеку Remotexy