Могу ли я настроить код, в котором у меня может быть два способа включения чего-либо?

Я новичок в Arduino.

С помощью множества руководств на YouTube я создал код для управления сервоприводом с помощью кнопки. Я решил, что это стало немного неинтересно, поэтому я попытался добавить к нему модуль звукового датчика, чтобы, если вы хлопаете или что-то еще, он управлял сервоприводом так же, как сервопривод. Можно ли управлять сервоприводом с помощью кнопки и звукового датчика, чтобы у меня были способы включить сервопривод одновременно.

Код, который у меня сейчас есть, просто постоянно запускает сервопривод и не останавливается. Вы, вероятно, поймете, что я имею в виду, когда я прикреплю код ниже. Я просто ищу помощи по этому вопросу, так как у меня нет большого опыта в этом, но я предполагаю, что это невозможно.

    #include <Servo.h>;

    const int buttonPin = 8;
    int soundSensor = 2;
    Servo servo;

    int buttonState = 0;

    void setup()
    {
      servo.attach(3);
      servo.write(80);

      pinMode(buttonPin, INPUT);

      pinMode (soundSensor, INPUT);
    }


    void loop() {
      int statusSensor = digitalRead (soundSensor);

      if (statusSensor == 1)
      {
        servo.write(0);
        delay(1000);
        servo.write(180);
        delay(500);
      }
      else
      {
        servo.write(80);
      }

      buttonState = digitalRead(buttonPin);
      if (buttonState == HIGH)
      {
        servo.write(80);
      }
      if (buttonState == LOW)
      {
        servo.write(0);
        delay(1000);
        servo.write(180);
        delay(500);
      }
    }

, 👍-1

Обсуждение

Да, ты можешь. Вам просто нужно изменить свое мышление с «Кнопка нажата» на «Кнопка *была* нажата»., @Majenko

вы должны понимать, что управление сервоприводом, обнаружение нажатия кнопки и обнаружение звука - все это совершенно разные функции..... вы можете иметь логическую переменную moveThatServo.... если переменная имеет значение true, то сервопривод перемещается, и если это «false», то сервопривод останавливается ..... у вас может быть несколько кнопок, некоторые устанавливают «moveThatServo» на «true», а некоторые устанавливают на «false» .... вы можете иметь звуковой детектор, который устанавливает для moveThatServo значение true ...... вы можете написать функцию таймера, которая делает то же самое ..... просто используйте свое воображение, @jsotola


1 ответ


1

Просто собрал это воедино, не проверено, но должно дать вам несколько советов в правильном направлении.

В основном цикле проверяется состояние кнопки, а также детектора звука. Если любой из них активен, он устанавливает логическое значение в true. в конце цикла, если они истинны, вызывается функция сервопривода, которая затем включает сервопривод. надеюсь, вы сможете разделить это, чтобы добавить больше триггеров

#include <Servo.h>;

const int buttonPin = 8;
int soundSensor = 2;
Servo servo;

int buttonState = 0;
int statusSensor = 0;

bool runServo = false;  // логическое значение для запуска сервопривода

void setup()
{
  servo.attach(3);
  servo.write(80);

  pinMode(buttonPin, INPUT);
  pinMode (soundSensor, INPUT);
}

void loop() {
  statusSensor = digitalRead (soundSensor);
  buttonState = digitalRead(buttonPin);

    runServo = false;  // начало цикла сброс флага runServo

  if (statusSensor == 1)
  {
    runServo = true;
  }

  if (buttonState == HIGH)
  {
    runServo = true
  }

  if (runServo == true)
  {
    servoFunction();//вызов кода servoFunction
  }

};


void servoFunction(){
    servo.write(0);
    delay(1000);
    servo.write(180);
    delay(500);

}      

Сприггси

,