Сервопривод начинает вращаться всякий раз, когда он подключен
Я делаю кормушку для рыбы, используя Arduino Mega 2560, сервомотор SG90 и RTC DS3231. Я хочу, чтобы он вращался дважды в день, то есть утром и в 9 часов вечера.
Всякий раз, когда я подключаю свою плату Arduino к ноутбуку в первый раз, она правильно вращается в течение указанного времени 9 часов, и я меняю время на 9 часов 10 минут, чтобы проверить еще раз, и она вращается после того, как я подключаю ее к ноутбуку на 180 градусов, а затем вращается в течение указанного времени.
Что я должен сделать, чтобы избежать этого первоначального вращения?
Вот мой код:
#include<Wire.h>
#include<LiquidCrystal.h>
#include "RTClib.h"
#include <Servo.h>
Servo myservo;
int pos = 0;
RTC_DS3231 rtc;
DateTime now;
const int OnHour = 9;
const int OnMin = 15;
void setup() {
Serial.begin(9600);
rtc.begin();
myservo.attach(9);
rtc.adjust(__DATE__,__TIME__));
}
void loop() {
now = rtc.now();
Serial.print(now.hour);
Serial.print(" hour(s), ");
Serial.print(now.min);
Serial.print(" minute(s)");
Serial.println(" ");
delay(1000);
if (now.hour == OnHour && now.min == OnMin) {
Serial.println("feeder ON");
myservo.write(90);
delay(1000);
myservo.write(180);
} else {
Serial.println("feeder OFF");
delay(10);
}
}
@user52610, 👍-1
Обсуждение1 ответ
Я не до конца понимаю проблему, но я предполагаю, что вы хотите, чтобы он работал в 9:00 / 9 утра и в 21:00 / 9 вечера в течение 15 минут.
const int onTime1 = 9 * 60 + 0; // 9:00 AM
const int onTime2 = 21 * 60 + 30; // 9:30 PM
const int onMinutes = 15; // Минут
void loop()
{
now = rtc.now();
int nowTime = now.hour * 60 + now.min; // Минут с текущего дня
if (((onTime1 <= nowTime) && (nowTime < onTime1 + onMinutes)) ||
((onTime2 <= nowTime) && (nowTime < onTime2 + onMinutes)))
{
myservo.write(90); // Вкл
}
else
{
myservo.write(180); // Выкл
}
delay(1000); // задержка 1 с
}
Вы можете упростить приведенное выше утверждение if, выполнив:
mysesrvo.write(180 - 90 * (int) (
((onTime1 <= nowTime) && (nowTime < onTime1 + onMinutes)) ||
((onTime2 <= nowTime) && (nowTime < onTime2 + onMinutes))));
- Использование аналогового входа для чтения кнопки
- Преобразование строки в массив символов
- Как синхронно управлять двумя сервоприводами?
- Бесполезная проводка коробки и код
- Почему loop() останавливается?
- Можно ли использовать цифровые контакты в качестве выхода ШИМ?
- Bluetooth-модуль HC-05 не принимает AT-команды
- RTC и SD работают отдельно, а не вместе
Подсказка: Какова начальная настройка сервопривода?, @Mikael Patel
@user52610 ... вы пробовали мое решение?, @Michel Keijzers