Не могу разобраться почему он не вращаетсяНе вращается двигатель. Светодиод работает как надо. Помогите разобраться.
const int StepsForRotation = 200; // 200 шага на оборот - 1,8 градуса на один шаг
Stepper stepmotor (StepsForRotation, 8, 9, 10, 11); // Инициализируем шаговый двигатель 200 шага на оборот, управление обмотками через 8, 9, 10, 11 цифровые выходы
int buttonPin6 = 6; //номер входа, подключенный к кнопке
boolean butt_flag = 0; //запоминает последнее состояние кнопки
boolean butt; // текущее значение кнопки
boolean led_flag = 0;
unsigned long last_press; //переменная хранящая время прошлого нажатия
void setup()
{
pinMode(6, INPUT_PULLUP); //обозначаем пин 6 входом
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
int Napr = 0; // переменная направления вращения двигателя варианты значений 1 / 0 / -1
stepmotor.setSpeed (200) ; // устанавливаем скорость вращения
butt = !digitalRead(3); // считать текущее положение кнопки, инвертированное
if (butt == 1 && butt_flag == 0 && millis() - last_press > 100) {
butt_flag = 1;
Serial.println("Button pressed");
led_flag = !led_flag;
digitalWrite(13, led_flag); //проверка нажатия кнопки
last_press = millis();
}
if (digitalRead(6) == HIGH) {
buttonState = 1;
}
else
{
buttonState = 0;
}
}
if (buttonState == 1) Napr = 1; // если кнопка нажата, сделать шаговому двигателю 1 шаг
if (buttonState == 0) Napr = 0; // если кнопка нажата еще раз, двигатель сделает 0 шагов
stepmotor.step(Napr) ; // Дивагеть должен сделать кол-во шагов согласно переменной Napr
}```
А он, в принципе, вращается?
В том то и дело что нет. Но он рабочий. Подключен правильно. Он делает по одному шагу.
b707
16.Март.2023 18:30:25
4
Код не компилируется. Так что про вращение рано говорить.
Раз ему написали делать шаг, он и делает его. Под условие перещелкивания переменная не попадает.
Переделал код. Теперь после нажатии и удержании вращается.
const int StepsForRotation = 200; // 200 шага на оборот - 1,8 градуса на один шаг
Stepper stepmotor (StepsForRotation, 8, 9, 10, 11); // Инициализируем шаговый двигатель 200 шага на оборот, управление обмотками через 8, 9, 10, 11 цифровые выходы
int buttonPin6 = 6; //номер входа, подключенный к кнопке
boolean butt_flag = 0; //запоминает последнее состояние кнопки
boolean butt; // текущее значение кнопки
boolean led_flag = 0;
unsigned long last_press; //переменная хранящая время прошлого нажатия
void setup()
{
pinMode(6, INPUT_PULLUP); //обозначаем пин 6 входом
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
int Napr = 0; // переменная направления вращения двигателя варианты значений 1 / 0 / -1
stepmotor.setSpeed (200) ; // устанавливаем скорость вращения
butt = !digitalRead(3); // считать текущее положение кнопки, инвертированное
if (butt == 1 && butt_flag == 0 && millis() - last_press > 100)
{
butt_flag = 1;
Serial.println("Button pressed");
led_flag = !led_flag;
digitalWrite(13, led_flag); //проверка нажатия кнопки
last_press = millis();
}
if (digitalRead(6) == HIGH)
{
Napr = 1;
}
else
{
Napr = 0;
}
stepmotor.step(Napr) ; // Дивагеть должен сделать кол-во шагов согласно переменной Napr
}
b707
16.Март.2023 18:55:49
7
Теперь сделайте переменную Napr статической, а кнопка чтобы не приравнивала ее всегда к единице, а инвертировала.
И тогда у вас будет работать именно так, как написано в заголовке
То есть в 16 строке сделать так static int Napr = 0?
И если убрать строки 32-35, запускается норм. Но надо что бы при повторном нажатии останавливался.
b707
16.Март.2023 19:13:21
9
я вам написал как сделать
Извините, а в какой строке? Я начинающий
Работает. Ура!!!
#include "Stepper.h"
const int StepsForRotation = 200; // 200 шага на оборот - 1,8 градуса на один шаг
Stepper stepmotor (StepsForRotation, 8, 9, 10, 11); // Инициализируем шаговый двигатель 200 шага на оборот, управление обмотками через 8, 9, 10, 11 цифровые выходы
int buttonPin6 = 6; //номер входа, подключенный к кнопке
boolean butt_flag = 0; //запоминает последнее состояние кнопки
boolean butt; // текущее значение кнопки
boolean led_flag = 0;
unsigned long last_press; //переменная хранящая время прошлого нажатия
void setup()
{
pinMode(6, INPUT_PULLUP); //обозначаем пин 6 входом
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
static int Napr = 0; // переменная направления вращения двигателя варианты значений 1 / 0 / -1
stepmotor.setSpeed (200) ; // устанавливаем скорость вращения
butt = !digitalRead(6); // считать текущее положение кнопки, инвертированное
if (butt == 1 && butt_flag == 0 && millis() - last_press > 100)
{
butt_flag = 1;
Serial.println("Button pressed");
led_flag = !led_flag;
digitalWrite(13, led_flag); //проверка нажатия кнопки
if (led_flag == 1)
{ Napr=1;}
else
{ Napr=0;}
last_press = millis();
}
if (butt == 0 && butt_flag == 1) {
butt_flag = 0;
Serial.println("Button released");
}
//if (digitalRead(6) == HIGH)
//{
//Napr = 1;
//}
//else
//{
//Napr = 0;
//}
stepmotor.step(Napr) ; // Дивагеть должен сделать кол-во шагов согласно переменной Napr
}
2 лайка
Строка №24
Поясните пожалуйста, как именно осуществляется “проверка нажатия кнопки ” в это строке.
Это для визуального контроля работы кнопки.