Пошь подключени и ск

алекс1978

✩✩✩✩✩✩✩
18 Дек 2024
1
0
Заголовок темы должен отражать содержимое. Переформулируй или тема будет удалена.
Здравствуйте,Подскажиие Пожалуйста,ардуино уно-подключен шаговик drv 8825- кнопка вкючения врашение датчик оптически,подскажите что надо прописать чтобы при датчика опт( сейчас при придв к металической плосттне загорается красный) чтобы отключался шаговый мотор, для разделен 24части для веернего депо железная дорога
*/
const int sensorPin = A1; // Pin that the sensor is connected to
volatile int rpm = 1; // Speed in RPM
//Пины управления шаговиком
#define STEP_PIN 3
#define DIR_PIN 4
#define ENABLE_PIN 5

//Пин кнопки
#define start_button 6

int input = A0;
int output = 1;
int val = 0;

//Здесь можно настроить время поворота и паузы
#define move_forward_time 0 //время прямого хода в мсек
#define move_back_time 10000 //время обратного хода в мсек
#define pause_time 80 //время паузы в мсек
#define frequency 100 //Время между импульсами в мксек. 1000 мксек = 1 мсек = 0.001 сек. Частота следования импульсов 1/0.001 = 1 кГц,
//Не рекомендуется устанавливать время меньше 100 мсек, т.к. частота будет 10 кГц

//Таймер для millis()
uint32_t timer = 100;

//Логический флаг для рабочего режима
bool flag = 0;

void setup() {
pinMode(start_button, INPUT_PULLUP); //Подтягиваем кнопку к питанию
pinMode(STEP_PIN , OUTPUT); //Настраиваем пины управления
pinMode(DIR_PIN , OUTPUT);
pinMode(ENABLE_PIN , OUTPUT);
Serial.begin(9600);
pinMode(input, INPUT);
pinMode(output, OUTPUT);

digitalWrite(ENABLE_PIN , HIGH); //Выключаем мотор, чтобы не грелся
}

void loop () {
if (!digitalRead(start_button)) { //Если нажали на кнопку
digitalWrite(ENABLE_PIN , LOW); //Включаем мотор
flag = 1; //Активируем флаг рабочего режима
timer = millis(); //Запускаем таймер
val = analogRead(input);
Serial.println(val);
// delay(500);
if (val > 25) {
digitalWrite(output, LOW);
}
else {
digitalWrite(output, HIGH);
}
}

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; //Гасим флаг
digitalWrite(ENABLE_PIN , HIGH); //Выключаем движок, чтобы не грелся
}