Сервоприводы и кнопки

Тема в разделе "Глядите, что я сделал", создана пользователем Сергей_Михайлович, 31 мар 2013.

  1. Здравствуйте, задача такая. Есть два привода постоянного вращения и четыре кнопки. Пытался сам написать код, но не доконца все получется. Когда написал код для одной сервомашинки, то все работало, но когда дописал для второй, начинается дерганье обоих сервоприводов и при нажатии на кнопку вращение происходит с толчками.
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Где код-то?
     
  3. Вот собственно он для одного сервопривода
    Код (Text):
    #include <Servo.h>
    Servo servoX;
    Servo servoY;
     
    int buttonPIN1=8;
    int buttonPIN2=2;
    int buttonPIN3=4;
    int buttonPIN4=7;
    int pos=92;
    int buttonState1=0;
    int buttonState2=0;
     
    void setup()
    {
      pinMode(buttonPIN1,INPUT);
      pinMode(buttonPIN2,INPUT);
      pinMode(buttonPIN3,INPUT);
      pinMode(buttonPIN4,INPUT);
      servoX.attach(9);
      servoY.attach(5);
    }
     
    void loop()
     
    {
      servoX.write(92);
      buttonState1=digitalRead (buttonPIN1);
     
    if (buttonState1==HIGH)
    {
      servoX.write(92);
    }
    else
    {
      servoX.write(0);
    }
      buttonState2=digitalRead (buttonPIN2);
     
    if (buttonState2==HIGH)
    {
      servoX.write(92);
    }
    else
    {
      servoX.write(180);
    }
    }
     
     
  4. pasha08

    pasha08 Нерд

    Запитаны от дуни или от отдельного источника?
     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    Добавьте защиту от дребезга.
    Подавайте команды мотору не в каждом цикле, а только в моменты нажатий кнопок.
     

  6. Запитывал и так и от отдельного источника, один чёрт - дергается. (минусы не забывал соединять)

    Что за защита от дребезга?
    Я бы был очень признателен, если подправили бы код. Или еще лучше ткнули носом в код где это реализовано. Сам только начинаю и за плечами технарские, институтские курсы написания программ в Паскале, хотя я не програмист

     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    Вот статья о дребезге и о том, как с ним бороться.

    Теперь по коду. У Вас в каждом вызове loop() опрашивается кнопка и выполняются некие действия. Причем эти действия выполняются каждый раз, хотя мы хотим выполнять их только по факту нажатия кнопки, т.е. по переходу сигнала с кнопки из одного состояние в другое.

    Правильно было бы написать так:
    Код (Text):
    // если состояние кнопки изменилось
    if(bouncer.update())
    {
      // если кнопку нажали
      if(bouncer.read() == HIGH)
      {
      }
      // если кнопку отпустили
      else
      {
      }
    }
     
  8. 3eHuT4uK

    3eHuT4uK Нуб

    получается else остается пустым ??
     
  9. Daniil

    Daniil Гуру

    На 6 лет опаздали(
     
  10. 3eHuT4uK

    3eHuT4uK Нуб

    я не опаздывал, я только начинаю
     
  11. parovoZZ

    parovoZZ Гуру

    а что в этом такого?
     
  12. 3eHuT4uK

    3eHuT4uK Нуб

    ничего такого, просто может не понимаю до конца...
     
  13. Может вы учебник какой найдете, вместо того, чтобы пытаться изучить программирование по каким-то обрывкам с форумов без объяснений?
     
    DetSimen и Daniil нравится это.
  14. 3eHuT4uK

    3eHuT4uK Нуб

    учебник есть по ардуино, но там не расписано так глубоко
     
  15. 3eHuT4uK

    3eHuT4uK Нуб

    а если это делать для джойстика, как это будет выглядеть ??
     
  16. parovoZZ

    parovoZZ Гуру

    ардуино - это не язык, а фреймворк. Учебник нужен по Си или Си++.
     
  17. Daniil

    Daniil Гуру

    Вот хорошая книга по С.