Управлять двигателем с помощью кнопки
Код:
int motorPin = 9; // контакт, к которому подключен двигатель
void setup()
{
pinMode(motorPin, OUTPUT);
}
void loop()
{
motorOnThenOff(); //Ускорение двигателя
}
void motorOnThenOff(){
int onTime = 2500; //количество миллисекунд, на которые включается двигатель
int offTime = 1000; //количество миллисекунд, на которые двигатель должен выключиться
digitalWrite(motorPin, HIGH); // включает двигатель
delay(onTime); // ждет onTime миллисекунд
digitalWrite(motorPin, LOW); // выключает мотор
delay(offTime); // ждет offTime миллисекунд
}
void motorOnThenOffWithSpeed(){
int onSpeed = 200; // число от 0 (остановлен) до 255 (полная скорость)
int onTime = 2500; //количество миллисекунд, на которые включается двигатель
int offSpeed = 50; // число от 0 (остановлено) до 255 (полная скорость)
int offTime = 1000; //количество миллисекунд, на которые двигатель должен выключиться
analogWrite(motorPin, onSpeed); // включает двигатель
delay(onTime); // ждет onTime миллисекунд
analogWrite(motorPin, offSpeed); // выключает мотор
delay(offTime); // ждет offTime миллисекунд
}
void motorAcceleration(){
int delayTime = 50; //миллисекунды между каждым шагом скорости
//Ускоряет мотор
for(int i = 0; i < 256; i++){ //проходит через каждую скорость от 0 до 255
analogWrite(motorPin, i); //устанавливает новую скорость
delay(delayTime); // ждет delayTime миллисекунд
}
//Замедляет двигатель
for(int i = 255; i >= 0; i--){ //проходит каждую скорость от 255 до 0
analogWrite(motorPin, i); //устанавливает новую скорость
delay(delayTime); // ждет delayTime миллисекунд
}
}
Этот код вращает мотор. В схеме есть кнопка, которой я хочу переключать вращение мотора.
Вот схема:
https://circuits.io/circuits/4267039-spin-motor-spin/edit
Как сделать так, чтобы кнопка переключала вращение двигателя? Как вентилятор и его выключатель?
@Utsav, 👍1
1 ответ
Лучший ответ:
▲ 1
добавьте эту переменную в начало вашей программы:
const int buttonPin = XX; // пин для кнопки
bool bState = false;
в функции setup():
pinMode(buttonPin, INPUT_PULLUP);
// если INPUT_PULLUP не определен, закомментируйте строку выше и раскомментируйте строку ниже
//pinMode(buttonPin, INPUT);
//digitalWrite(buttonPin, HIGH); // включить внутреннюю подтяжку
в функции loop() измените свой код следующим образом:
update_bState();
if (bState) { digitalWrite(motorPin, HIGH); }
else { digitalWrite(motorPin, LOW); }
затем в конце вашей программы добавьте функцию getButton:
void update_bState(void)
{
static bool buttonDone = false;
static uint16_t timeButton;
if (!digitalRead(buttonPin))
{
if ((!buttonDone) && ((uint16_t) (millis() - timeButton) > 100))
{ // Выполняется один раз, когда кнопка нажата не менее 100 мс (устранение дребезга)
bState ^= true; // Переключить состояние кнопки
buttonDone = true;
}
}
else
{
buttonDone = false;
timeButton = millis();
}
}
Теперь, когда вся работа сделана, вам следует добавить ускорение при запуске и замедление при запуске и остановке :D
Кстати, я не тестировал код, так что могут быть опечатки...
,
@SMFSW
Смотрите также:
- Серводвигатель И кнопка
- Построение последователя строки и продолжайте получать ошибки просто нужна помощь в правильном направлении, чтобы закончить ошибку кода, расположенную внизу
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Определение того, была ли нажата и отпущена кнопка
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Хорошая кнопка debouncing/Библиотека StateChange
- Как заставить сервопривод вращаться на угол больше 180°