Как вытащить переменную из class

Для перехода на новую ESP_NOW библиотеку пришлось осваивать работу с Классами. Нашел четкий пример с двумя Ледами. Все работает. Научился передавать переменную в Класс, используя функцию, задаваемую в Классе. Но не знаю? как получить измененную при работе в Классе переменную для использования в Лууп. Использовать такую же функцию и оператор return, не получилось.

У всех получается…

“Такую же” - это какую же? Где код? Показывайте - посмотрим.

Код исходно не мой. Мое только Сериал+печать, и попытки получить результат из Класса

int ip=0;
float fli=11.;
long last;

class LED 
{
  public:
  int ip;
  float fli;
    LED(byte pin, uint16_t prd) 
    {
      _pin = pin;
      _prd = prd;
      pinMode(_pin, OUTPUT);
    }

    void blink() 
    {
      if (millis() - _tmr >= _prd) 
      {
        _tmr = millis();
        _flag = !_flag;
        digitalWrite(_pin, _flag);
      }
    }

    void setPrd(uint16_t prd) 
    {
      _prd = prd;
      Serial.print("class _prd ");;Serial.println(_prd);
    }

    void get_Data(float Data_In,float Data_Out)
    {
      float Out_Data;
      fli=Data_In; Data_Out=fli/2;Out_Data=Data_Out;
      Serial.print("class Data ");;Serial.println(Data_Out);
      ++fli;
    // return 1; //String(Out_Data);
    }

  private:
    byte _pin;
    uint32_t _tmr;
    uint16_t _prd;
    bool _flag;
};

LED led1(13, 500); // The number of pins and delay
LED led2(26, 1000);

void setup() 
{
  Serial.begin(115200);
  led1.setPrd(20); // To change a period
  led2.setPrd(1000);
}
//last=millis();
void loop() 
{
  led1.blink();
  led2.blink();
  if(millis()-last>=10*ip)
  {
    ++ip;
    led1.setPrd(10*ip);
    last=millis();
    Serial.print("loop ip ");Serial.println(ip);
    led1.get_Data(123.,fli);
     Serial.print("loop ");;Serial.println(fli);
  }
}

Ну и что вы хотите из всего этого получить?

Пример учебный. Я хочу, чтобы переменная Data_Out, которая в Классе меняет свое значения, могла быть принята в лууп и там напечатана.

Войд не совместим с ретурн.

2 лайка

У ТС нет понимания разницы «передать в функцию» и «получить из функции». Он пытается получить значение передавая его в функцию :smiley:

Но он же закоментрарен. Это одноаиз неудачных попыток решения проблемы.

Получить из функции:

float get_Data(float Data_In) { // вместо void указываем возвращаемый тип, в данном случае float
   float Out_Data;
   fli=Data_In; Data_Out=fli/2;Out_Data=Data_Out;
   Serial.print("class Data ");
   Serial.println(Data_Out);
   ++fli;
   return Out_Data; // возвращаем значение
}

Или так

Сразу плохому учишь? ))

Дед всегда вот так делал, от греха по дальше:

float get_Data(const float Data_In) { // вместо void указываем возвращаемый тип, в данном случае float
   float Out_Data;
   fli=Data_In; Data_Out=fli/2;Out_Data=Data_Out;
   Serial.print("class Data ");
   Serial.println(Data_Out);
   ++fli;
   return Out_Data; // возвращаем значение
}

И это правильно, особенно для новичков ничего не понимающих в адресации и тп. :slight_smile:

1 лайк

Чой-та плохому? Передаю по ссылке, переменная меняется в функции, после чего я ее и использую. Зато не создается ее локальная копия, а значит чутка экономится память :wink:

1 лайк

Он и ретурнов не понимает. Ему бы для начала учебник поштудировать ))

1 лайк

В твоём примере присутствует (объявлена) локальная переменная с тем же именем.
Я ничего не имею против - простов говорю, что для новичка, не знающего как вернуть из функции значение, твой пример «опережает время» )))

Кстати, я не знаю как себя компилятор в этом случае ведёт?

Нет там такой. Передается float &Data_Out, а локальная float Out_Data. Глупость несусветная, но что ТС наворотил, то я и использовал. Тем более, что таких глупостей там вагон и маленькая тележка ))

1 лайк

Точно. Вот жешь блин… :smiley:

Интересно, как всё-таки компилятор матюкнулся бы (или нет)?

У него есть глобальная переменная float fli, и public переменная в классе float fli. И в рассмотренном методе тоже используется fli. Вот интересно, компилятор какую в данном случае использовать будет? ))

1 лайк

Я не понял, отвечающие пришли к единому мнению, или не. Я готов попробовать оба способа.