Управление шаговым двигателем

Kuchnet

✩✩✩✩✩✩✩
19 Янв 2022
3
0
отредактируйте пост согласно правилам раздела в течении 24 час или БАН
Требуется исполнитель :
удаленно
Надо изготовить :
Объединить 2 программы.
Планируемый бюджет :
договорной
Сроки :
приемлемые
Оплата :
по согласованию
Для связи :
форум или почта.

ТЗ:
Есть программа управления шаговым движком. С взято с просторов интернета. Она работает, но при изменении скорости глючит.
Нужна помощь в исправлении программы и добавлении функционала.
Хочу еще на эту ардуинку повесить управление адресной лентой из урока Алекса
C++:
// красный +5V не использовал.
// declare variables for the motor pins
int motorPin1 = 8; // Blue / Синий   - 28BYJ48 pin 1
int motorPin2 = 9; // Pink  / Розовый  - 28BYJ48 pin 2
int motorPin3 = 10; // Yellow / Желтый - 28BYJ48 pin 3
int motorPin4 = 11; // Orange  / Оранжевый - 28BYJ48 pin 4

int buttonPin = 12; // кнопку подключаем к Pin 12.                  
boolean  q; // фиксируем нажатие на кнопку.

// установить скорость шагового двигателя.
//variable to set stepper speed.
int motorSpeed = 1200;  

int lookup[8] = {
  B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};

/////////////////////////////////////////////////////////////////
void setup() {
  // declare the motor pins as outputs.
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);

  // Одна нога кнопки подключается к GND, другая к Pin № 12
  // (никаких внешних резисторов не нужно).
  pinMode(buttonPin, INPUT);
  digitalWrite(buttonPin, HIGH);

  // Serial.begin(9600);
}

void loop(){
  // переменный резистор, крутим резистор меняем скорость вращения.
  // раскомментируйте две строки.
  int VariableResistor = analogRead(A0);
  motorSpeed = map(VariableResistor, 0, 1023, 10000, 1200);


  if (digitalRead(buttonPin) == LOW) // если кнопка нажата.
  {
    q = !q; // меняем значение q на противоположное 0 на 1 или 1 на 0.
    delay(1000); // защита от дребезга кнопки.
  }

  if (q == 1)anticlockwise(); // крутим влево.

  else clockwise(); // крутим вправо.
}

// --------------------------------

//set pins to ULN2003 high in sequence from 1 to 4
//delay "motorSpeed" between each pin setting (to determine speed)
// функция поворачивает мотор против часовой стрелки.
void anticlockwise()
{
  for(int i = 0; i < 8; i++)
  {
    setOutput(i);
    delayMicroseconds(motorSpeed);
  }
}

// функция поворачивает мотор по часовой стрелке.
void clockwise()
{
  for(int i = 7; i >= 0; i--)
  {
    setOutput(i);
    delayMicroseconds(motorSpeed);
  }
}

void setOutput(int out)
{
digitalWrite(motorPin1, bitRead(lookup[out], 0));
  digitalWrite(motorPin2, bitRead(lookup[out], 1));
  digitalWrite(motorPin3, bitRead(lookup[out], 2));
  digitalWrite(motorPin4, bitRead(lookup[out], 3));
}
IMG_0994.JPG
 
Изменено:

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
их так просто не объединить, т.к. на задержках построены, дешевле выйдет использовать 2 ардуины
 
  • Лойс +1
Реакции: Kuchnet

vlad_vsc

✩✩✩✩✩✩✩
25 Июл 2020
23
8
@Kuchnet, используйтеболее мощные библиотеки для ШД -AccelStepper, GyverStepper. Я могу помочь, но отпишу в лс