Я хочу, чтобы мой шаговый двигатель работал 1 час.
Я уже пробовал код, который заставляет шаговый двигатель работать всего несколько минут. Я использую модуль часов, DS1302 и уже имеющуюся библиотеку шагового двигателя. Также я использую драйвер L298n. Было бы здорово, если бы кто-то мог помочь. Спасибо.
#include <Stepper.h>
#include <virtuabotixRTC.h>
virtuabotixRTC myRTC(5, 6, 7);
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
const int OnHour = 12;
const int OnMin = 52;
const int OffHour = 12;
const int OffMin = 55;
void setup() {
Serial.begin(9600);
myStepper.setSpeed(100);
}
void loop() {
myRTC.updateTime();
Serial.print(myRTC.dayofmonth); //Вы можете переключаться между днем и месяцем, если используете американскую систему
Serial.print("/");
Serial.print(myRTC.month);
Serial.print("/");
Serial.print(myRTC.year);
Serial.print(" ");
Serial.print(myRTC.hours);
Serial.print(":");
Serial.print(myRTC.minutes);
Serial.print(":");
Serial.println(myRTC.seconds);
if (myRTC.hours >= OnHour && myRTC.minutes >= OnMin && myRTC.hours <= OffHour && myRTC.minutes < OffMin) {
Serial.print(myRTC.hours);
Serial.print(":");
Serial.print(myRTC.minutes);
Serial.print(":");
Serial.println(myRTC.seconds);
myStepper.step(stepsPerRevolution);
}
}
@alz, 👍0
1 ответ
Проблема в том, что вы обрабатываете минуты и часы отдельно. Это не сработает — их нужно объединить. В текущем виде ваше время «включения» составляет:
- Минуты больше W, и
- Часы больше X, и
- Минуты меньше Y, и
- Часов меньше, чем Z.
Или, если переставить:
- Часы между X и Z, и
- Минуты между W и Y.
Как видите, это не сработает. Вы получите «включение» только на блок минут между W и Y для каждого часа в вашем периоде «ВКЛЮЧЕНИЯ».
Например, если вы хотите ВКЛ с 9:30 до 12:45, вы получите:
- Если количество часов больше или равно 9 и меньше или равно 12, и
- Минуты больше или равны 30 и меньше или равны 45
Итак, это с 9:30 до 9:45, с 10:30 до 10:45, с 11:30 до 11:45 и с 12:30 до 12:45
Еще хуже, если вы хотите с 9:30 до 12:00... вторая часть IF выше становится:
- Минуты больше или равны 30 и меньше или равны 0.
Этого никогда не может случиться. Нет числа, которое было бы одновременно больше 30 и меньше 0.
Таким образом, вам нужно объединить два значения вместе, чтобы создать значение «минут с полуночи». Тогда ваше время включения определяется количеством минут, а не часами и минутами по отдельности. Это достаточно просто:
int minutesSinceMidnight = myRTC.hours * 60 + myRTC.minutes;
Ваше время включения тогда составит для 9:30 9 * 60 + 30 = 570, для 12:00 = 12 * 60 + 0 = 720.
Итак:
if (minutesSinceMidnight >= 570 && minutesSinceMidnight <= 720) {
// Делай шаги
}
- Степпер не работает должным образом с использованием L298N
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Как установить связь между веб-камерой и Arduino UNO и получать прямую трансляцию на мобильном телефоне с помощью ESP8266?
- L298N Dual Motor Controller Enable Pin имеет питание, но двигатели не работают
- Как питать Arduino Uno от терминала 5v драйвера двигателя L298N?
- Запустить два степпера одновременно
- L298N, HC-05 Простой автомобиль с дистанционным управлением через Bluetooth, не работающий в Arduino
- Могу ли я запретить библиотеке Stepper удерживать двигатель?