Программа для управления ШД

astral_
Offline
Зарегистрирован: 02.12.2019

b707 пишет:

да используйте вы что хотите. Не хотите учиться - не надо.

Ok)))

-Код неправильный, работать не будет.

-Проверил, работает.

-Не уверен, если работает, то потом не будет, надо флаги.

-Мне не надо запоминать состояние, зачем флаги?

-С флагами проще, почему не скажу, надо разбираться.

-Я разобрался почему не работало, сейчас работает, флаги не нужны.

-Не все режимы работают.

-Все.

-Не хотите учиться!

Вот такая логика.. Ладно, все равно спасибо за участие в решении, всего))))

Гриша
Offline
Зарегистрирован: 27.04.2014

astral_

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

Ваша программа, Ваш выбор.

Гриша
Offline
Зарегистрирован: 27.04.2014

Флаги - это один из способов упрощения кода, и умение ими пользоваться поможет в будущем. Эта программа хороший учебный матерьял решить ее 2 способами. 

nik182
Offline
Зарегистрирован: 04.05.2015

Флаги , кнопки.. Пока нажата первая, крутится быстро, независимо от того что там ещё нажато. Если нажата вторая, стоит. Ничего не нажато крутится медленно.

int button1 = 8;
int button2 = 9;
int f1 = 0;
int f2 = 1;
int f3 = 2;
int f4 = 3;

int buttonState = 0;

void setup()
{
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(f1, OUTPUT);
  pinMode(f2, OUTPUT);
  pinMode(f3, OUTPUT);
  pinMode(f4, OUTPUT);
}

  void loop()
  {
    if (digitalRead(button1) == LOW)
    {
      digitalWrite(f4, LOW);
      digitalWrite(f1, HIGH);
      delay(50);
      digitalWrite(f1, LOW);
      digitalWrite(f2, HIGH);
      delay(50);
      digitalWrite(f2, LOW);
      digitalWrite(f3, HIGH);
      delay(50);
      digitalWrite(f3, LOW);
      digitalWrite(f4, HIGH);
      delay(50);
      return;
    };

    if (digitalRead(button2) == LOW)
    {
      digitalWrite(f1, LOW);
      digitalWrite(f2, LOW);
      digitalWrite(f3, LOW);
      digitalWrite(f4, LOW);
      return;
    };
    digitalWrite(f4, LOW);
    digitalWrite(f1, HIGH);
    delay(100);
    digitalWrite(f1, LOW);
    digitalWrite(f2, HIGH);
    delay(100);
    digitalWrite(f2, LOW);
    digitalWrite(f3, HIGH);
    delay(100);
    digitalWrite(f3, LOW);
    digitalWrite(f4, HIGH);
    delay(100);
 }

 

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

nik182 -    "return из лупа - это круто" - почти стихи...

nik182
Offline
Зарегистрирован: 04.05.2015

Мне вот только интересно, за 50 постов никто не сказал ТС что использовать D0 D1 не стоит, во избежании... 

astral_
Offline
Зарегистрирован: 02.12.2019

nik182 пишет:

Флаги , кнопки.. Пока нажата первая, крутится быстро, независимо от того что там ещё нажато. Если нажата вторая, стоит. Ничего не нажато крутится медленно.

Можно использовать функцию return, но это принципиально не отличается от цикла wile, про вариант с которым я спрашивал.

astral_
Offline
Зарегистрирован: 02.12.2019

Гриша пишет:

astral_

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

Ваша программа, Ваш выбор.

Код из первого поста не рабочий, иначе этого поста бы не было. Если ошибка в том, что нужно использовать флаги, то я не понял в чем она заключается, про ошибку в том, что всегда выполняется вся программа, а не часть зацикливается, понятно, я решил использовать цикл wile, можно или нельзя никто не сказал. Похоже, что с return будет самый простой вариант, пока его использую, это будет маленьким шажком?

Гриша
Offline
Зарегистрирован: 27.04.2014

astral_ пишет:

Код из первого поста не рабочий, иначе этого поста бы не было. 

пишите свой последний рабочий вариант... а то может только всех запутали... 

astral_
Offline
Зарегистрирован: 02.12.2019

nik182 пишет:

Мне вот только интересно, за 50 постов никто не сказал ТС что использовать D0 D1 не стоит, во избежании... 

Я бы не использовал эти выводы, но на самом деле у меня восьмифазный двигатель, для сокращения кода, я оставил 4 фазы и при этом удобно использовать все 8 выводов одной планки, значит D0,D1. Знаю что эти выводы используются для приема и передачи данных, но при этом они должны работать, как и другие выводы, так чего нужно избежать? Или принципиально мне нужно самому выяснить?

astral_
Offline
Зарегистрирован: 02.12.2019

Гриша пишет:

astral_ пишет:

Код из первого поста не рабочий, иначе этого поста бы не было. 

пишите свой последний рабочий вариант... а то может только всех запутали... 

Я писал, что возьму код от nik182, с функцией return.

nik182
Offline
Зарегистрирован: 04.05.2015

Если захочется что то ввести через сериал могут возникнуть проблемы. А так да, обычные выводы общего назначения. 

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

astral_ пишет:

Я писал, что возьму код от nik182, с функцией return.

весь день со всеми спорил, бил себя в грудь "у меня все работает" - а как выложили готовое - тут же отказался от своего...

Похоже просто сидел и ждал, чтобы сделали за него... Халявщик одним словом...

astral_
Offline
Зарегистрирован: 02.12.2019

b707 пишет:

astral_ пишет:

Я писал, что возьму код от nik182, с функцией return.

весь день со всеми спорил, бил себя в грудь "у меня все работает" - а как выложили готовое - тут же отказался от своего...

Похоже просто сидел и ждал, чтобы сделали за него... Халявщик одним словом...

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

Гриша
Offline
Зарегистрирован: 27.04.2014

а свой рабочий код так и не показали.... ну да бог с вами.

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

astral_ пишет:

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

Я не собирался вам ничего "выдавать". На форуме вообще считается неверным давать новичкам готовые решения. Правильнее когда человек выработает свое - пусть долго, пусть кривое, но сам. Этого я и пытался добиться от вас целый день.

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

 

astral_
Offline
Зарегистрирован: 02.12.2019

b707 пишет:

astral_ пишет:

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

Я не собирался вам ничего "выдавать". 

Я это давно понял, просто хотелось поумничать, все что вы выдали полезного - это то что условие для второй кнопке выполняется один раз, я признал, что не заметил такую очевидную вещь, но на этом все. 

astral_
Offline
Зарегистрирован: 02.12.2019

Гриша пишет:

а свой рабочий код так и не показали.... ну да бог с вами.

Ну почему нужно одно и то же писать по несколько раз? Сначала я писал, что добавил второе условие для первого оператора if, потом заменил его на цикл while  и написал как, код я представил в первом посте, надо его еще раз писать заменив одну строчку? Ну да Бог с вами

int button1 = 8; 
int button2 = 9;          
int f1 = 0;
int f2 = 1;
int f3 = 2;
int f4 = 3;
int f5 = 4;
int f6 = 5;
int f7 = 6;
int f8 = 7;
int buttonState = 0;   
      
void setup()
{
pinMode(button1, INPUT); 
pinMode(button2, INPUT);  
pinMode(f1, OUTPUT);
pinMode(f2, OUTPUT);
pinMode(f3, OUTPUT);
pinMode(f4, OUTPUT);
pinMode(f5, OUTPUT);
pinMode(f6, OUTPUT);
pinMode(f7, OUTPUT);
pinMode(f8, OUTPUT);
}

void loop()
{
while(digitalRead(button1) == HIGH&&digitalRead(button2) == HIGH)
{
digitalWrite(f8, LOW);
digitalWrite(f1, HIGH);

delay(1500);

digitalWrite(f1, LOW);
digitalWrite(f2, HIGH);

delay(1500);

digitalWrite(f2, LOW);
digitalWrite(f3, HIGH);

delay(1500);

digitalWrite(f3, LOW);
digitalWrite(f4, HIGH);

delay(1500);
digitalWrite(f4, LOW);
digitalWrite(f5, HIGH);

delay(1500);

digitalWrite(f5, LOW);
digitalWrite(f6, HIGH);

delay(1500);

digitalWrite(f6, LOW);
digitalWrite(f7, HIGH);

delay(1500);

digitalWrite(f7, LOW);
digitalWrite(f8, HIGH);

delay(1500);
}

if (digitalRead(button1) == LOW)
{
digitalWrite(f8, LOW);
digitalWrite(f1, HIGH);

delay(500);

digitalWrite(f1, LOW);
digitalWrite(f2, HIGH);

delay(500);

digitalWrite(f2, LOW);
digitalWrite(f3, HIGH);

delay(500);

digitalWrite(f3, LOW);
digitalWrite(f4, HIGH);

delay(500);
digitalWrite(f4, LOW);
digitalWrite(f5, HIGH);

delay(500);

digitalWrite(f5, LOW);
digitalWrite(f6, HIGH);

delay(500);

digitalWrite(f6, LOW);
digitalWrite(f7, HIGH);

delay(500);

digitalWrite(f7, LOW);
digitalWrite(f8, HIGH);

delay(500);
}

if (digitalRead(button2) == LOW)
{
digitalWrite(f1, LOW);
digitalWrite(f8, HIGH);

delay(1000);

digitalWrite(f8, LOW);
digitalWrite(f7, HIGH);

delay(1000);

digitalWrite(f7, LOW);
digitalWrite(f6, HIGH);

delay(1000);

digitalWrite(f6, LOW);
digitalWrite(f5, HIGH);

delay(1000);
digitalWrite(f5, LOW);
digitalWrite(f4, HIGH);

delay(1000);

digitalWrite(f4, LOW);
digitalWrite(f3, HIGH);

delay(1000);

digitalWrite(f3, LOW);
digitalWrite(f2, HIGH);

delay(1000);

digitalWrite(f2, LOW);
digitalWrite(f1, HIGH);

delay(800);
}
}

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

 

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

astral_ пишет:

все что вы выдали полезного - это то что условие для второй кнопке выполняется один раз

это все что нужно для решения.

 

astral_
Offline
Зарегистрирован: 02.12.2019

b707 пишет:

astral_ пишет:

все что вы выдали полезного - это то что условие для второй кнопке выполняется один раз

это все что нужно для решения.

 

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

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

astral_ пишет:

Ну так я сразу и решил проблему, просто кто-то не поверил, что работает и не верит и сейчас,

глядя на ваш код - не верю и сейчас :)

Где в этом коде остановка мотора?

И сколько надо держать кнопку, интересно, чтобы она сработала? :) - 12 секунд?

Я ж говорю, что вы так и не смогли решить задачу - потому и специально сидели, тянули, пудрили всем мозги на форуме, ожидая что кто-то не выдержит вашего тупизма и напишет вам код...

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

astral_
Offline
Зарегистрирован: 02.12.2019

b707 пишет:

astral_ пишет:

Ну так я сразу и решил проблему, просто кто-то не поверил, что работает и не верит и сейчас,

глядя на ваш код - не верю и сейчас :)

Где в этом коде остановка мотора?

Там вместо остановки обратное вращение, я ранее писал, что это второй вариант нажатия второй кнопки. Не убедило?

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

astral_ пишет:

Там вместо остановки обратное вращение, я ранее писал, что это второй вариант нажатия второй кнопки. Не убедило?

переобуваетесь на ходу?

В таком режиме работать будет, но невероятно задумчиво. От нажатия кнопки до смены режима будет проходить до 12 секунд.

Похоже,  сомнения в том, что у вас "работает" - оказались не бесповенными. Вы не решили проблему, а просто подогнали ТЗ под тот кривой код, что осилили написать. Лишь бы не учиться.

 

astral_
Offline
Зарегистрирован: 02.12.2019

b707 пишет:

astral_ пишет:

Ну так я сразу и решил проблему, просто кто-то не поверил, что работает и не верит и сейчас,

Я ж говорю, что вы так и не смогли решить задачу - потому и специально сидели, тянули, пудрили всем мозги на форуме, ожидая что кто-то не выдержит вашего тупизма и напишет вам код...

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

Если я тупой, то как же я так верно все рассчитал? Что-то не клеится.. А, впрочем, что с вас взять? Если общение с тугодумом немного забавляло, то с хамом нет, так что идите лесом.

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

astral_ пишет:

так что идите лесом.

ну конечно, когда есть готовый код - теперь самое время обидится и всех послать :)

Ну ничего, вы же еще придете? с такими-то "знаниями" - наверняка

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

astral_ пишет:
сходу разобрался
astral_ пишет:
Можно использовать функцию return, но это принципиально не отличается от цикла wile,
А вот за это нельзя не выпить!!!

Кстати, попробуйте ещё использовать функцию const - тоже должно сработать.

astral_
Offline
Зарегистрирован: 02.12.2019

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

astral_ пишет:
сходу разобрался
astral_ пишет:
Можно использовать функцию return, но это принципиально не отличается от цикла wile,
А вот за это нельзя не выпить!!!

Кстати, попробуйте ещё использовать функцию const - тоже должно сработать.

Поросенок вернулся похрюкать))) Ну выпей, конечно! И иди туда же.

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

Ну, вот, я тут радуюсь его успехам, а он похамливает! В "Спортлото" что-ли написать?

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

astral_ пишет:

Поросенок вернулся похрюкать))) Ну выпей, конечно! И иди туда же.

А ты все еще здесь? а нафига? Код же получил?