Строки

yah
Offline
Зарегистрирован: 09.11.2013

Вывожу несколько переменных в com порт примерно так:

  Serial.print("SN:"); Serial.print(num_package); Serial.print(";"); 
  Serial.print("PRS="); Serial.print(press); Serial.print(";"); 
  Serial.print("TMP="); Serial.print(temp); Serial.print(";"); 
  Serial.print("ALT_BAR="); Serial.print(alt_bar); Serial.print(";"); 
  Serial.println(); 
  

а хотелось бы так:

char* sn_str = "SN:" + num_package + ";PRS=" + press + ";TMP=" + temp + "ALT_BAR=" + alt_bar ";";

но так не работает:

error: invalid operands of types 'const char*' and 'const char [6]' to binary 'operator+'

пробывал так:

  float press = 1.1, temp = 1.2, alt_bar = 1.3;
  char report[80];
  
  snprintf(report, sizeof(report), "SN:%6d; %6d; %6d;",
    press, temp, alt_bar);
  Serial.println(report);

видемо самый рациональный способ, но в сериал выдает 

SN:-13107;  16268; -26214;

подскажите как сделать лучше?

com
Offline
Зарегистрирован: 06.09.2013

вещественные переменные вы через sprintf не выведете, не сработает. надо выводить отдельно целую и дробную части как целые числа, а между ними - точку

yah пишет:

подскажите как сделать лучше?

обычно самый лучши способ это тот, который работает. чем не устраивает вариант, который вы сначала привели?

 

maksim
Offline
Зарегистрирован: 12.02.2012

yah пишет:

а хотелось бы так:

char* sn_str = "SN:" + num_package + ";PRS=" + press + ";TMP=" + temp + "ALT_BAR=" + alt_bar ";";

Ну так пожалуйста String

String sn_str = "SN:" + num_package + ";PRS=" + press + ";TMP=" + temp + "ALT_BAR=" + alt_bar ";";

 

yah
Offline
Зарегистрирован: 09.11.2013

com пишет:

обычно самый лучши способ это тот, который работает. чем не устраивает вариант, который вы сначала привели?

Тем что мне нужна на выходе одна переменная (sn_str), я ее потом в функцию засовываю=)

 

maksim пишет:

Ну так пожалуйста String

String sn_str = "SN:" + num_package + ";PRS=" + press + ";TMP=" + temp + "ALT_BAR=" + alt_bar ";";

пробывал, не работает, ошибка:





error: invalid operands of types 'const char [4]' and 'float' to binary 'operator+'
error: expected ',' or ';' before string constant

 

com
Offline
Зарегистрирован: 06.09.2013
sn_str = "SN:";
sn_str.concat(num_package);
...

 

ites
Offline
Зарегистрирован: 26.12.2013

yah пишет:

com пишет:

обычно самый лучши способ это тот, который работает. чем не устраивает вариант, который вы сначала привели?

Тем что мне нужна на выходе одна переменная (sn_str), я ее потом в функцию засовываю=)

 

maksim пишет:

Ну так пожалуйста String

String sn_str = "SN:" + num_package + ";PRS=" + press + ";TMP=" + temp + "ALT_BAR=" + alt_bar ";";

пробывал, не работает, ошибка:





error: invalid operands of types 'const char [4]' and 'float' to binary 'operator+'
error: expected ',' or ';' before string constant

 

String sn_str = String("SN:") + num_package + ";PRS=" + press + ";TMP=" + temp + "ALT_BAR=" + alt_bar ";";

 

yah
Offline
Зарегистрирован: 09.11.2013

ites пишет:

String sn_str = String("SN:") + num_package + ";PRS=" + press + ";TMP=" + temp + "ALT_BAR=" + alt_bar ";";

выдает

error: ambiguous overload for 'operator+' in 'String(((const char*)"SN:")) + num_package'
error: expected ',' or ';' before string constant

и куча " note: StringSumHelper& operator+(const StringSumHelper&, unsigned char) "

COM пишет:

float num_package = 1.3, press = 1.1, temp = 1.2, alt_bar = 1.3;
  char report[80];
  
  String sn_str = "SN:";
  sn_str.concat(num_package);
  
  Serial.println(sn_str);
  delay(500);

выдает:

cansat_str.ino: In function 'void loop()':
cansat_str:10: error: call of overloaded 'concat(float&)' is ambiguous
note: candidates are: unsigned char String::concat(char)
note:                 unsigned char String::concat(unsigned char)
note:                 unsigned char String::concat(int)
note:                 unsigned char String::concat(unsigned int)
note:                 unsigned char String::concat(long int)
note:                 unsigned char String::concat(long unsigned int)

 

yah
Offline
Зарегистрирован: 09.11.2013

Попробывал так: 

int num_package = 1;
float press = 1.1, temp = 1.2, alt_bar = 1.3;

void setup(){
  Serial.begin(9600);
}

void loop(){

  String sn_str = "SN:"; sn_str = sn_str + num_package;
  sn_str = sn_str + "PRS:"; sn_str = sn_str + (char)press;
  sn_str = sn_str + "TMP:"; sn_str = sn_str + (char)temp;
  sn_str = sn_str + "ALT:"; sn_str = sn_str + (char)alt_bar;

  Serial.println(sn_str);
  delay(500);
}

на выходе получил

SN:1PRS:TMP:ALT:
SN:1PRS:TMP:ALT:
SN:1PRS:TMP:ALT:
SN:1PRS:TMP:ALT:
SN:1PRS:TMP:ALT:
SN:1PRS:TMP:ALT:
SN:1PRS:TMP:ALT:
SN:1PRS:TMP:ALT:

Почему так?

step962
Offline
Зарегистрирован: 23.05.2011

yah пишет:

Попробывал так: 

попробОвал

yah пишет:

Почему так?

Наверное, потому, что приведение типа (char) вырывает из переменной типа float только один первый байт.