Попросили написать программу, в которой моторы через рандомный промежуток времени меняют направление и скорость вращения.
Направление вращения меняет, время смены направления тоже работает... а вот скорость почему то никак не меняется... Где то вероятно у меня ошибка...
Подскажите...
Проблема в 55-58 строках. Там задается промежуток времени через который должна меняться скорость вращения мотора
По логике все должно работать, но собрав макет, не получилось что задумано...
Направление вращения меняет, время смены направления тоже работает... а вот скорость почему то никак не меняется... Где то вероятно у меня ошибка...
Подскажите...
Проблема в 55-58 строках. Там задается промежуток времени через который должна меняться скорость вращения мотора
По логике все должно работать, но собрав макет, не получилось что задумано...
Скетчик на управление моторами:
// Скетчик на управление моторами для тира.
uint32_t myTimer1, myTimer2; // время, скорость
#define pinStep 4 // сигнал Step на драйвер. Каждый импульс от этого контакта — это перемещение мотора на один шаг
#define pinDir1 3 // пин Direction на драйвер. Наличие лог-1 мотор вращается в одну сторону, отсутствие - в другую
#define pinDir2 2 // пин Direction на драйвер. Наличие лог-1 мотор вращается в одну сторону, отсутствие - в другую
#define Smin 1000 // скорость минимальная ??? Нужно подбирать величины...
#define Smax 500 // скорость максимальная ??? Нужно подбирать величины...
#define Tmin 5000 // время для движения минимальное в милисекундах (5сек)
#define Tmax 30000 // время для движения максимальное в милисекундах (30сек)
#define STmin 3000 // время для изменения скорости движения минимальное в милисекундах (3сек)
#define STmax 10000 // время для изменения скорости движения максимальное в милисекундах (10сек)
void setup() {
pinMode(pinDir1, OUTPUT); // мотор 1 пин DIR
pinMode(pinDir2, OUTPUT); // мотор 2 пин DIR
pinMode(pinStep, OUTPUT); // к моторам для вращения на пин STEP
digitalWrite(pinDir1, LOW); // задаем начальное направление вращения 1 мотор туда
digitalWrite(pinDir2, HIGH); // задаем начальное направление вращения 2 мотор обратно
}
// начальные установки
int t = 10000; // 10 сек едет при первом включении
int p = 1;
int s = Smin; // нач скорость
int st = STmin; // нач время
void loop() {
if (millis() - myTimer1 >= t) { // таймер времени движения мишени
myTimer1 = millis(); // сброс таймера
t = (random(Tmin, Tmax)); // генерируем время
p = p + 1 ; // счетчик для переключения направления
if (p > 2) {
p = 1;
}
if ( p == 1) {
digitalWrite(pinDir1, LOW); // задаем направление вращения 1 мотор туда
digitalWrite(pinDir2, HIGH); // задаем направление вращения 2 мотор обратно
}
if ( p == 2) {
digitalWrite(pinDir1, HIGH); // задаем направление вращения 1 мотор обратно
digitalWrite(pinDir2, LOW); // задаем направление вращения 2 мотор туда
}
}
// задаем скорость и время для изменения скорости
if (millis() - myTimer2 >= st) { // таймер на скорость
myTimer2 = millis(); // сброс таймера
s = (random(Smin, Smax)); // генерируем скорость
st = (random(STmin, STmax)); // генерируем время для изменения скорости
}
// формируем импульсы на вращение к моторам, сигнал STEP
digitalWrite(pinStep, HIGH);
delayMicroseconds(s);
digitalWrite(pinStep, LOW);
delayMicroseconds(s);
}
Изменено: