Работа с копиями объектов. Допустима ли такая запись?

Densl
Offline
Зарегистрирован: 28.11.2018

Есть функция управления двигателями. Правильно я объект копирую а потом использую? Сколько не читаю книг, ни как не запомню как пользоваться ссылками...

#include <AccelStepper.h>


....
AccelStepper AS_Right_Leg(AccelStepper::FULL2WIRE, RightLegDirPin, RightLegStepPin);
AccelStepper AS_Left_Leg(AccelStepper::FULL2WIRE, LeftLegDirPin, LeftLegStepPin);
...

void loop()
{
  Rotate(AS_Right_Leg,'2',0);
]


bool Rotate(AccelStepper &myStepper, char rotating, int param)
{
  AccelStepper *motor;
  motor = &myStepper;

  switch (rotating)
  {
    case '1':
      break;
    case '2':
      motor->setMaxSpeed(6000);
      motor->setAcceleration(5000);
      break;
  }
motor->run();
}

 

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

Никакого копирования объекта тут нет. Я вижу копирование указателя с неясной целью. С тем же успехом можно делать myStepper.run().

Densl
Offline
Зарегистрирован: 28.11.2018

Ну мне важен сам принцип. На самом деле окончательный код будет немного другим.

void loop()
{
  Rotate(AS_Right_Leg,'2',0);
]
 
 
bool Rotate(char rotating, int param)
{
  AccelStepper *motor;

 
  switch (rotating)
  {
    case '1':
      break;
    case '2':
      motor = &AS_Right_Leg;
      motor->setMaxSpeed(6000);
      motor->setAcceleration(5000);
      break;
  }
motor->run();
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Вапще хрень какая то. 

Morroc
Offline
Зарегистрирован: 24.10.2016

Densl пишет:
Ну мне важен сам принцип

Что сделать то хотите ?

Densl
Offline
Зарегистрирован: 28.11.2018

В общем история такая. Есть клавиатура с n-клавишами и m шаговых приводов. Нужно чтобы с кнопок этой клавиатуры запускать M[I] привод по или против часовой стрелке.

Densl
Offline
Зарегистрирован: 28.11.2018

Клавиатура с логикой 4х4

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Densl,да фигня вопрос. Другое дело что у Ваши "программистские мускулы" никуда не годятся.Да и базовые знания маловаты. Вот в этом у Вас затык.

Morroc
Offline
Зарегистрирован: 24.10.2016

Densl пишет:
В общем история такая. Есть клавиатура с n-клавишами и m шаговых приводов. Нужно чтобы с кнопок этой клавиатуры запускать M[I] привод по или против часовой стрелке.

Какое нибудь такое рукожопство подойдет ? (я фиг знает... не пробовал так)

AccelStepper *m[4];  

bool Rotate(int num, char rotating, int param)
{
 m[num]->setMaxSpeed(...
 m[num]->setAcceleration(...
 ...
 m[num]->run();
}

voide setup()
{
m[0] = new AccelStepper(AccelStepper::FULL2WIRE, ...
m[1] = new AccelStepper(AccelStepper::FULL2WIRE, ...
m[2] = new AccelStepper(AccelStepper::FULL2WIRE, ...
m[3] = new AccelStepper(AccelStepper::FULL2WIRE, ...
}

 

Densl
Offline
Зарегистрирован: 28.11.2018

Morroc пишет:

Densl пишет:
В общем история такая. Есть клавиатура с n-клавишами и m шаговых приводов. Нужно чтобы с кнопок этой клавиатуры запускать M[I] привод по или против часовой стрелке.

Какое нибудь такое рукожопство подойдет ? (я фиг знает... не пробовал так)

AccelStepper *m[4];  

bool Rotate(int num, char rotating, int param)
{
 m[num]->setMaxSpeed(...
 m[num]->setAcceleration(...
 ...
 m[num]->run();
}

voide setup()
{
m[0] = new AccelStepper(AccelStepper::FULL2WIRE, ...
m[1] = new AccelStepper(AccelStepper::FULL2WIRE, ...
m[2] = new AccelStepper(AccelStepper::FULL2WIRE, ...
m[3] = new AccelStepper(AccelStepper::FULL2WIRE, ...
}

 


Спасибо большое! Вы прям чувствуется что на ты с классами)