Тактовая кнопка и сервопривод

Тема в разделе "Закажу проект", создана пользователем goodgardener, 4 мар 2017.

  1. goodgardener

    goodgardener Нуб

    Куплю прошивку и схему подключения для ардуино нано. В чем заключается задача: при нажатии тактовой кнопки вал сервопривода поворачивается на определенное число градусов, затем, при повторном нажатии возвращается в исходное положение. Цена договорная
     
  2. mcureenab

    mcureenab Гуру

    Сервопривод не назван.
     
  3. Onkel

    Onkel Гуру

    Пишите ydom@mail. ru Сделаем. Под сервоприводом подразумеваеся сервомашинка?
     
  4. vvr

    vvr Инженерище

    такую простенькую задачу и сам смог бы решить:)
     
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    #include <Servo.h>
    #define SERVO_PIN              9     // пин, к которому подключена серва (желтый провод)
    #define BUTTON_PIN             2     // пин, к которому подключена кнопка. Второй вывод кнопки подключен к GND
    const unsigned int angle_min = 0;    // начальный угол поворота сервы
    const unsigned int angle_max = 180;  // конечный угол поворота сервы
    Servo myservo;

    void setup()
    {
      pinMode(BUTTON_PIN, INPUT_PULLUP);
    }

    void loop()
    {
      static boolean buttonReleased = true;
      if (!digitalRead(BUTTON_PIN) && buttonReleased)
      {
        myservo.attach(SERVO_PIN);  
        myservo.write(myservo.read() ? angle_min : angle_max);
        delay(500);
        myservo.detach();
      }
      buttonReleased = digitalRead(BUTTON_PIN);
    }
     
     
    ostrov нравится это.
  6. ostrov

    ostrov Гуру

    Я бы сделал ожидание факта нажатия дважды с периодом опроса, например 100 мс. Практика показывает, что кнопку ставят далеко от МК, и провода ловят помехи только так.
    Код (C++):
    void loop()
    {
      static boolean buttonReleased = true;
      if (!digitalRead(BUTTON_PIN) && !buttonReleased)
      {
        myservo.attach(SERVO_PIN);
        myservo.write(myservo.read() ? angle_min : angle_max);
        delay(500);
        myservo.detach();
      }
      buttonReleased = digitalRead(BUTTON_PIN);
      delay(100);
    }