Подача припоя

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем yuramotor, 17 окт 2018.

  1. yuramotor

    yuramotor Нуб

    Всем привет, в мне проблема с реализацией включения шагового двигателя с кнопки. Задача состоит в том, чтобы при нажиме кнопки сработал реле прошло 2 секунды и сработал мотор, сделал 200 шагов и остановился. При следующем нажатия кнопки тоже самое.
    Я уже реализовал реле и время когда должен включится мотор. Вот как задать 200 шагов через Step / Дир вот в чем проблема. Может есть какие-то варианты запуска двигателя с кнопки. Буду благодарен.

    Код (C++):

    unsigned long mill;


    const byte btnPin =/*пин*/A0;
    bool btn;
    const byte relePin =/*пин*/3;
    bool Rele;

    unsigned long past;

    const unsigned long time1sec = 2000;

    unsigned long eventTime=0;


    void setup() {
      pinMode(btnPin, INPUT_PULLUP);
      pinMode(relePin, OUTPUT);

      digitalWrite(relePin, Rele = 0);

    }
    void loop() {
      mill = millis();

      btn = digitalRead(btnPin);
      if (!btn) { /* если кнопка нажата*/
        digitalWrite(relePin, Rele = 1); /*то вкл реле*/
        past = mill;
       
        }
      if (Rele & mill - past >= time1sec) {/*если реле вкл больше 1 сек*/
        digitalWrite(relePin, Rele = 0);/*то выкл*/
      past = mill;
       eventTime=0;
      }
     
       if(!btn) eventTime=millis(); // засекли когда произошло событие

      if(eventTime && (millis()-eventTime>2000)) // проверям прошло ли XXXX миллесекунд с события
          {
         
           // как поместить сюда мотор

      }
     
    }
     
  2. yuramotor

    yuramotor Нуб

    Код (C++):
    /**/
    unsigned long mill;
    unsigned long mill2;
    //--------------------------------------
    const byte btnPin =/*пин*/A0;
    bool btn;
    const byte ledPin =/*пин*/3;
    bool Led;
    const byte ledPin1 =/*пин*/5;
    bool Led1;
    unsigned long past;
    unsigned long past2;
    const unsigned long time1sec = 2000;
    const unsigned long time2sec = 2000;
    const unsigned long time3sec = 10;
    unsigned long eventTime=0;

    int stp = 13; //подключите 13 пин к step
    int dir = 12; //подключите 12 пин к dir
    int a = 0;

    void setup() {
      pinMode(btnPin, INPUT_PULLUP);
      pinMode(ledPin, OUTPUT);
      pinMode(ledPin1, OUTPUT);
      digitalWrite(ledPin, Led = 1);
      digitalWrite(ledPin1, Led1 = 1);

      pinMode(stp, OUTPUT);

       pinMode(dir, OUTPUT);
    }
    void loop() {
      mill = millis();
      btn = digitalRead(btnPin);
      if (!btn) { /* если кнопка нажата*/
        digitalWrite(ledPin, Led = 0); /*то вкл светодиод*/
        past = mill;
        }
      if (Led1 & mill - past >= time1sec) {/*если светодиод горит больше 1 сек*/
        digitalWrite(ledPin, Led = 1);/*то выкл*/
      past = mill;
      }
     
      //-----------------------------------------------------------
      if(!btn) eventTime=millis(); // засекли когда произошло событие

    if(eventTime && (millis()-eventTime>2000)) // проверям прошло ли XXXX миллесекунд с события
      {
        if (a < 200) // вращение на 200 шагов в направлении 1
               {
                 a++;
                 digitalWrite(stp, HIGH);
                 time3sec;
                 digitalWrite(stp, LOW);
                 time3sec;
                   }
            else { digitalWrite(dir, HIGH);
                    a++;
                    digitalWrite(stp, HIGH);
                    time3sec;
                    digitalWrite(stp, LOW);
                    time3sec;
             }
             if (btn)
             { /* если кнопка нажата*/
              digitalWrite(stp, LOW);
              a = 0;
            }
        }
    }
    от переделал
     
  3. yuramotor

    yuramotor Нуб

    Добрый вечер, Вот добился таких успехов, при первом нажатии на кнопку срабатывает реле через 3 секунды двигатель делает 100 шагов и реле отключается. Но при следующем нажатия кнопки реле срабатывает, а двигатель не реагирует. Как сделать чтобы повторялось вновь и вновь
    Код (C++):
    #include <AccelStepper.h>
    AccelStepper Stepper1(1,13,12);

         unsigned long mill;
         const byte btnPin = A0;
         bool btn;
         const byte relePin = 5;
         bool Myrele;
         unsigned long past;
         const unsigned long time1sec = 3000;
         unsigned long eventTime=0;

    void setup() {
     
          Stepper1.setMaxSpeed(3000);
          Stepper1.setAcceleration(1300);
         
          pinMode(btnPin, INPUT_PULLUP);
          pinMode(relePin, OUTPUT);
          digitalWrite(relePin, Myrele = 0);
         
    }

    void loop() {
     
           mill = millis();
            btn = digitalRead(btnPin);
           
            if (!btn) { /* если кнопка нажата*/
         
            digitalWrite(relePin, Myrele = 1); /*то вкл реле*/
            past = mill;
       }
          if (Myrele & mill - past >= time1sec) {/*если реле вкл больше 1 сек*/
           digitalWrite(relePin, Myrele = 0);/*то выкл*/
           past = mill;
       }

          if(!btn) eventTime=millis(); // засекли когда произошло событие
          if(eventTime && (millis()-eventTime>2000)) // проверям прошло ли XXXX миллесекунд с события
      {
         Stepper1.runSpeed();
         Stepper1.moveTo(100);
       
         while(Stepper1.currentPosition() != 100)
         Stepper1.run();
      }
    }