Драйвер A4988 + Nema 17

sadman41
Offline
Зарегистрирован: 19.10.2016

andriano пишет:

Замучаешья с логикой.

Да и решение немасштабируемое.

...

Переписать - дешевле.

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

...
if (digitalRead(BUTTON1) == HIGH) {
   digitalWrite(dirPin1,LOW);
   digitalWrite(stepPin1,HIGH);
}
if (digitalRead(BUTTON3) == HIGH) {
   digitalWrite(dirPin2,LOW);
   digitalWrite(stepPin2,HIGH);
}

delayMicroseconds(1000);

if (digitalRead(BUTTON1) == HIGH) {
   digitalWrite(stepPin1,LOW);
}

if (digitalRead(BUTTON3) == HIGH) {
   digitalWrite(stepPin2,LOW);
}

delayMicroseconds(1000);
...

Неправославный говнокод, да - ни классов, ни миллисов, ни прямой работы с портами.

Однако - его написание под силу ТС. Теоретически.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:
ни классов, ни миллисов, ни прямой работы с портами.
Да и Си какой-то нечестный. Не тёплый и не ламповый :(

Vitali-71
Offline
Зарегистрирован: 25.04.2017

...

Vitali-71
Offline
Зарегистрирован: 25.04.2017

Большое всем спасибо!

Vitali-71
Offline
Зарегистрирован: 25.04.2017

Евгений, доброго денечка!!! Подскажи в таком вопросе... переключил на матричную клавиатуру.

При нажатии, ШД только дергается, а работать не работает!!! в чем загвоздка, подскажи???

#include <Keypad.h>
 
const byte ROWS = 4; 
const byte COLS = 4; 
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'#','0','*','D'}
};

byte rowPins[ROWS] = { 26, 27, 28, 29}; 
byte colPins[COLS] = { 30, 31, 32, 33}; 

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

const int stepPin1 = 39;
const int dirPin1 = 38;
const int stepPin2 = 41;
const int dirPin2 = 40;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode (stepPin1, OUTPUT);
  pinMode (dirPin1,  OUTPUT);
  pinMode (stepPin2, OUTPUT);
  pinMode (dirPin2,  OUTPUT);
}

void loop() {
  char key = keypad.getKey();
if (key == '1') 
{
   digitalWrite(dirPin1,HIGH);
   digitalWrite(stepPin1,LOW);
}
if (key == '2') 
{
   digitalWrite(dirPin1,LOW);
   digitalWrite(stepPin1,HIGH);
}
if (key == '3')
{
   digitalWrite(dirPin2,HIGH);
   digitalWrite(stepPin2,LOW);
}
if (key == '4')
{
   digitalWrite(dirPin2,LOW);
   digitalWrite(stepPin2,HIGH);
}
delayMicroseconds(1000);

if (key == '1') 
{
   digitalWrite(stepPin1,HIGH);
}
if (key == '2') 
{
   digitalWrite(stepPin1,LOW);
}
if (key == '3') 
{
   digitalWrite(stepPin2,HIGH);
}
if (key == '4') 
{
   digitalWrite(stepPin2,LOW);
}
delayMicroseconds(1000);
}

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

А если поставить задержку 10000 заработает?

Vitali-71
Offline
Зарегистрирован: 25.04.2017

Пробовал, и на 10000, и убрать - результат - 0!!!!

Vitali-71
Offline
Зарегистрирован: 25.04.2017

Ну что, поможете кто-нибудь???

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Вставьте после строки 33: key = '1'; - закрутится ваш мотор?

Vitali-71
Offline
Зарегистрирован: 25.04.2017

sadman41 пишет:

Вставьте после строки 33: key = '1'; - закрутится ваш мотор?

Да начал вращаться!!!

 

sadman41
Offline
Зарегистрирован: 19.10.2016

ну, стало быть клавиатуру криво подключили или сама она проблемная.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

Написал в 33 строке if (key == '1') 

изменил на if (key = '1') правильно?

я просто все вернул обратно, подключил клаву по другой схеме (без схемы от дребезга контактов), подключил и другую клаву, результат - 0! все тоже самое!!!

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vitali-71 пишет:

Ну что, поможете кто-нибудь???

А Вы сами себе не пробовали помочь? Ну, вот например, что или кто Вам мешает межу строками 32 и 33 вставить

Serial.print("Key='");
Serial.print(key);
Serial.println("'");

Вы бы видели чему равна Ваша переменная, которую Вы читаете с клавиатьуры. Узнали бы столько нового и интересного!

Кстати, что хоть за клавиатура?

sadman41
Offline
Зарегистрирован: 19.10.2016

У меня такой нет, как она фунциклирует - я не знаю, но проверка показала, что алгоритм кручения мотора верный. А вот с клавиатурой беда.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

А что в итоге должно выйти, я не до конца понимаю!

прописав в итоге я получил в мониторе порта key ``

и спишется без перерыва, только при нажатии на какую-то кнопку, появляется символ,

сами двигатели молчат!

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Вы ее нажимаете и отпускаете что ли?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vitali-71 пишет:

А что в итоге должно выйти, я не до конца понимаю!

прописав в итоге я получил в мониторе порта key ``

Так включайте голову. Вы чего ожидаете в этой переменной? Судя по дальнейшему, Вы там ожидаете '1', '2', '3' или '4'. А там, оказывается, ничего похожего!  Или вылазит похожее, когда нажимаете?

А, вот появляется. Так какой символ? Правильный? Ну, думайте!

Vitali-71
Offline
Зарегистрирован: 25.04.2017

sadman41 пишет:

Вы ее нажимаете и отпускаете что ли?

так... идем по порядку!

 нажимаю кнопку, держу, сразу дернулся двигло, остановился, стоит.

отпускаю, двигатель молчит.

нажимаю опять - все повторяется

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Печатается-то что? Или Вы не понимаете зачем мы печатаем?

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

Vitali-71 пишет:

А что в итоге должно выйти, я не до конца понимаю!

прописав в итоге я получил в мониторе порта key ``

Так включайте голову. Вы чего ожидаете в этой переменной? Судя по дальнейшему, Вы там ожидаете '1', '2', '3' или '4'. А там, оказывается, ничего похожего!  Или вылазит похожее, когда нажимаете?

А, вот появляется. Так какой символ? Правильный? Ну, думайте!

я не могу понять как мне настроить кнопки чтобы ими можно было управлять схемой!

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Давайте посмотрим мои последние посты:

ЕвгенийП пишет:

Кстати, что хоть за клавиатура?

ЕвгенийП пишет:

Так какой символ? Правильный?

ЕвгенийП пишет:

Печатается-то что? 

Я задал три вопроса подряд. Получил ноль ответов.

И после этого Вы заявляете:

Vitali-71 пишет:

я не могу понять как мне настроить кнопки 

Вот знаете, у меня твёрдое ощущение, что Вы чего-то другого понять не можете :)

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

Печатается-то что? Или Вы не понимаете зачем мы печатаем?

печатается данный символ на который нажата кнопка

 

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

Давайте посмотрим мои последние посты:

ЕвгенийП пишет:

Кстати, что хоть за клавиатура?

ЕвгенийП пишет:

Так какой символ? Правильный?

ЕвгенийП пишет:

Печатается-то что? 

Я задал три вопроса подряд. Получил ноль ответов.

И после этого Вы заявляете:

Vitali-71 пишет:

я не могу понять как мне настроить кнопки 

Вот знаете, у меня твёрдое ощущение, что Вы чего-то другого понять не можете :)

 

 

Вопрос №1 клавиатура!

их  у меня 2,

http://iarduino.ru/shop/Expansion-payments/klaviatura-4-x4-knopki-v2.html ,

http://iarduino.ru/shop/Sensory-Datchiki/klaviatura-4-4-knopki.html

при подключении и одной и другой, результат один и тот же

 

Вопрос №2 какой символ!

Да, правильный. Тот который нажат, тот и высвечивается...

 

Вопрос №3 Печатается то что?

То что нажимаю, например

Key=` `

Key=` `

как нажал какой-то символ, печатает

Key=`нажатый символ `

Key=` `

 

Вот знаете, у меня твёрдое ощущение, что Вы чего-то другого понять не можете :)

Скорее всего, не исключаю такой возможности...

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Печатает один раз или пока держите нажатой?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так, и чего Вы от этого кода хотите? Как он по-Вашему должен работать? Только подробно.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

sadman41 пишет:

Печатает один раз или пока держите нажатой?

Один раз. Даже если держу!

 

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

Так, и чего Вы от этого кода хотите? Как он по-Вашему должен работать? Только подробно.

Так!

у меня подключен двигатель. матричная клавиатура!

я добиваюсь того, чтобы:

при нажатии кнопки 1, двигатель вращался по часовой,

при нажатии кнопки 2, двигатель вращался против часовой,

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А 3 и 4?

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

А 3 и 4?

ну это уже ко 2 двигателю, тоже, по и против часовой при нажатии соответственно!

sadman41
Offline
Зарегистрирован: 19.10.2016

Vitali-71 пишет:

sadman41 пишет:

Печатает один раз или пока держите нажатой?

Один раз. Даже если держу!

Ну, тогда всё понятно. Один раз двигатель и дергается. Всё в соответствии с алгоритмом - никаких ошибок тут нет. Видать библиотека написана так, что удержание игнорирует.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

sadman41 пишет:

Vitali-71 пишет:

sadman41 пишет:

Печатает один раз или пока держите нажатой?

Один раз. Даже если держу!

Ну, тогда всё понятно. Один раз двигатель и дергается. Всё в соответствии с алгоритмом - никаких ошибок тут нет. Видать библиотека написана так, что удержание игнорирует.

и исправить никак нельзя получается?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ваша программа по нажатию клавиши делает 1 шаг (и том, мне кажется, что не очень правильно, но не уверен, я давно с этим драйвером не работал). Но в любом случае - она делает один шаг. Переделайте, чтобы она постоянно делала шаги пока нажата кнопка. Если не знаете как, то давайте ссылку на Вашу библиотеку Keypad, что не получилось, что на разные смотрим.

sadman41
Offline
Зарегистрирован: 19.10.2016

Vitali-71 пишет:

и исправить никак нельзя получается?

Надо исходник глянуть. Где вы ее брали?

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

Ваша программа по нажатию клавиши делает 1 шаг (и том, мне кажется, что не очень правильно, но не уверен, я давно с этим драйвером не работал). Но в любом случае - она делает один шаг. Переделайте, чтобы она постоянно делала шаги пока нажата кнопка. Если не знаете как, то давайте ссылку на Вашу библиотеку Keypad, что не получилось, что на разные смотрим.

вот ссылка набиблиотеку!

https://cloud.mail.ru/public/FvSh/quyf5nwFV

Vitali-71
Offline
Зарегистрирован: 25.04.2017

sadman41 пишет:

Vitali-71 пишет:

и исправить никак нельзя получается?

Надо исходник глянуть. Где вы ее брали?

вот библиотека

https://cloud.mail.ru/public/FvSh/quyf5nwFV

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, не знаю, вроде там всё необходимое есть, но подробно разбираться сейчас не могу, возже или завтра.

Попробуйте для разминки строки 33 и 55 заменить на 

if (keypad.isPressed('1')) 

и посмотрите, поменяется ли поведение при нажатии клавиши 1. Если поменяется в нужную сторону, делайте так для всех клавиш. Если нет, то опищите внятно, как и что поменялось.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

Ну, не знаю, вроде там всё необходимое есть, но подробно разбираться сейчас не могу, возже или завтра.

Попробуйте для разминки строки 33 и 55 заменить на 

if (keypad.isPressed('1')) 

и посмотрите, поменяется ли поведение при нажатии клавиши 1. Если поменяется в нужную сторону, делайте так для всех клавиш. Если нет, то опищите внятно, как и что поменялось.

изменилось только то что стал чуть больше градус отклонять при нажатии этой кнопки (кнопки 1).

если раньше отклонял на 1-2 градуса, то теперь на 5 примерно... а в остальном все без изменений!

vvadim
Offline
Зарегистрирован: 23.05.2012

Евгений Петрович, завидую вашей выдержке...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vitali-71 пишет:

изменилось только то что стал чуть больше градус отклонять при нажатии этой кнопки (кнопки 1).

если раньше отклонял на 1-2 градуса, то теперь на 5 примерно... а в остальном все без изменений!

Тогда так. Давайте делить систему на части и отлаживать по частям.

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

Когда добъётесь этого, вернёмся к моторам.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

Vitali-71 пишет:

изменилось только то что стал чуть больше градус отклонять при нажатии этой кнопки (кнопки 1).

если раньше отклонял на 1-2 градуса, то теперь на 5 примерно... а в остальном все без изменений!

Тогда так. Давайте делить систему на части и отлаживать по частям.

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

Когда добъётесь этого, вернёмся к моторам.

не получается у меня добиться этого...

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Давайте скетч (без моторов и всякой другой фигни) - только ввод с клавиатуры и печать.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

Давайте скетч (без моторов и всякой другой фигни) - только ввод с клавиатуры и печать.

#include <Keypad.h> // Подключаем библиотеку 
const byte ROWS = 4; // 4 строки
const byte COLS = 4; // 4 столбца
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
}; 
byte rowPins[ROWS] = { 26, 27, 28, 29}; 
byte colPins[COLS] = { 30, 31, 32, 33}; 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
  Serial.begin(9600);
}
void loop(){
  char key = keypad.getKey();
  if (key){
    Serial.println(key); // Передаем название нажатой клавиши в сериал порт
    tone(13, (int)key*10, 300); // Издаем звуковой сигнал длиной 300 миллисекунд 
  }
}

вот он!

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Уберите if и tone. пусть печатает постоянно. Если хотите, поставьте задержку в 20-50мс, чтобы не загаживала экран.

И что? Нажали и держим. Что печатается?

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

Уберите if и tone. пусть печатает постоянно. Если хотите, поставьте задержку в 20-50мс, чтобы не загаживала экран.

И что? Нажали и держим. Что печатается?

Все также!

при нажатии на любую кнопку, если держать или если отпустить, печатает 1 раз!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Смотрим библиотеку Keypad и ищем там возможность снимать нажатую в данным момент клавишу столько раз сколько снимаем. наверняка есть такая возможность. Если таки нет - меняем или модифицируем библиотеку.

Но пока не добьёмся, чтобы печатала то, что надо - о движках даже не думаем.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

ЕвгенийП пишет:

Смотрим библиотеку Keypad и ищем там возможность снимать нажатую в данным момент клавишу столько раз сколько снимаем. наверняка есть такая возможность. Если таки нет - меняем или модифицируем библиотеку.

Но пока не добьёмся, чтобы печатала то, что надо - о движках даже не думаем.

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Правильно. 

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

Vitali-71 пишет:

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

Существует вариант, когда отслеживается момент изменения состояния.

Тогда в сериал логично будет выводиться однократно "кнопка нажата" и однократно "кнопка отпущена". Как устроена конкретно Ваша библиотека, я не знаю.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

andriano пишет:

Vitali-71 пишет:

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

Существует вариант, когда отслеживается момент изменения состояния.

Тогда в сериал логично будет выводиться однократно "кнопка нажата" и однократно "кнопка отпущена". Как устроена конкретно Ваша библиотека, я не знаю.

Вот сама библиотека!

https://cloud.mail.ru/public/FvSh/quyf5nwFV

Vitali-71
Offline
Зарегистрирован: 25.04.2017

Блин, не получается... Не соображу никак! Помогите PLEASE!