Когда в сериал посмотрел то увидел что при делении на 7 переход осуществляется через 0. Тоисть всего 8 что соответствует одной маске.
Нет там деления на 7. И "перехода через ноль" нет.
Мне кажется, тебе будет проще, если использовать строго формальные обозначения. "Деление" появляется уже потом. Операция & - это никакое не деление, это побитовое логическое "И".
Результатом операции (x & 0x07) будет установка в ноль всех битов числа х, начиная с третьего (считаем от нуля). Поскольку 2 в степени 3 = 8, то арифметически это эквивалентно операции x%8 - взятию остатка от деления на восемь.
Если тебе надо мигать определенными кодами, лучше всего взять переменную типа unsigned long и договориться, что один бит в ней имеет длительность, допустим, 100 миллисекунд и кодировать длительности нулями и единицами. Ведущие нули пропускай. Допустим, тот же SOS закодируется как
0b1010100110110110010101
три точки, три тире, три точки.
Единица - гореть, Ноль - не гореть.
Длительность точки - 100мс, длительность тире = 2*длительность точки, паузы в знаке = длительности точки, пауза между знаками = длительсти тире. Думаю, в long влезуть все желаемые коды, там 32 бита. Не влезуть, тогда long long (если есть такой)
Могу написать код на моем таймере, для примера. нужна 1 функция всего, на все коды.
Вот! Вот то и надо! unit_32. В сообщение √12 я и спросил об этом варианте. Ибо хоть я и не программист но нестандартная логика мышления подсказывала что нужно просто взять одну большую маску высчитать паузы и блинки и перебирать ее опять же таки с высчитаным интервалом. Вот это и будет самый простой вариант.
Полноценно не могу ответить. Пигу с тел. До компа доберусь после обеда и если глаза позволят то изваяю именно так.
Спасибо за объяснения! Насчет & надо еще погрызть для твердого понимания.
логика мышления подсказывала что нужно просто взять одну большую маску высчитать паузы и блинки и перебирать ее опять же таки с высчитаным интервалом. .
ты удивишься. но все (ВСЕ) представленные в этой ветке примеры с битовой маской - именно так и работают. Начиная с самого первого, который ты скопировал в заголовке темы...
Точно? Вы же хотели там интервалы по целых 6 секунд! Хватит 32-то? Посчитайте внимательно какого размера у Вас будет минимальный (атомарный) интервал при этом. Может сразу на 64 бита забиваться? Такой тип данных тоже есть, если что.
maxvalin, а чего здесь разжевывать? Что имелось в виду - понятно, непонятно только, почему написано именно в таком виде. Ну так этого, кроме автора, все равно никто сказать не может.
непонятно только, почему написано именно в таком виде.
Так написано, чтобы каждый бит 32-битной маски был виден. Бинарный тип записи типа B00110110 определен только для типа byte. поэтому long int формируется из четырех байт путем сдвига. Еще можно было описать маску как union байтового массива и лонга...
Если знаете, как сделать это лучше - с удовольствием послушаю.
Нет там деления на 7. И "перехода через ноль" нет.
Мне кажется, тебе будет проще, если использовать строго формальные обозначения. "Деление" появляется уже потом. Операция & - это никакое не деление, это побитовое логическое "И".
Результатом операции (x & 0x07) будет установка в ноль всех битов числа х, начиная с третьего (считаем от нуля). Поскольку 2 в степени 3 = 8, то арифметически это эквивалентно операции x%8 - взятию остатка от деления на восемь.
НА ВОСЕМЬ, а не "на семь с переходом через ноль".
Если тебе надо мигать определенными кодами, лучше всего взять переменную типа unsigned long и договориться, что один бит в ней имеет длительность, допустим, 100 миллисекунд и кодировать длительности нулями и единицами. Ведущие нули пропускай. Допустим, тот же SOS закодируется как
0b1010100110110110010101
три точки, три тире, три точки.
Единица - гореть, Ноль - не гореть.
Длительность точки - 100мс, длительность тире = 2*длительность точки, паузы в знаке = длительности точки, пауза между знаками = длительсти тире. Думаю, в long влезуть все желаемые коды, там 32 бита. Не влезуть, тогда long long (если есть такой)
Могу написать код на моем таймере, для примера. нужна 1 функция всего, на все коды.
Вот! Вот то и надо! unit_32. В сообщение √12 я и спросил об этом варианте. Ибо хоть я и не программист но нестандартная логика мышления подсказывала что нужно просто взять одну большую маску высчитать паузы и блинки и перебирать ее опять же таки с высчитаным интервалом. Вот это и будет самый простой вариант.
Полноценно не могу ответить. Пигу с тел. До компа доберусь после обеда и если глаза позволят то изваяю именно так.
Спасибо за объяснения! Насчет & надо еще погрызть для твердого понимания.
ты удивишься. но все (ВСЕ) представленные в этой ветке примеры с битовой маской - именно так и работают. Начиная с самого первого, который ты скопировал в заголовке темы...
кодировать длительности нулями и единицами.
для вас просто а я вот сижу и никак не пойму как этот "регистр " заставить переходить 20 раз например...
то что вылезло стыдно выкладывать.
Одним словом :закидайте тапочками((
млятьвот что значит не учится.
сижу и читаю сдвиговый регистр, что-то говорит что это немного не то.
(http://robotclass.ru/tutorials/arduino-shift-register/)
как заставить принимать состояние блинка из числа uint32_t modes = 0B1010100000000000000001;
понять не могу.
как заставить принимать состояние блинка из числа uint32_t modes = 0B1010100000000000000001;
понять не могу.
посмотри пример по ссылке из сообщения №13 (в ветке по ссылке см сообщение 14 - на случай если ссылка не отработает правильно)
посмотрел. Хороший пример, настроить под себя в принципе не сложно.
Хотелось понять для себя)))
разжуйте пожалуйста эти строчки
maxvalin, а чего здесь разжевывать? Что имелось в виду - понятно, непонятно только, почему написано именно в таком виде. Ну так этого, кроме автора, все равно никто сказать не может.
непонятно только, почему написано именно в таком виде.
Так написано, чтобы каждый бит 32-битной маски был виден. Бинарный тип записи типа B00110110 определен только для типа byte. поэтому long int формируется из четырех байт путем сдвига. Еще можно было описать маску как union байтового массива и лонга...
Если знаете, как сделать это лучше - с удовольствием послушаю.