Могу ли я настроить код, в котором у меня может быть два способа включения чего-либо?
Я новичок в 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);
}
}
@Josh, 👍-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);
}
Сприггси
- Данные DHT11 из Arduino UNO в Firebase через ESP8266
- Объяснение кода MPU6050
- Как я могу прервать задержку() при нажатии кнопки?
- Проблема с открытием нескольких текстовых файлов одновременно/по порядку с использованием <SD.h>
- Как остановить серводвигатель в текущем положении при использовании последовательного порта? Я хочу, чтобы он оставался в одном положении при получении «0».
- Как установить управляющий регистр в модуле RTC DS3231 для Arduino UNO R3?
- Как повторить другое действие внутри цикла?
- Клиент веб-сокета Arduino CC3000
Да, ты можешь. Вам просто нужно изменить свое мышление с «Кнопка нажата» на «Кнопка *была* нажата»., @Majenko
вы должны понимать, что управление сервоприводом, обнаружение нажатия кнопки и обнаружение звука - все это совершенно разные функции..... вы можете иметь логическую переменную
moveThatServo
.... если переменная имеет значениеtrue
, то сервопривод перемещается, и если это «false», то сервопривод останавливается ..... у вас может быть несколько кнопок, некоторые устанавливают «moveThatServo» на «true», а некоторые устанавливают на «false» .... вы можете иметь звуковой детектор, который устанавливает дляmoveThatServo
значениеtrue
...... вы можете написать функцию таймера, которая делает то же самое ..... просто используйте свое воображение, @jsotola