Кнопка + сервомотор

Тема в разделе "Arduino & Shields", создана пользователем ID0709, 21 янв 2021.

  1. ID0709

    ID0709 Нуб

    Добрый день форумчане! Помогите немного.
    Есть Ардуин, кнопка и сервомотор. Должно быть: сервомотор вращается пока нажата кнопка. По факту серва начинает вращаться при нажатии на кнопку.
    У меня скетч такой:
    Код (C++):
    #include <Servo.h>//подключаем библиотеку для работы с сервомотором
    Servo myservo;//создаем переменную-объект для управления сервомотором
    int pos = 0;//переменная для хранения угла поворота сервомотора

    void setup()
    {
      pinMode(2, INPUT_PULLUP);
      myservo.attach(5);// назначаем управляющий пин для сервомотора(номер 5)
    }
    void loop()
    {
    int sensorVal = digitalRead(2);
    if (digitalRead(sensorVal) == HIGH)
    {
      for(pos=0; pos<=180; pos ++)//делаем цикл от 0 до 180 с шагом 1
       {
        myservo.write(pos);// поворачиваем сервомотор на позицию pos
        delay(15);//ждем 15 мс, чтобы сервомотор достиг позиции
       }
      for(pos = 180; pos>=0; pos --)
       {        
        myservo.write(pos);
        delay(15);
       }
    }
      else
      {
      myservo.write(LOW);
      }
    }
     
  2. Рокки1945

    Рокки1945 Гуру

    while-m - единым жив человек
     
  3. ID0709

    ID0709 Нуб

    А можно немного по подробнее), буду очень благодарен если отредактируете код
     
  4. Рокки1945

    Рокки1945 Гуру

    у вас if будет продолжаться пока не отработает - а если надо выйти по состоянию входа (тобишь раньше), то это надо предусмотреть в for - опросив кнопку и сделать break
    хотите нажав кнопку выставить нужный поворот серво - а потом как - ведь pos опять равен 0 при следующем заходе?
    pos = old_pos
    а потом перед break old_pos = pos
     
  5. a1000

    a1000 Гуру

    Что-то я как-то не совсем понял. Судя по коду кнопка у вас подключена к пину 2, который вы подтягиваете к питанию
    Код (C++):
    pinMode(2, INPUT_PULLUP);
    Но что вы делаете в этих двух строках?
    Код (C++):
    int sensorVal = digitalRead(2);
    if (digitalRead(sensorVal) == HIGH)
     
    Жорка и b707 нравится это.