Двухосевой станочек

Станки, создание станков, обсуждения, предложения.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Двухосевой станочек

Сообщение Serg »

Скорее всего создаётся копия класса/метода, которая после выполнения уничтожается. Точнее можно сказать после изучения текста, но честно говоря неохота время тратить. :wik:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
elephant007
Мастер
Сообщения: 857
Зарегистрирован: 18 ноя 2012, 13:12
Репутация: 332
Откуда: Сибирь, Томск
Контактная информация:

Re: Двухосевой станочек

Сообщение elephant007 »

потому что ты же не объявляешь отдельно переменную pos. это функция класса. Когда создал от класса объект stX можно обратится к унаследованной им функции stX.pos. Обратится в программе, а не в объявлении функции.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Двухосевой станочек

Сообщение Nick »

UAVpilot писал(а):Скорее всего создаётся копия класса/метода, которая после выполнения уничтожается. Точнее можно сказать после изучения текста, но честно говоря неохота время тратить.
Это как?
Есть два объекта одного класса, у них есть фунукция, которая хочет поменять параметр внутри класса... и все...
Хорошо, как тогда поменять параметр объекта класса из его функции?
Как сделать get или set?
elephant007 писал(а):потому что ты же не объявляешь отдельно переменную pos. это функция класса. Когда создал от класса объект stX можно обратится к унаследованной им функции stX.pos. Обратится в программе, а не в объявлении функции.
Но функция же вызывается уже после создания объекта?
(stX.pos - это не функция, это парамерт float...)

А, точно исходники вот тут:
https://github.com/cnc-club/IC

Вот тут задается Stepper:
https://github.com/cnc-club/IC/blob/mas ... pperIC.cpp
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Двухосевой станочек

Сообщение Serg »

Похоже это ваше ардуино чудит...

tst.cc

Код: Выделить всё

#include <stdio.h>

class Stepper {
  public:
    Stepper(float ppm, int step_pin, int dir_pin, int home_pin, int homing_direction);
    int dir_inv;
    void home();
    void setSpeed(float mmin);
    int step(float mm);
    float pos;
    long steps;
    float ppm;
    float home_postion;
    int dir_pin;
    int step_pin;
    int home_pin;
    int homing_direction;
  private:
    unsigned long step_delay; // delay between steps, in ms, based on speed
    unsigned long last_step_time;

};

Stepper::Stepper(float ppm, int step_pin, int dir_pin, int home_pin, int homing_direction)
{
pos = 0;
steps = 0;
  dir_inv = 1;
  step_pin = step_pin;
  dir_pin = dir_pin;
  home_pin = home_pin;
  home_postion = 2;
  homing_direction = homing_direction;
  ppm = ppm;
//  pinMode(step_pin, OUTPUT);
//  pinMode(dir_pin, OUTPUT);
//  pinMode(home_pin, INPUT);

}

int Stepper::step(float mm)
{
  pos += mm;
  return 0;
}

void Stepper::home()
{
  pos=0;
  steps=0;
}

void Stepper::setSpeed(float mmin)
{
  step_delay = 5;
}

Stepper stX(10, 8, 7, 15, -1);

int main(void) {
	printf("pos=%f\n", stX.pos);
	stX.step(123);
	printf("pos=%f\n", stX.pos);
}

Код: Выделить всё

$ g++ tst.cc
$ ./a.out 
pos=0.000000
pos=123.000000
$
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Двухосевой станочек

Сообщение Nick »

Не, это я чудил. :freak:
Все оказалось, как ты и писал, только тогда я эту твою фразу не понял:
UAVpilot писал(а):Скорее всего создаётся копия класса/метода, которая после выполнения уничтожается.
Ненавижу Си :). У меня в функцию передавался stX, но передавался как Stepper, а не Stepper*, в итоге, создавался новый объект класса Stepper, который делал шаги, записывал изменение положения внутри себя... и благополучно удалялся :).

Блин два дня угробил, чтобы до этого дойти...
Ответить

Вернуться в «Станки»