Верните направляющую для укладки фотографий в начало

В изоляции (73 года) и пытаюсь вернуть мою направляющую для укладки макрофотографий в исходное положение без концевого выключателя. Я знаю количество пройденных шагов, так что это просто вопрос реверсирования двигателя. Мой код (скопированный и вставленный с других сайтов) работает как сон (10 шагов, запуск триггера ИК-камеры) и продолжается до тех пор, пока я не захочу вернуться (строка 73), сделав 100 снимков или шагов, сколько я хочу - нет проблем.

Я запустил цикл возврата пустоты (и прервал цикл), но код меня поразил. Я прикрепил свой код (может выглядеть ужасно, но он работает). Может ли кто-нибудь помочь этому старику и дать мне код для 1000 шагов против часовой стрелки?

Спасибо, ребята Дэвид

[code]
#include <AccelStepper.h>
#include <MultiStepper.h>


int smDirectionPin = 2; //Направляющий штифт
int smStepPin = 3; //Шаговый штифт
int Distance = 0; // записывает количество пройденных нами шагов
byte numRepeats = 0;
byte maxRepeats = 100;
int smFirePin = 13;  // Триггерный штифт
#define fire 13 

 void setup(){
  /*Sets all pin to output; the microcontroller will send them(the pins) bits, it will not expect to receive any bits from thiese pins.*/
  pinMode(2, OUTPUT);  //Указатель направления
  pinMode(3, OUTPUT);  //Шаговый пин
  pinMode(13, OUTPUT);  // светодиодный контакт
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(13,LOW);
  pinMode(smDirectionPin, OUTPUT);
  pinMode(smStepPin, OUTPUT);

  Serial.begin(9600); //Открываем последовательное соединение для отладки
} 

void loop(){
   if (numRepeats < maxRepeats) {
   move1Step();  
   Distance = Distance + 1; //запишите этот шаг, чтобы увидеть, подошли ли мы к концу нашего хода

  if (Distance == 10)
  {
 if (digitalRead(2) == LOW)
 {
  digitalWrite(2 , LOW);
 }
 else
 {
  digitalWrite(2, LOW);
 }
 Distance = 0;
 numRepeats ++;
 delay(3000);
{
    trigger();
}
   }
 }
}
void move1Step() {
  digitalWrite(3, HIGH);
  delayMicroseconds(750);
  digitalWrite(3, LOW);
  delayMicroseconds(750);
}
// Включите цепь ИК-триггера, чтобы запустить камеру
void trigger()
{
    delay(1000); // ждем, пока уляжется вибрация
    digitalWrite(fire, HIGH); // сделать снимок
    delay(2000); // ждем, пока это произойдет
    digitalWrite(fire, LOW); // снова отключаем ИК-цепь
}

// Вперед двигатель на один шаг
void step()
{
  digitalWrite(step, HIGH); //Активировать на один шаг вперед
  delay(1);
  digitalWrite(step, LOW); // Потяните ступенчатый штифт в низкий уровень, чтобы его можно было запустить снова
  delay(1);
}

  void return();

{
  digitalWrite(smDirectionPin, HIGH); 
  /*Slowly turns the motor 1600 steps*/
  for (int i = 0; i <200; i++){
    digitalWrite(smStepPin, HIGH);
    delayMicroseconds(700);
    digitalWrite(smStepPin, LOW);
    delayMicroseconds(700);
  }

  while(1) { }        
}





[/code]

, 👍0

Обсуждение

такой код не имеет смысла... if (digitalRead(2) == LOW) { digitalWrite(2, LOW); } иначе { digitalWrite(2, LOW); } ... весь этот блок можно заменить на digitalWrite(2, LOW);, @jsotola

return — это зарезервированное слово, поэтому вам следует переименовать функцию, например, в returnHome. Вам также необходимо удалить ; в конце этой строки кода., @Gerben

Плюс ваш отступ - беспорядок. Выберите стиль отступа, а затем неукоснительно следуйте ему. Так как код довольно трудно читать., @Duncan C

Gerben предоставил решение, ваше замечание было принято к сведению, спасибо, @Tazdave


1 ответ


Лучший ответ:

0

Я немного подчистил ваш код. Удалены повторяющиеся и неиспользуемые коды. Я использовал цикл for, чтобы выполнить 100 повторений.

Не стесняйтесь, дайте мне знать, если у вас возникнут дополнительные вопросы или что-то неясно.

// Вы не используете эти библиотеки, поэтому я их закомментировал
//#include <AccelStepper.h>
//#include <MultiStepper.h>


int smDirectionPin = 2; //Направляющий штифт
int smStepPin = 3; //Шаговый штифт
int smFirePin = 13;  // Триггерный штифт

byte maxRepeats = 100;

void setup()
{
  /*Sets all pin to output; the microcontroller will send them(the pins) bits, it will not expect to receive any bits from thiese pins.*/
  pinMode(smDirectionPin, OUTPUT);  //Указатель направления
  pinMode(smStepPin, OUTPUT);  //Шаговый пин
  pinMode(smFirePin, OUTPUT);  // Файр контакт
  digitalWrite(smDirectionPin, LOW);
  digitalWrite(smStepPin, LOW);
  digitalWrite(smFirePin,LOW);

  Serial.begin(9600); //Открываем последовательное соединение для отладки
} 

void loop()
{
  digitalWrite(smDirectionPin, LOW); // настроить шаговый двигатель на движение вперед

  for( byte i=0; i<maxRepeats; i++ ) // выполнить следующий раздел 100 раз
  {
    // переходим на 10 шагов вперед
    for( byte j=0; j<10; j++ )
    {
      move1Step();  
    }

    // ждем и делаем фото
    delay(3000);// в функции `trigger` уже есть задержка, так что этот лайк можно убрать
    trigger();
  }


  // вернуть шаговый двигатель в исходное положение
  digitalWrite(smDirectionPin, HIGH); // устанавливаем шаговый двигатель для работы в обратном направлении
  for( byte i=0; i<maxRepeats; i++ ) // выполнить следующий раздел 100 раз
  {
    // переходим на 10 шагов назад
    for( byte j=0; j<10; j++ )
    {
      move1Step();  
    }
  }

  // Ничего не делать
  while(1){ }
}

void move1Step()
{
  digitalWrite(smStepPin, HIGH);
  delayMicroseconds(750);
  digitalWrite(smStepPin, LOW);
  delayMicroseconds(750);
}

// Включите цепь ИК-триггера, чтобы запустить камеру
void trigger()
{
    delay(1000); // ждем, пока уляжется вибрация
    digitalWrite(smFirePin, HIGH); // сделать снимок
    delay(2000); // ждем, пока это произойдет
    digitalWrite(smFirePin, LOW); // снова отключаем ИК-цепь
}
,

Gerben, последую вашему совету по удалению задержки, вы должны опубликовать это, многие в микрофотографии будут благодарны, работает как шарм. Фантастика., @Tazdave

Если вы удалите задержку, возможно, вам придется увеличить задержку (1000). В настоящее время он ждет 4 секунды, чтобы предотвратить любое движение от вибрации. Вы должны увидеть, насколько короткими могут быть значения, или просто быть немного терпеливее. Рад, что это помогло вам., @Gerben