Получить значение переменной если ее имя задано в текстовой форме

3d_killer
Offline
Зарегистрирован: 13.06.2018

Здравствуйте, вот код


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 это имя существующей переменной, как к ней можно обратиться? Не смог найти такую информацию, и возможно ли это вобще? Спасибо за помощь!

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Никак, для этого есть массивы.
Не
float r1_1, ... ,r1_26;
А
float r1[26];//на самом деле [25], потому, что нумерация начинается с нуля

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Что не уж то за 2,5 года знакомства с ардуино не добрался до массивов ?

3d_killer
Offline
Зарегистрирован: 13.06.2018

А если эти переменные имеют разные типы? flot bool int...?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

3d_killer пишет:

А если эти переменные имеют разные типы?

А нафуя ?

3d_killer
Offline
Зарегистрирован: 13.06.2018

ну чтобы меньше памяти занимали

Kakmyc
Offline
Зарегистрирован: 15.01.2018

3d_killer пишет:

ну чтобы меньше памяти занимали

Что мешает сделать для каждого типа отдельный массив ? Сама задумка бредом отдает

Кроме массивов есть ещё структуры, если что....

 

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;
,//И тд

 

3d_killer
Offline
Зарегистрирован: 13.06.2018

Дело в том, что параметров очень много и такая запись

//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);

Сжирает много динамической памяти

Kakmyc
Offline
Зарегистрирован: 15.01.2018

3d_killer пишет:

Дело в том, что параметров очень много и такая запись

//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 используется.

Сама идея так себе не нужно все это выводить за раз, тем более строкой.

В реальной программе тем более, а для отладки можно и по одной переменной выводить

3d_killer
Offline
Зарегистрирован: 13.06.2018

я понял, спасибо!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

3d_killer пишет:

ну чтобы меньше памяти занимали

На практике оказывается, что, наоборот, так занимают заметно больше.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

3d_killer пишет:

А если эти переменные имеют разные типы? flot bool int...?

К имени переменной ее тип никакого отношения не имеет

3d_killer
Offline
Зарегистрирован: 13.06.2018

и как я, позвольте спросить, создам массив переменных с разным типом?

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

3d_killer пишет:

и как я, позвольте спросить, создам массив переменных с разным типом?

Никак не создадите.

ну, или сделаете объемлющий тип (погуглите тип VARIANT).

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

Создавайте с одним типом.
Или пишите переменные, как в #7.

Доводы "очень надо" компилятору фиолетовы.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

3d_killer пишет:

и как я, позвольте спросить, создам массив переменных с разным типом?

Судя по уровню вопросов: Вы - никак.

Да, по сути, оно Вам и не нужно: ищите другой способ - который Вам под силу. Заодно он может оказаться и более эффективным.