Stepper в массиве
- Войдите на сайт для отправки комментариев
Втр, 07/04/2015 - 13:14
Здравствуйте. Ардуино управляет тремя шд.
Stepper myStepper1(stepsPerRevolution, 2, 3, 4, 5);
Stepper myStepper2(stepsPerRevolution, 6, 7, 8, 9);
Stepper myStepper3(stepsPerRevolution, 10,11,12,13);
Есть ли способ их объединить в массив? ( Stepper myStepper[i] )
Так как я в скобках написал - не работает.
Без модификации библиотеки нельзя.
там всего 2 конструктора.
Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2);
Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4);
Если дописать 3-й
Stepper();
и отдельные функции инициализации StepperInit2(int number_of_steps, int motor_pin_1, int motor_pin_2) и StepperInit4(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4), то можно.
Спасибо, пока оставлю код без изменений. В классах еще не силен.
Если очень надо, могу сделать. Дело на 10 минут.
Т.к. в IDE библиотеки могут обновляться, а у меня IDE не самой последней версии - выложи свою библиотеку Stepper.
У меня находится по адресу C:\Program Files (x86)\Arduino\libraries\Stepper
Где тут проблемма ?
Интересный подход. :)
Работать с объектами через массив указателей, а не через массив объектов.
Теперь главное не запутаться со звездочками. :)
Это подход истинного программиста микропроцессоров :) А путаться тут не в чем. Если хочется красоты используйте дефайны :) А вот ковырять стандартные библиотеки - моветон. Надеюсь объяснять почему не нужно ?
Кстати, а как по вашему выглядит массив объектов ? Правильно это указатели, а типизированы они только для компилятора и для мозга программера. Так что таким приемом, вы не только упрощаете себе жизнь, но и экономите флеш.
Brokly, спасибо. Это то, что нужно.
Если хочется без звёздочек - могу ещё посоветовать массив ссылок. :)
Я переоценил свои возможности в программировании, пока почитаю литературу по передаче указатклей в функции.
Если сложно понимается можно просто объявить массив указателей глобально, как в моем примере, а в функцию передавать просто индекс элемента :)
void MoveSM(long x, long y, long z, Stepper* mySteppers)
{
...
(*mySteppers[i]).step(1);
}
void loop(){
...
MoveSM(c[0],c[1],c[2], mySteppers);
}
так правильно?
А еще можно вот так. Выбирайте любой вариант, это ж си... Но предъидущий займет меньше места.