Получить значение переменной по названию
- Войдите на сайт для отправки комментариев
Ср, 20/03/2019 - 12:26
Добрый день!
Что вписать вместо <var_name>?
1 | void debug(String var_name) { |
2 | Serial .println(var_name + ": " + <var_name>); |
3 | } |
Ничего. Serial.println() не работает с String+String
Что вписать вместо <var_name>?
Хороший вопрос! А надо-то что?
Что вписать вместо <var_name>?
Ничего. Так, как вы хотите - работать не будет. Для компилятора между переменной var_name и строкой "var_name" нет никакой связи. Внутри скомпилированной программы у переменных нет имен, компилятор заменяет их на адреса в памяти. где хранятся соответсвующие данные.
Ничего. Serial.println() не работает с String+String
Да, нет, почему? Разве у String нет оператора + ? Результатом будет String, а с ним сериал вполне работает. Или я что-то путаю?
Ахтыж... постоянно забываю, что String не char[].
Но имени переменной всё равно не получить.
Печально
Забываю все время, что это микроконтроллер
Ничего. Serial.println() не работает с String+String
но работает со Стрингом, то-есть надо сформировать переменную запихав в неё всё, что надо вывести
Печально
Забываю все время, что это микроконтроллер
причем тут "микроконтроллер"? Подобного трюка Вы не сможете проделать в программе на С и на большом компе.
Забываю все время, что это микроконтроллер
А какая разница мико или макроконтроллер?
Хотите делать такие фокусы на "ардуине", берите искру-js - там сколько угодно :)
Ахтыж... постоянно забываю, что String не char[].
Но имени переменной всё равно не получить.
А если так- #define MACRO_VARIABLE_TO_STRING(Variable) (void(Variable),#Variable)
1
#define debug(varname) Serial.printf("%s = %s", #varname, varname);
2
3
void
setup
() {
4
Serial
.begin(9600);
5
char
* zzz =
"xxx"
;
6
debug(zzz);
7
}
8
9
void
loop
() {}
Serial.printf
хм....
проще надо, проще :)
01
#define debug(varname) Serial.print(#varname);Serial.print('='); Serial.println(varname);
02
03
void
setup
() {
04
Serial
.begin(9600);
05
char
* zzz =
"xxx"
;
06
String sss =
"SSS"
;
07
int
i = 314;
08
debug(zzz);
09
debug(sss);
10
debug(i);
11
}
12
13
void
loop
() {}
С одной стороны - решение есть, с другой - оно не является ответом на изначальный вопрос.
Гы - смешно: ТС свалил, а топы мериются причиндалами. :)
ИМХО - В #1 Евгений спросил все.