Я веб-разработчик, и я впервые пишу код для Arduino, поэтому я не могу выразить себя очень ясно, но я попробую.
Я пытаюсь сделать это:
- контакты 8 и 9 соприкасаются, и сервопривод переходит из положения A в положение B
- после задержки в 5000 мс, сервопривод возвращается в положение A
Это отлично работает.Однако я пытаюсь ввести еще одно условие для сервопривода.Я хочу постоянно читать val
(analogueRead
из potpin
) и, если он ниже 500, я хочу, чтобы сервопривод возвращался из положения B в положение A, но только временно, пока val
не вернется к>499 (все в интервале 5000 мс).
Я легко могу достичь того или другого, но у меня возникают трудности с совместным использованием этих двух функций.В приведенном ниже коде все отлично работает для интервала.Я подключаю контакты, сервопривод переходит в положение B, но когда меняется val
(я знаю, что он изменился, потому что я пытался распечатать значения на мониторе), этого не происходит.После первой переоценки loop
она начинает работать, и сервопривод реагирует на изменение val
, но затем это портит интервал в 5000 мс, и сервопривод не возвращается в положение A. В конце.
Это мой код:
#include <Servo.h>
Servo myservo;
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
Serial.begin(9600);
pinMode(8, INPUT_PULLUP); //pin 8 forced to HIGH when there is no external input
myservo.attach(9); //attaches the servo on pin 9 to the servo object
myservo.write(60); //tells servo to go to 60 degree position
}
void loop()
{
while(digitalRead(8) == HIGH)
{
val = analogRead(potpin);
if (val > 499) {
myservo.write(60);
} else {
myservo.write(150);
}
}
myservo.write(150);
delay(5000);
}
Я предполагаю, что мой подход просто неверен, но, как я уже сказал, это моя первая встреча с Arduino.