Шаговый двигатель, поворачивающийся на определенное кол-во шагов

Satans
Offline
Зарегистрирован: 06.10.2019

Всем привет!

Изучаю ардуино чуть меньше недели, но вроде как основы немного понял. Нужно сделать программу для шагового двигателя, который будет поворачиваться на определенное кол-во шагов, которые задаются с клавиатуры, а потом возвращаться обратно. 

Я попробовал сделать это через библиотеку степпер, сначала просто чтобы он поворачивался на определенное кол-во шагов, введенных с клавиатуры. В итоге он даже не работает. Пробовал ставить какие-то условия, но он все равно с места не двигается. Через немного другие команды он все же работает, но после ввода числа все равно крутится без остановки. В распоряжении есть и уно платформа, и двигатель, и драйвер к нему.

#include <Stepper.h>
#define STEPS 100
Stepper stepper(STEPS,2,3,4,5);
int k = 0;

void setup() {
  stepper.setSpeed(30); 
  Serial.begin(9600);
}

void loop(){
  int k = Serial.parseInt();
  stepper.step(k);
}

Думаю, что такие вопросы уже поднимались, просто я не смог найти. Если есть уже похожие темы, то скиньте, кому не трудно. Спасибо!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Satans пишет:
Нужно сделать программу для шагового двигателя, который будет поворачиваться на определенное кол-во шагов, которые задаются с клавиатуры, а потом возвращаться обратно.

Где у тебя реализовано возвращение обратно? Я не вижу этого.

Satans
Offline
Зарегистрирован: 06.10.2019

Пока без него, мне бы передачу с клавиатуры реализовать, возврат уже пойму сам, я надеюсь

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

где схема?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Satans пишет:
на определенное кол-во шагов, введенных с клавиатуры. В итоге он даже не работает.

Вот смотри:

Цитата:
Serial.parseInt() :

Если в течение одной секунды не найдено ни одного целого числа, то, по умолчанию, функция вернет значение 0. Величина таймаута задается функцией Serial.setTimeout()

Какие выводы напрашиваются?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

А stepper.step(1) ;
delay(500);
в луп поставить.
нормально работает?

Satans
Offline
Зарегистрирован: 06.10.2019

BOOM пишет:

Satans пишет:
на определенное кол-во шагов, введенных с клавиатуры. В итоге он даже не работает.

Вот смотри:

Цитата:
Serial.parseInt() :

Если в течение одной секунды не найдено ни одного целого числа, то, по умолчанию, функция вернет значение 0. Величина таймаута задается функцией Serial.setTimeout()

Какие выводы напрашиваются?

void loop(){
  Serial.setTimeout(10000);
  int k = Serial.parseInt();
  stepper.step(k);
  delay(500);
}

Я попробовал так, но все равно не работает. 

Satans
Offline
Зарегистрирован: 06.10.2019

trembo пишет:
А stepper.step(1) ; delay(500); в луп поставить. нормально работает?

Да, но он просто крутится, а ведь нужно на определенное число шагов. Или я не совсем понял, что нужно было поменять

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

А step(100) крутится?

b707
Offline
Зарегистрирован: 26.05.2017

Satans, в обоих ваших кодах вы пытаетесь читать данные из пустого Serial. Разберитесь, как работает функция available() и извлекайте из него данные только когда Сериал не пустой

MaksVV
Offline
Зарегистрирован: 06.08.2015

#include <Stepper.h>
#define STEPS 100
Stepper stepper(STEPS,2,3,4,5);

void setup() 
{
  stepper.setSpeed(30); 
  Serial.begin(9600);
}

void loop()
{ 
  if (Serial.available()) {stepper.step(Serial.parseInt());}
}