Двигатель: m49sp-2k Драйвер: pld545-g3 Контроллер: Uno Добрый день! Написал код, но в чём ошибка понять не могу. Что получается: Двигатель бесконечно выполняет только первую часть кода (до else). Код (C++): int dirpin = 11; int steppin = 9; int enbl = 10; void setup() { pinMode(dirpin, OUTPUT); pinMode(steppin, OUTPUT); pinMode(enbl, OUTPUT); } void loop() { int d = 0; // количество шагов int i; // переменная вращения в 1 сторону int t; // переменная вращения во вторую сторону if(d < 5) { digitalWrite(dirpin, HIGH); // указываем 1 направление for (i = 0; i<150; i++) // функция полного шага { digitalWrite(steppin, LOW); // микрошаги digitalWrite(steppin, HIGH); // delay(3); // } delay(2000); // задержка между шагами d++; // приращение к d } else // когда d = 5 выполняется эта функция { digitalWrite(dirpin, LOW); // обратное направление вращения for (t = 0; t<750; t++) // длительность полного шага { digitalWrite(steppin, LOW); // микрошаги digitalWrite(steppin, HIGH); delay(3); } delay(10000); // задержкапосле которой код начнётся сначала }
Не видно активации через вход ENABLE: Код (C++): digitalWrite(enbl, HIGH); Переключение между уровнями на входе STEP желательно сделать с задержками (какими -- читайте документацию): Код (C++): digitalWrite(steppin, LOW); // микрошаги delay(3); // digitalWrite(steppin, HIGH); // delay(3); //
Когда enbl на HIGH, то драйвер питание на двигатель не подаёт. Поэтому я на него и не подаю ничего вообще.
Это может быть причиной того, что двигатель не работает. Попробуйте подключить к "земле" -- подать 'LOW' на 'enbl'.
Подключил. Никакого эффекта это не дало - что в программе прописывал LOW, что к земле подключал - один результат. Думаю, что проблема в другом. Переменная "d" не изменяется, хотя в программе это указано. Подскажите, пожалуйста что я делаю не так? Код (C++): void loop() { int t; int d = 0; int i; digitalWrite(enbl, LOW); digitalWrite(unlock, HIGH); if(d<5) { digitalWrite(dirpin, HIGH); { for (i = 0; i<150; i++) { digitalWrite(steppin, LOW); digitalWrite(steppin, HIGH); delay(2); } d = d + 1; } delay(2000); } else { digitalWrite(dirpin, LOW); digitalWrite(enbl, LOW); for (t = 0; t<750; t++) { digitalWrite(steppin, LOW); digitalWrite(steppin, HIGH); delay(2); } delay(1000); } }
А поровнее никак? Мозг отказывается это обрабатывать! Вы лучше скачайте Fritzing и зарисуйте нормально!
Переменная 'd' каждый раз обнуляется: Код (C++): int d = 0; поэтому всегда срабатывает условие: Код (C++): if(d<5) Инициализацию переменной 'd' надо вынести за пределы функции 'loop()'.
Правильно, в этом случае область видимости ограничивается функцией 'setup()'. Объявите эту переменную вне функций.