Странно себя ведут двигатели через некоторое время

Dantes3000
Offline
Зарегистрирован: 12.04.2018

По идее они должны по секунде работать в разные стороны с перерывом. Так и есть... секунд 20 поработали, а потом... какой-то сбой... начинают быстро двигаться в разные стороны, но не по 1 сек, а где-то по 50-100 мсек... на самом моторе это чуть меньше половины оборота. 

 

int IN1 = 3; //направление 1
int IN2 = 2; //направление 1

int IN3 = 7; //направление 2
int IN4 = 6; //направление 2

int EN1 = 10; //вкл 1
int EN2 = 9; //вкл 2
int i;

void setup()
{
pinMode (IN2, OUTPUT);
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN1, OUTPUT);
pinMode (EN2, OUTPUT);
pinMode (EN1, OUTPUT);
}
void loop()
{
vpered(1000);
delay(100);
nazad(1000);
delay(100);
}

void vpered(int g)
{
digitalWrite (IN2, HIGH);
digitalWrite (IN1, LOW); 
digitalWrite (IN4, HIGH);
digitalWrite (IN3, LOW); 
analogWrite(EN1, 100);
analogWrite(EN2, 100);
delay(100);

for(int t=millis(); millis()-t<g; delay(10))
{
analogWrite(EN1, 240);
analogWrite(EN2, 240);
}
analogWrite(EN1, 0);
analogWrite(EN2, 0);
}

void nazad(int g)
{
digitalWrite (IN2, LOW);
digitalWrite (IN1, HIGH); 
digitalWrite (IN4, LOW);
digitalWrite (IN3, HIGH); 
analogWrite(EN1, 100);
analogWrite(EN2, 100);
delay(100);

for(int t=millis(); millis()-t<g; delay(10))
{
analogWrite(EN1, 240);
analogWrite(EN2, 240);
}
analogWrite(EN1, 0);
analogWrite(EN2, 0);
}

 

inspiritus
Онлайн
Зарегистрирован: 17.12.2012

Попробуйте написать подробный комментарий для каждой строки.

Dantes3000
Offline
Зарегистрирован: 12.04.2018

Та это тестовый код, тут комменты не нужны и так всё ясно.

Путём недолгих раздумий понял, что mills возвращает ведь не int...Поэтому и ошибка...как тогда писать функции, которые будут выполняться определенное время?

ven-til
Offline
Зарегистрирован: 13.02.2018

Dantes3000 пишет:

Путём недолгих раздумий понял, что mills возвращает ведь не int...Поэтому и ошибка...как тогда писать функции, которые будут выполняться определенное время?

Так же использовать не int в функциях. Например вместо int использовать тип данных соответствующий millis()

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Можно ещё скастовать (преобразовать) результат millis() к нужному типу, в т.ч. и int тоже. Или сделать типа так и не мучиться с приведением:

#define intMillis() ((int)millis())

 

nevkon
Offline
Зарегистрирован: 20.01.2015

Ну так и используйте unsigned long. Какие проблемы?

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

Dantes3000 пишет:
тут комменты не нужны и так всё ясно.

Ну, Вы тогда определитесь, Вам "всё ясно" или

Dantes3000 пишет:
 какой-то сбой.

Оба одновременно не бывает.

Dantes3000
Offline
Зарегистрирован: 12.04.2018

nevkon пишет:

Ну так и используйте unsigned long. Какие проблемы?

Проблема в том, что это мой первый опыт в програмировании ардуинки.

Dantes3000
Offline
Зарегистрирован: 12.04.2018

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

Оба одновременно не бывает.

Что это значит?

b707
Онлайн
Зарегистрирован: 26.05.2017

Dantes3000 пишет:

Что это значит?

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

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

Я как на этот for() глянул, так чуть сознание не потерял. Это даже похлеще, чем func((int&)pole[n][n]).

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Вполне нормальный фор .. чего там терять-то? Просто код явно стырен ТС-ом, только и всего. Очередной мимикрирующий студент детекдед. Делов то.

Dantes3000
Offline
Зарегистрирован: 12.04.2018

Arhat109-2 пишет:

Вполне нормальный фор .. чего там терять-то? Просто код явно стырен ТС-ом, только и всего. Очередной мимикрирующий студент детекдед. Делов то.

Код это мой, он ПРОБНЫЙ, мне пофиг на оптимизацию сейчас.

До этого я работал с другим Си-подобным языком, где, например, код

function взять_(int g)
{
int x, y;
  for (int t=gettime(); gettime()-t<g; sleep(20))
  { sleep(30);
  if(findimage(1,#взять[0][0],3613463,#x,#y,0,0,ex_KIB,ey_KIB,w_KIB)==1) {sleep(220); sendmouse(LEFT,x,y,w_KIB); sleep(150); return 1;}
  }
return 0;
}

вполне работоспособный. Ну не успел я пока прочитать весь грёбный мануал за один день...что теперь на форуме нельзя совета спросить???

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну может и ваш .. я хотел отметить что он вполне понятный иработоспособный, хоть и написан "не по сишному".. и только. :)

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

В очень интересное время живем: не успел за день изучить язык программирования - беги на форум, выноси всем мозги. Что, два-три дня посидеть уже никак?  Земная ось завтра уже переломится, а у вас еще даже моторы не кручены?

Dantes3000
Offline
Зарегистрирован: 12.04.2018

Та нет, форум ведь для того и придуман, чтобы решать задачи вселенского масштаба. Адруино с ними, конечно, справится, но всё остальное на форуме запрещено обсуждать/спрашивать. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Нуну. Выучить язык Си за день @^@. Вот тогда почему математику еще быстрее не учат . Там 10 цифр и +,-,*,/ ну и =. Это все в час можно пробежать :)

А тем временем на Марсе https://www.youtube.com/watch?v=EpYhhD3jfrw

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

Dantes3000 пишет:

Что это значит?

Это значит, что либо "Вам всё ясно", либо у Вас "непонятный сбой". И то и другое возможно, но не оба одновременно.

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

Dantes3000 пишет:

До этого я работал с другим Си-подобным языком, где, например, код

for (int t=gettime(); gettime()-t<g; sleep(20))

вполне работоспособный. 

Он и здесь вполне работоспособный.

Dantes3000 пишет:

Ну не успел я пока прочитать весь грёбный мануал за один день...что теперь на форуме нельзя совета спросить???

Почему нельзя? Можно. Каждый сам для себя решает потратить ещё один день (если одного не хватило) или бежать на форум. Вы решили так - Ваше право.

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Dantes3000 пишет:

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

Меня вот интересует, почему "для чего придуман форум" старожилам форума объясняют исключительно люди, зарегистрировавшиеся на форуме не более трех дней назад?

Dantes3000
Offline
Зарегистрирован: 12.04.2018

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

Не ну...согласись...и посмотри ответы на мой вопрос...Сколько человек реально помогли и сколько зашли тупо порофлить?

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Dantes3000 пишет:

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

Правильно считают.

Какой смысл спрашивать на форуме то, что есть в книжке (притом, в известной книжке).

Знаете, задавать глупые вопросы - это неуважение к окружающим.

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

inspiritus
Онлайн
Зарегистрирован: 17.12.2012

qwone, итить, я сколько по ютубу брожу, ни разу таких гадостей не встречал. ГДЕ ВЫ ТАМ КОПАИТИСЬ ???? , как Вам не айайайай! Исчо и Марс приплели :)))

Dantes3000
Offline
Зарегистрирован: 12.04.2018

andriano пишет:

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

Таких вопросов в этой теме нет, не приплетай сюда подобное.

Обязательно найдется уникум, который напишет "ищи в гугле" и т.д. Какой тогда смысл в форуме, если всё можно узнать где-нибудь в книге или в гугле? Зачем раздел "вопросы по программированию"? 

Вон даже в далёком 2014-ом некий jeka_tm создал тему

jeka_tm пишет:

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

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

inspiritus
Онлайн
Зарегистрирован: 17.12.2012

УвазЖаемый Эдмон! Вам неспроста было предложено написать коммент к каждой строке. Однако Вам оказалось, или лениво, или невозможно. 

Во-первом случае лес слева, во-втором, или идите учитесь пониманию чужого кода, или в " исчу исполнителя".

Dantes3000
Offline
Зарегистрирован: 12.04.2018

Неспроста? Окей...допустим, сделал я комменты. И что это даст? Объясни мне, как старпер'ожил - новичку. 

Это мне уже сейчас понятно, что в int можно записать число до 32767, именно поэтому движки начинали тупить после полминуты работы...но какой комментарий я должен был оставить к циклу for, чтобы понять это?

inspiritus
Онлайн
Зарегистрирован: 17.12.2012

Для начала Свои эпитеты с апострофами засуньте Себе в ухо, потом извинитесь и придите снова с тремя КУ!

NO VI CHOK

Dantes3000
Offline
Зарегистрирован: 12.04.2018

А мне "из леса" виднее какими эпитетами пользоваться

inspiritus
Онлайн
Зарегистрирован: 17.12.2012

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

Пришли, показали невежество своё, нахамили...

стыдитесь и посыпайтесь пеплом. (пока возможно нерадиоактивным)

Клапауций 555
Offline
Зарегистрирован: 10.03.2018

Dantes3000 пишет:

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

Не ну...согласись...и посмотри ответы на мой вопрос...Сколько человек реально помогли и сколько зашли тупо порофлить?

если ты вызываешь желание сделать с тобой...(как эта па-русски?) да - порофлить, то кто виноват - ты, который считает, что мануалы читают лохи, или я?

 

inspiritus
Онлайн
Зарегистрирован: 17.12.2012

OMG !!!! Несчастный! Ты пробудил древнее ЗЛО !!! О горе всем нам.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Дантес, Вам сразу дали 4 полезных совета (посты 1,3,4,5), которые в т.ч. и отвечают на поставленный Вами вопрос "как тогда тут.." (ваш пост №2) .

Вам в этих ответах что-то оказалось непонятным? Что именно?

P.S. Вы зря дальше полезли в перепалку с местными троллями, пардон "старожилами". По большей части, они - правы, всех задирает по нескольку раз на дню отвечать на одни и теже вопросы от людей, которые считают что "Знание не нужно, достаточно спросить на форуме". Я уже просто читаю темы исключительно выборочно и не более 2-3 за один раз. И не факт, что в следующий раз я снова наткнусь на эту тему и кому-то отвечу .. тут кроме бездарных студентов и троллей никого и нет. Специалистов  если и есть, по пальцам на одной руке и они приходят сюда также редко.

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

Dantes3000 пишет:
Зачем раздел "вопросы по программированию"?
А что, есть такой раздел?

Клапауций 555
Offline
Зарегистрирован: 10.03.2018

ЕвгенийП пишет:
А что, есть такой раздел?

уже - нет. О_О

Dantes3000
Offline
Зарегистрирован: 12.04.2018

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

Dantes3000 пишет:
Зачем раздел "вопросы по программированию"?
А что, есть такой раздел?

 

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

Вроде, раздел называется "Программирование". Хотя, может это у меня с чтением проблемы.

Dantes3000
Offline
Зарегистрирован: 12.04.2018

Ну это просто фейспалм...можешь дальше не продолжать

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

Да, я как-то и не собирался. У меня есть более интересные занятия, чем вразумлять тех, кому всё ясно, но при этом непонятные сбои.