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

Есть рабочий скетч отлаженный для уно но при переносе на нано двигать начинает вращаться без участия кнопок

Описание алгоритма работы:
Скорость вращения 600 оборотов в минуту
При кратковременном нажатии кнопки мотор включается и двигается по часовой стрелке пока не сработает концевой датчик и мотор останавливается. Когда кнопку нажимают ещё раз мотор движется против часовой до второго концевого выключателя до его срабатывания отключается до следующего нажатия кнопки

Вот сам скетч с комментариями:

 `#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; // Переключить направление при каждом нажатии кнопки`
`    // }`
`}`

Прошу помочь разобраться что не так

Это так и надо?

P.S. Кто в правах - поправьте скетч, ТС почти справился.

Пусть сначала ТС справится с правильной вставкой кода :wink:

По идее, уно и нано - это одно и то же. Либо в скетче, что-то поменяли и забыли, либо накосячили при сборке схемы - некачественная пайка, кнопку не теми контактами присоединили, в целом схему неправильно собрали…

У Уно по питанию стоят эл. конденсаторы, которых нет в Нано.
Запитайте драйвер и двигатель от другого источника питания.

И загрузчик там другой.

Недавно, по моему @MMM , решил подобную задачу. Дело было в нехватке памяти. Просто один аддон (возможно оптимизатор) собирал скетч немного по другому , а памяти в обрез.
Но здесь , скорее , не тот случай

1 лайк

Да так и задумывалось по скетчу

Он без нареканий работает на уно

Схему перепроверил полностью совпадает с той картинкой что прикрепил

Попробую добавить конденсатор по питанию
Какого номинала стоит взять ?

Про питание уже написали. Питать мотор от ардуины не лучшая идея. Возможно в случае с уно просто везёт.

470мкф х 25в (или хотя-бы 16в)

Ой-ли? Как-же у вас движок то без питания крутился?

Согласен на рисунке не отразил питание мой косяк(

М’кей. Теперь скетч сами выложите.

Enable в воздухе висит?

Да он не задействован, без него всё работало

Для гарантии я бы подключил.

@Magistercoon Дубль два: выложите скетч и фото сборки (до кучи).