Оформи код соответствующим тэгом
Сделал себе сверлилку для печатных плат на базе механизма от двд-привода. Имеется комплект Ардуино Нано+А4988+ шаговый двигатель каретки двдишника. Хотел чтоб он с кнопки медленно, плавно опускался, делал паузу и поднимался. С ардуино столкнулся в первый раз. Скетч кое как переделал из другого, но не так как надо. Подскажите как поменять скорость опускания медленее, а подьем быстрее?
//Пины управления шаговиком
#define STEP_PIN 4
#define DIR_PIN 5
//Пин кнопки
#define start_button 2
//Здесь можно настроить время поворота и паузы
#define move_forward_time 800 //время прямого хода в мсек
#define move_back_time 800 //время обратного хода в мсек
#define pause_time 8000 //время паузы в мсек
#define frequency 3000 //Время между импульсами в мксек. 1000 мксек = 1 мсек = 0.001 сек. Частота следования импульсов 1/0.001 = 1 кГц,
//Не рекомендуется устанавливать время меньше 100 мсек, т.к. частота будет 10 кГц
//Таймер для millis()
uint32_t timer = 0;
//Логический флаг для рабочего режима
bool flag = 0;
void setup() {
pinMode(start_button, INPUT_PULLUP); //Подтягиваем кнопку к питанию
pinMode(STEP_PIN , OUTPUT); //Настраиваем пины управления
pinMode(DIR_PIN , OUTPUT);
}
void loop () {
if (!digitalRead(start_button)) { //Если нажали на кнопку
flag = 1; //Активируем флаг рабочего режима
timer = millis(); //Запускаем таймер
}
if (flag) { //Если флаг активирован
digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения
// for (int i = 0; i < 200; i++) { //Выполняем нужное число шагов 200*16 = 3200 шагов оборот
// digitalWrite(STEP_PIN , HIGH);
// delayMicroseconds(frequency);
// digitalWrite(STEP_PIN , LOW);
// }
// flag = 0;
do { //Крутим движок move_forward_time мсек
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(frequency);
digitalWrite(STEP_PIN , LOW);
} while (millis() - timer < move_forward_time);
delay(pause_time); //Пауза pause_time мсек
timer = millis(); //Снова запускаем таймер
digitalWrite(DIR_PIN , LOW); //Крутим движок move_back_time мсек
do {
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(frequency);
digitalWrite(STEP_PIN , LOW);
} while (millis() - timer < move_back_time);
flag = 0; //Гасим флаг
}
}
//Пины управления шаговиком
#define STEP_PIN 4
#define DIR_PIN 5
//Пин кнопки
#define start_button 2
//Здесь можно настроить время поворота и паузы
#define move_forward_time 800 //время прямого хода в мсек
#define move_back_time 800 //время обратного хода в мсек
#define pause_time 8000 //время паузы в мсек
#define frequency 3000 //Время между импульсами в мксек. 1000 мксек = 1 мсек = 0.001 сек. Частота следования импульсов 1/0.001 = 1 кГц,
//Не рекомендуется устанавливать время меньше 100 мсек, т.к. частота будет 10 кГц
//Таймер для millis()
uint32_t timer = 0;
//Логический флаг для рабочего режима
bool flag = 0;
void setup() {
pinMode(start_button, INPUT_PULLUP); //Подтягиваем кнопку к питанию
pinMode(STEP_PIN , OUTPUT); //Настраиваем пины управления
pinMode(DIR_PIN , OUTPUT);
}
void loop () {
if (!digitalRead(start_button)) { //Если нажали на кнопку
flag = 1; //Активируем флаг рабочего режима
timer = millis(); //Запускаем таймер
}
if (flag) { //Если флаг активирован
digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения
// for (int i = 0; i < 200; i++) { //Выполняем нужное число шагов 200*16 = 3200 шагов оборот
// digitalWrite(STEP_PIN , HIGH);
// delayMicroseconds(frequency);
// digitalWrite(STEP_PIN , LOW);
// }
// flag = 0;
do { //Крутим движок move_forward_time мсек
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(frequency);
digitalWrite(STEP_PIN , LOW);
} while (millis() - timer < move_forward_time);
delay(pause_time); //Пауза pause_time мсек
timer = millis(); //Снова запускаем таймер
digitalWrite(DIR_PIN , LOW); //Крутим движок move_back_time мсек
do {
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(frequency);
digitalWrite(STEP_PIN , LOW);
} while (millis() - timer < move_back_time);
flag = 0; //Гасим флаг
}
}