Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

vvr
2017-05-15 10:24:42

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

Roman321
2017-05-15 09:56:47

Власне у мене не виходить об'єднати два робочі скетчі в один. По задумці має бути фотостіл з поворотом на певну кількість кроків з заданою швидкістю і прискоренням, затримка, активація затвору фотоапарату через ІК передавач і повтор циклу.

Мій об'єднаний скетч. Мотор відпрацьовує поворот, але без прискорення, без врахування заданої швидкості і затвор не спрацьовує.

#include <AccelStepper.h>
#include <MultiStepper.h>
#include <IRremote.h>
#include <IRremoteInt.h>

AccelStepper Stepper1(1,13,12); //использует пин 12 и 13 для dir и step, 1 - режим "external driver" (A4988)

int dir = 1; //используется для смены направления
int RECEIVE_PIN = 3;// Объявляем новую переменную
IRrecv irrecv(RECEIVE_PIN);
decode_results results;
IRsend irsend;

void setup() {

Stepper1.setMaxSpeed(3000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)

Stepper1.setAcceleration(1000); //устанавливаем ускорение (шагов/секунду^2)

//Serial.begin(9600);// Активируем Serial-соединение
   //irrecv.enableIRIn();
}

void loop() {if(Stepper1.distanceToGo()==0){ //проверка, отработал ли двигатель предыдущее движение

Stepper1.move(133*dir); //устанавливает следующее перемещение на 1600 шагов (если dir равен -1 будет перемещаться -1600 -> противоположное направление)

dir = dir*(1); //отрицательное значение dir, благодаря чему реализуется вращение в противоположном направлении

delay(5000); //задержка на 5 секунду

}
 
{Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя
}
//{
// if (irrecv.decode(&results)) // Если данные пришли 
// {
//  Serial.println(results.value, HEX); // Отправляем полученную данную в консоль
//  irrecv.resume(); // Принимаем следующую команду
//  } 
  {
  for (int i = 0; i < 3; i++) {
    irsend.sendSony(0xB4B8F, 20);
    delay(40);
  }
 
}
}

Підвал форуму