ARDUINO Управление шаговым двигателем с помощью ИК-пулта

OlegCAXAR

✩✩✩✩✩✩✩
16 Янв 2026
1
0
Я использую Arduino mega, драйвер TB6600 V2.1, двигатель Nemo23.
Я написал код для проверки ИК-пульта (приведен ниже), где я смог считать коды через COM-порт, которые поступают на Arduino при нажатии клавиши.

#include "IRremote.h"

IRrecv irecv(2);

decode_results results;

void setup () {
Serial.begin(9600);
irecv.enableIRIn();
}
void loop() {
if (irecv.decode(&results)){
Serial.println(results.value);
irecv.resume();
}
}

Соответственно, когда выявил кодировку сигналов, я написал код для управления шаговым двигателем (нажатие одной кнопки - вращение в одну сторону, нажатие другой - в другую сторону), однако я не понимаю по какой причине, но при нажатии кнопки никакого движения не происходит.

#include "IRremote.h"

IRrecv irrecv(2); // порт подключения ИК-датчика
decode_results results;

const int motor_1_en_pin = 23;
const int motor_1_dir_pin = 25;
const int motor_1_step_pin = 27;

void setup() {
pinMode(motor_1_en_pin, OUTPUT); //output - сигналы исходящии от радуино, input - наоборот
pinMode(motor_1_dir_pin, OUTPUT);
pinMode(motor_1_step_pin, OUTPUT);

digitalWrite(motor_1_en_pin, LOW); //high сигнал логической 1, low сигнал логического 0
digitalWrite(motor_1_dir_pin, HIGH);

Serial.begin(9600); //скорость передачи данных в бит/с
irrecv.enableIRIn(); //вкл. приема с ИК-датчика
}

void loop () {
if (irrecv.decode(&results)) {
switch (results.value) {

case 3772784863:
digitalWrite(motor_1_dir_pin, HIGH);
digitalWrite(motor_1_step_pin, HIGH);
digitalWrite(motor_1_step_pin, LOW);
break;

case 3772817503:
digitalWrite(motor_1_dir_pin, LOW);
digitalWrite(motor_1_step_pin, HIGH);
digitalWrite(motor_1_step_pin, LOW);
break;
}
}
}

Подскажите пожалуйста что я мог не так написать или сделать?
 

SlavaZagaynov

★✩✩✩✩✩✩
27 Ноя 2019
168
33
www.youtube.com
@OlegCAXAR, имхо хай-ло слишком быстро, нужна задержка + у ик пультов есть код кнопки и код повтора, которыйты никак не обрабатываешь. Код сам написал или использовал какой-нибудь пример? Добавь в setup Serial.begin, а loop после case вывод в монитор информаци, так ты увидишь в мониторе порта правильно ли работает твой код.
 
Изменено:

EugeneFrol

✩✩✩✩✩✩✩
17 Апр 2024
57
9
50
Вы за irecv.resume() забыли совсем?
А с какай скоростью пульт повторяет передачу при удержании кнопки?
У Немо23, кажется 200 шагов/оборот умножить на параметр MIcroStep драйвера.
Это какая скорость вращения будет?
Используйте библиотеку https://www.airspayce.com/mikem/arduino/AccelStepper/