Получить значение переменной по названию

MAXiDROME
Offline
Зарегистрирован: 20.03.2019

Добрый день!

Что вписать вместо <var_name>?

void debug(String var_name) {
  Serial.println(var_name + ": " + <var_name>);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Ничего. Serial.println() не работает с String+String

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

MAXiDROME пишет:

Что вписать вместо <var_name>?

Хороший вопрос! А надо-то что?

b707
Offline
Зарегистрирован: 26.05.2017

MAXiDROME пишет:

Что вписать вместо <var_name>?

Ничего. Так, как вы хотите - работать не будет. Для компилятора между переменной var_name и строкой "var_name" нет никакой связи. Внутри скомпилированной программы у переменных нет имен, компилятор заменяет их на адреса в памяти. где хранятся соответсвующие данные.

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

sadman41 пишет:

Ничего. Serial.println() не работает с String+String

Да, нет, почему? Разве у String нет оператора + ? Результатом будет String, а с ним сериал вполне работает. Или я что-то путаю?

sadman41
Offline
Зарегистрирован: 19.10.2016

Ахтыж... постоянно забываю, что String не char[].

Но имени переменной всё равно не получить.

MAXiDROME
Offline
Зарегистрирован: 20.03.2019

Печально

Забываю все время, что это микроконтроллер

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

Ничего. Serial.println() не работает с String+String

но работает со Стрингом, то-есть надо сформировать переменную запихав в неё всё, что надо вывести

b707
Offline
Зарегистрирован: 26.05.2017

MAXiDROME пишет:

Печально

Забываю все время, что это микроконтроллер

причем тут "микроконтроллер"? Подобного трюка Вы не сможете проделать в программе на С и на большом компе.

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

MAXiDROME пишет:

Забываю все время, что это микроконтроллер

А какая разница мико или макроконтроллер?

Хотите делать такие фокусы на "ардуине", берите искру-js - там сколько угодно :)

asam
Offline
Зарегистрирован: 12.12.2018

sadman41 пишет:

Ахтыж... постоянно забываю, что String не char[].

Но имени переменной всё равно не получить.

А если так- #define MACRO_VARIABLE_TO_STRING(Variable) (void(Variable),#Variable)

negavoid
Offline
Зарегистрирован: 09.07.2016
#define debug(varname) Serial.printf("%s = %s", #varname, varname);

void setup() {
  Serial.begin(9600);
  char * zzz = "xxx";
  debug(zzz);
}

void loop() {}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Serial.printf

хм....

проще надо, проще :)

#define debug(varname) Serial.print(#varname);Serial.print('='); Serial.println(varname);

void setup() {
  Serial.begin(9600);
  char * zzz = "xxx";
  String sss = "SSS";
  int i = 314;
  debug(zzz);
  debug(sss);
  debug(i);  
}

void loop() {}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

С одной стороны - решение есть, с другой - оно не является ответом на изначальный вопрос.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Гы - смешно: ТС свалил, а топы мериются причиндалами. :)

ИМХО - В #1 Евгений спросил все.