Получить значение переменной если ее имя задано в текстовой форме
- Войдите на сайт для отправки комментариев
Пнд, 11/01/2021 - 18:35
Здравствуйте, вот код
float r1_1=0;
...................
float r1_26=0;
for(int i=0;i<26;i++)
{
Serial1.print((String)"&r1_"+i+"="+"r1_"+i);
}
Serial1.println("");
в конце строки "r1_"+i это имя существующей переменной, как к ней можно обратиться? Не смог найти такую информацию, и возможно ли это вобще? Спасибо за помощь!
Никак, для этого есть массивы.
Не
float r1_1, ... ,r1_26;
А
float r1[26];//на самом деле [25], потому, что нумерация начинается с нуля
Что не уж то за 2,5 года знакомства с ардуино не добрался до массивов ?
А если эти переменные имеют разные типы? flot bool int...?
А если эти переменные имеют разные типы?
А нафуя ?
ну чтобы меньше памяти занимали
ну чтобы меньше памяти занимали
Что мешает сделать для каждого типа отдельный массив ? Сама задумка бредом отдает
Кроме массивов есть ещё структуры, если что....
struct my_struct{ float a; int b; const char c="HELLO WORLD"; byte d; boolean e; } my_struct struct_1; struct_1.a=2.456; ,//И тдДело в том, что параметров очень много и такая запись
//Serial1.print((String)"&r1_1="+r1_1+"&r1_2="+r1_2+"&r1_3="+r1_3+"&r1_4="+r1_4+"&r1_5="+r1_5+"&r1_6="+r1_6+"&r1_7="+r1_7+"&r1_8="+r1_8+"&r1_9="+r1_9+"&r1_10="+r1_10); //Serial1.print((String)"&r1_11="+r1_11+"&r1_12="+r1_12+"&r1_13="+r1_13+"&r1_14="+r1_14+"&r1_15="+r1_15+"&r1_16="+r1_16+"&r1_17="+r1_17+"&r1_18="+r1_18+"&r1_19="+r1_19+"&r1_20="+r1_20); //Serial1.print((String)"&r1_21="+r1_21+"&r1_22="+r1_22+"&r1_23="+r1_23+"&r1_24="+r1_24+"&r1_25="+r1_25+"&r1_26="+r1_26);Сжирает много динамической памяти
Дело в том, что параметров очень много и такая запись
//Serial1.print((String)"&r1_1="+r1_1+"&r1_2="+r1_2+"&r1_3="+r1_3+"&r1_4="+r1_4+"&r1_5="+r1_5+"&r1_6="+r1_6+"&r1_7="+r1_7+"&r1_8="+r1_8+"&r1_9="+r1_9+"&r1_10="+r1_10); //Serial1.print((String)"&r1_11="+r1_11+"&r1_12="+r1_12+"&r1_13="+r1_13+"&r1_14="+r1_14+"&r1_15="+r1_15+"&r1_16="+r1_16+"&r1_17="+r1_17+"&r1_18="+r1_18+"&r1_19="+r1_19+"&r1_20="+r1_20); //Serial1.print((String)"&r1_21="+r1_21+"&r1_22="+r1_22+"&r1_23="+r1_23+"&r1_24="+r1_24+"&r1_25="+r1_25+"&r1_26="+r1_26);Сжирает много динамической памяти
Потому что везде String используется.
Сама идея так себе не нужно все это выводить за раз, тем более строкой.
В реальной программе тем более, а для отладки можно и по одной переменной выводить
я понял, спасибо!
ну чтобы меньше памяти занимали
На практике оказывается, что, наоборот, так занимают заметно больше.
А если эти переменные имеют разные типы? flot bool int...?
К имени переменной ее тип никакого отношения не имеет
и как я, позвольте спросить, создам массив переменных с разным типом?
и как я, позвольте спросить, создам массив переменных с разным типом?
Никак не создадите.
ну, или сделаете объемлющий тип (погуглите тип VARIANT).
Создавайте с одним типом.
Или пишите переменные, как в #7.
Доводы "очень надо" компилятору фиолетовы.
и как я, позвольте спросить, создам массив переменных с разным типом?
Судя по уровню вопросов: Вы - никак.
Да, по сути, оно Вам и не нужно: ищите другой способ - который Вам под силу. Заодно он может оказаться и более эффективным.