Помощь с переносом с уно на нано

У него, поди, прерывание сразу же дёргается.
Вообще - не особо понятно, зачем в данном скетче прерывание. Дороже стоил чтоп?..

Скорее старая школа.

#include <AccelStepper.h>

// Настройка шагового двигателя
// #define ENABLE_PIN 7
#define STEP_PIN 8
#define DIR_PIN 9

// Пины для кнопки и концевых датчиков
#define BUTTON_PIN 2
#define LIMIT_SWITCH_CW_PIN 3 // по часовой
#define LIMIT_SWITCH_CCW_PIN 4 // против часовой

// Настройки
#define STEPS_PER_REVOLUTION 200 // Шагов на оборот для NEMA 17
#define RPM 600                    // Скорость в оборотах в минуту
#define STEPS_PER_MINUTE (STEPS_PER_REVOLUTION * RPM)
#define MOTOR_SPEED 600           // Скорость в шагов в секунду

AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);


// int counter = 0;
// int last_button_state = HIGH;
// int curr_button_state = HIGH;

volatile bool motorEnabled = true; // Флаг активности двигателя
volatile bool motorDirection = true; // Направление движения: true - по часовой, false - против часовой

void setup() {
    // Настройка пинов
    pinMode(BUTTON_PIN, INPUT_PULLUP);
    pinMode(LIMIT_SWITCH_CW_PIN, INPUT_PULLUP);
    pinMode(LIMIT_SWITCH_CCW_PIN, INPUT_PULLUP);
    // pinMode(ENABLE_PIN, OUTPUT);

    // digitalWrite(ENABLE_PIN, LOW);

    // Настройка шагового двигателя
    stepper.setMaxSpeed(MOTOR_SPEED);
    stepper.setAcceleration(1000); 

    // Установка прерывания для кнопки
    attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), toggleMotor, FALLING);
}

void loop() {
    // Если мотор включен, двигаться
    if (motorEnabled) {
        if (motorDirection) {
            if (digitalRead(LIMIT_SWITCH_CW_PIN) == LOW) {
                // Остановить мотор при достижении концевого выключателя
                motorEnabled = false;
                stepper.stop();
                motorDirection = false;
            } else {
                stepper.setSpeed(MOTOR_SPEED);
                stepper.runSpeed();
            }
        } else {
            if (digitalRead(LIMIT_SWITCH_CCW_PIN) == LOW) {
                // Остановить мотор при достижении концевого выключателя
                motorEnabled = false;
                stepper.stop();
                motorDirection = true;
            } else {
                stepper.setSpeed(-MOTOR_SPEED);
                stepper.runSpeed();
            }
        }
    }
}

void toggleMotor() {
    // Переключение состояния мотора и направление
    motorEnabled = true;
    // motorEnabled = !motorEnabled;
    // if (motorEnabled) {
    //     motorDirection = !motorDirection; // Переключить направление при каждом нажатии кнопки
    // }
}



Штош, всё как по учебнику. И " рабочий скетч отлаженный", и схема подобная, и вообще - “это патамушта ардуина китайская”(с)

@Magistercoon Ваш скетч и на UNO заставляет сразу стартовать двигатель!
А вот если поменять volatile bool motorEnabled = false; // Флаг активности двигателя ,то всё начинает работать согласно вашему первому сообшению.

Не ври-ка! На УНО скетч работал! :grinning_cat_with_smiling_eyes:

1 лайк

К сожелению не даёт прикрепить видео запись напрямую на сайт

Видео запись сделана после отладки на Uno

Воспользовался вашим советом, но это не решило мою проблему

видеозапись из поста выше лишь показывает как алгорит отрабатывает на Уно , но на нано работать отказывается

Выложите скетч.

Чо гадать и мучаться?
На нано так же есть Serial, как и на уно.
Включи сериал и выводи отладочную информацию в монитор порта…

1 лайк

Конденсатор то поставили? Желательно 2шт - на Vin и на 5V.
С запасом по напряжению есс-но.

Первый по-настоящему дельный совет. Если “Не работает и непонятно почему” нужно локализовать проблему. В случае с Ардуино лучше просто выводить в сериал каждый чих контроллера

1 лайк

Это в случае людей адекватно воспринимающих действительность, а приверженцев святого ютюба ничем не проймёшь.

А Wokwi прикольная вещь. Работает, блин. Wokwi - Online ESP32, STM32, Arduino Simulator

Как видим сразу начинает вращение после подачи питания.
Если же в №26 поменять на false (что ТС за полутора суток не смог) то уже

2 лайка