Объясните на пальцах по условию if где туплю ((
- Войдите на сайт для отправки комментариев
Чт, 24/02/2022 - 10:52
Есть такой кусок кода:
ISR(TIMER1_COMPA_vect){
digitalWrite(STEP_PIN, !digitalRead(STEP_PIN));
digitalWrite(Mode1, !digitalRead(Mode1));
STEP=++STEP;
if (STEP > TARGET_STEP){
STEP=0; Serial.println("REVERSE"); digitalWrite(DIR_PIN,!digitalRead(DIR_PIN));
digitalWrite(Mode3,!digitalRead(Mode3));
} else;
}
Собственно по прерыванию таймера инвертируем ногу STEP шагового драйвера. Одновременно считаю количество шагов ++STEP. Затем по условию if хочу сравнить это количество с целевым и при превышении изменить состояние ноги DIR -- изменить направление вращения и сбросить STEP в ноль.
Но в результате имею постоянное изменение направления вращения. Шаг туда, шаг обратно.
Второй день туплю, не понимаю, что делаю неправильно.
строка 06 очень интересна ))
Из приведенного кода понятно, что направление меняется, как только STEP становится больше TARGET_STEP. А чему равна TARGET_STEP - не ясно. И с какой частотой таймер генерирует прерывания - тоже непонятно. Вообще непонятно, что вы хотите от нас по этому кусочку кода?
Что это такое?
Инкремент счетчика шагов.
Код нужно выкладывать полностью. По куску ничерта не поймёшь.
А вот это
Бред сивой кобылы.
Инкремент счетчика шагов.
Нет, это именно бред сивой кобылы, а не инкремент счётчика. Инкремент пишется вот так:
строка 06 очень интересна ))
Из приведенного кода понятно, что направление меняется, как только STEP становится больше TARGET_STEP. А чему равна TARGET_STEP - не ясно. И с какой частотой таймер генерирует прерывания - тоже непонятно. Вообще непонятно, что вы хотите от нас по этому кусочку кода?
TARGET_STEP объявляется раньше, =400.
Мне собственно надо понять, в таком варианте оно работает или я тупо не понимаю, как if работает. За мысль по поводу частоты прерываний спасибо, надо найти сколько тактов на шаг для драйвера TMC2208 нужно.
Вам
собственно надо понять
Код нужно выкладывать полностью.
И пока Вы этого не поймёте, дело не сдвинется.
Нет, это именно бред сивой кобылы, а не инкремент счётчика. Инкремент пишется вот так:
Вполне возможно, что и бред. Но у меня только так работает увеличение STEP
Нет, это именно бред сивой кобылы, а не инкремент счётчика. Инкремент пишется вот так:
Вполне возможно, что и бред. Но у меня только так работает увеличение STEP
видимо компилятор бред выкидывает )))
Вполне возможно, что и бред. Но у меня только так работает увеличение STEP
Вы задаёте вопросы, чтобы учиться? Или чтобы поспорить? Скажите прямо и я просто перестану Вам что-либо писать. Мне эти посты нах не нужны. Вам, если учиться не хотите - тоже. Тогда зачем?
Вполне возможно, что и бред. Но у меня только так работает увеличение STEP
У тя канпилятор фальшивый.
Разобрался, всем спасибо )
Разобрался, всем спасибо )
А выложить решение для будущих поколений вопрошателей? Или тока под себя гребём?
Разобрался, всем спасибо )
ага, или наврал, потому что код выкладывать лень
Инкремент-то заработал или так и оставил бредятину в коде?
Инкремент-то заработал или так и оставил бредятину в коде?
Так он и в таком бредовом виде работает. С чего ему не работать? Бред бредом, но инкрементит.
Для надежности выполнения и читаемости лучше еще так: step=step++ ;-)
А то вариант ТСа компилятор может спутать со: step+=step, а это уже ой ))
Разобрался, всем спасибо )
ага, или наврал, потому что код выкладывать лень
Инкремент-то заработал или так и оставил бредятину в коде?
Оставил конечно, мне ж надо чтоб работало.
Разобрался, всем спасибо )
А выложить решение для будущих поколений вопрошателей? Или тока под себя гребём?
драйвер в микрошаге работал. На один шаг надо было 16 раз тикнуть.
Оставил конечно, мне ж надо чтоб работало.
Компилятор лучше настоящий купи. На этом сайте тебе любой старожил продаст, недорого, до $500. +80 к IQ
Разобрался, всем спасибо )
ага, или наврал, потому что код выкладывать лень
Инкремент-то заработал или так и оставил бредятину в коде?
Оставил конечно, мне ж надо чтоб работало.
Так а что древних записей боишься? Например, староязычное: I = I+ 1; ? Опять что-то с религией канпилятура?
Для надежности выполнения и читаемости лучше еще так: step=step++ ;-)
А то вариант ТСа компилятор может спутать со: step+=step, а это уже ой ))
а чё не step+=1; ? )))
Так а что древних записей боишься? Например, староязычное: I = I+ 1; ? Опять что-то с религией канпилятура?
Тогда, может, вот так?
Тогда, может, вот так?
троллите или просто пятница?
а чё не step+=1; ? )))
А то, что это ущемляет права ТСа на использование "++" по своему усмотрению в любом месте программы. Не толерантно, короче
Почему тролю? ТС же хочет, чтобы инкремент работал. Работает!
Почему тролю? ТС же хочет, чтобы инкремент работал. Работает!
если два обнулённых топора сходу в моём скетче такой приём не понял, а вы хотите от ТС )))
Почему тролю? ТС же хочет, чтобы инкремент работал. Работает!
Хм, интригующе! А ещё извратнее, Евгений Петрович - ради пятницы, можно посмотреть?)
Самый извращённый инкремент? Можно, только давайте уже не сегодня. Завтра подумаю. И Вы, кстати, подумайте, давайте поприкалываемся.
Сегодня уж башка пухнет, весь день одновременно были включены CNN и DW - перекрикивали друг друга, а параллельно читал в сети прессу других стран через гугловский перевод, ну и за нашей и украинской тоже краем глаза следил. Да ещё тут Йокерит с турнира снялся. Уже не могу.
Самый извращённый инкремент? Можно, только давайте уже не сегодня. Завтра подумаю. И Вы, кстати, подумайте, давайте поприкалываемся.
Я на такие придумки не сильно способен, но подумаю. Только не с утра - утром к детям, ремонт млин...
Сегодня уж башка пухнет, весь день одновременно были включены CNN и DW - перекрикивали друг друга, а параллельно читал в сети прессу других стран через гугловский перевод, ну и за нашей и украинской тоже краем глаза следил. Да ещё тут Йокерит с турнира снялся. Уже не могу.
Ну я тоже иногда слежу, но стараюсь на тематическом форуме "опускать" это.
Почему тролю? ТС же хочет, чтобы инкремент работал. Работает!
Хм, интригующе! А ещё извратнее, Евгений Петрович - ради пятницы, можно посмотреть?)
Моя идея - исходить из минимализма - только средствами языка, без дополнительных аппаратных фокусов.
Я пошел по "лайтовому" (для меня, по крайней мере) способу:
Строки 13-15 можно еще сократить, пока не соображу как "по красивее" )))
Я так думаю, что если этот код переписать на пока мне не всегда понятные инструкции со сдвигами битов и тп, то (наверное) еще "красивее" будет. Могу ошибаться.
Делать на i битовую операцию И чтоб оставлять только младшие три бита.
А я как раз редактировал по этому поводу свой пост. Но (как выше написал) пока не силен в этом. (
В чем? В битовых операциях? ЕвгенийП выложил сегодня в песочнице книжку, там в самом начале двоичная система очень просто описана
i &= 0x07;
Деда перестарался ))) Там на выхлопе - 8, 16 ,24 ,32 и тд )))
Наверное без For должно быть? Ща попробую.
наскока я понимаю, counter - щёччик единичных битов в числе? Я всю тему не читал, просто
Деда, вот так отлично работает!
Деда, вот так отлично работает!
Нет. Вдумайся в
14
if
(mask > 0) {
15
mask = 0x80;
16
}
наскока я понимаю, counter - щёччик единичных битов в числе? Я всю тему не читал, просто
Нет, это просто инкрементируемый счётчик. Увеличивается на 1 при каждом прохождении, т.е. задача, наиболее извращённо написать операцию ++counter
Аааа. Тада, можно я в этом участвовать не буду?
Аааа. Тада, можно я в этом участвовать не буду?
Уже низзя!! ))
Деда, вот так отлично работает!
Нет. Вдумайся в
Я тоже афигел, но проверил и работает! Первый (после Евгения Петровича) аццкий способ найден! )))
Ещё будя? )
Собсна, у меня две идеи. Одна уже готова, а над второй работаю. Первая - вот она:
Вторую выложу по мере готовности.
Собсна, у меня две идеи. Одна уже готова, а над второй работаю. Первая - вот она:
Вторую выложу по мере готовности.
Евгений Петрович, интересное решение, но для использования без перефирии (так же получается?) сериал вроде как нельзя. Или можно? Ну только честно.
Нещитова. Потому как "выводить" - это не = "генерировать" (выводить можна и на дисплей, например).
Аааа. Тада, можно я в этом участвовать не буду?
Уже низзя!! ))
Деда слился? Без "разрешения"? ))
Деда слился? Без "разрешения"? ))
Смысла в изращениях не вижу, я не настока владею этим вашим лживым С++