Почему у ардуино нано D2 и D3(если пользовать для прерываний)-идут как 0 и 1? Логика где? :-)
- Войдите на сайт для отправки комментариев
Чт, 15/04/2021 - 02:03
Собственно вопрос в заголовке друзья. Не понимаю я такой квадратной логики. Написано: "пин D2 и D3" у ардуино нано.
Ок, пытаюсь вешать на них прерывания. В скетче соответственно пишу как "пин D2 и D3". А оно ни хрена не работает. Начинаю разбираться. И оказывается, какой то умник их назвал как "прерывания 0 и 1". Оглоблю ему в зад :-)
Это из серии "ты видишь квадратное, но не верь глазам своим- оно в реальности круглое". Хрень какая то...
пины 2 и 3, а прерывания 0 и 1.
И что в этом странного?
Все эти номера пинов специально придумали для таких блондинок как ты, кто вообще ничего читать не хочет. Хотя тут даже и читать не надо, достаточно глянуть на распиновку платы, что бы увидеть какие прерывания к какому пину относятся.
В автомобиле педаль газа жмешь вниз, а машина едет вперёд. Странно! Педаль тормоза тоже жмешь вниз, но теперь машина останавливается. Где логика, кто это ваще придумал?!
В автомобиле, чтобы ехать -не тянешь вручную тросик педали газа. Или не поворачиваешь руками дроссельную заслонку. А нажимаешь НА ПЕДАЛЬ ;-).
А тут получается: в коде мы обычно(могу и ошибаться-но насколько я видел разные виды кода) оперируем понятием ПИНа. А не сущностью, скрытой за ПИНом.
По аналогии с машиной, нам говорят "ну и что, что есть педаль газа? тяни тросик руками!" :-)))
Все эти номера пинов специально придумали для таких блондинок как ты, кто вообще ничего читать не хочет. Хотя тут даже и читать не надо, достаточно глянуть на распиновку платы, что бы увидеть какие прерывания к какому пину относятся.
См. пост. И не переходи на личности. Я задал вопрос людям и не оскорблял тебя.
Номера пинов есть только у ардуино. У процессора в голом виде номера пинов соответствуют их расположению на корпусе и не несут никакой иной нагрузки как только обозначения из какого места торчит нога. Ох дадашит быстро бы на место мозги вправил.
Итак магия, берем процессор , припаиваем на плату и у его ног появляются номера которые нужны юзеру для написания программы. Вопрос - ГДЕ ЛОГИКА ?
А еще, для тех кто не умеет читать, есть такая штука digitalPinToInterrupt . Это что бы почемучки вопросов не задавали, а пользовались, специальными, сделанными для них, костылями.
В автомобиле, чтобы ехать -не тянешь вручную тросик педали газа. Или не поворачиваешь руками дроссельную заслонку. А нажимаешь НА ПЕДАЛЬ ;-).
А тут получается: в коде мы обычно(могу и ошибаться-но насколько я видел разные виды кода) оперируем понятием ПИНа. А не сущностью, скрытой за ПИНом.
По аналогии с машиной, нам говорят "ну и что, что есть педаль газа? тяни тросик руками!" :-)))
Какие тросики, какие дроссели... Ардуино - это педаль(пин) и движение вперед(вызов прерывания). Всё. Никаких больше сущностей вы не видите, как блондинка, севшая в автомобиль и упавшая в обморок от слова "дроссель".
Все тросики спрятаны во фреймворке. Загляните ему вовнутрь, поразмышляйте о том же, о чем размышлял разработчик платформы и увидите тросики, логику работы. Тогда сразу будет понятно почему D2 привязано к Int0.
К тому же у разных ардуин разные пины обеспечивают прерывания. Пины 2,3 для прерываний только у 328 - УНЫ и НАНЫ и пр. Так что ТС явно не читатель - просто поинтересоваться как там вообще дело обстоит с прерываниями не удосужился. Всего несколько строк прочитать и этого дурного вопроса не было бы - https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
Особенно доставляет последнее предложение - For Uno WiFiRev.2, Due, Zero, MKR Family and 101 boards the interrupt number = pin number.
К слову, для ESP32 тоже GPIO No == Interrupt No
А тут получается: в коде мы обычно(могу и ошибаться-но насколько я видел разные виды кода) оперируем понятием ПИНа. А не сущностью, скрытой за ПИНом.
еще раз. В операторе attachInterrupt используется не номер ПИНА, а номер ПРЕРЫВАНИЯ. Которые в общем случае не совпадают... Это разные номера, понимаете?
"Поезд номер 2 - а отправляется почему-то с платформы номер 6? Где логика?!"
Потому что программисты ардуино поленились сделать нормально.
Ну и как было бы нормально, по твоему?
Потому что программисты ардуино поленились сделать нормально.
есть же оператор digitalPinToInterrupt(pin): для тех, кто хочет привязаться именно к номеру пина. Только им почему-то никто не пользуется
Мне кажется наоборот. Все те кто хочет красиво - пользуются. Другое дело, что не во всех ядрах этот макрос поддерживается.(
Ну если есть оператор НеЗабудьКаждыйРазНаписатьДлинныйБесполезныйОператор(), то это делает плохое решение хорошим, конечно.
есть же оператор digitalPinToInterrupt(pin): для тех, кто хочет привязаться именно к номеру пина. Только им почему-то никто не пользуется
А я почему то изначально «прерывания» и «пины» различал. Может не те материалы читал? ))
Да и схемы читать люблю:
Ну и как было бы нормально, по твоему?
На этот вопрос у rkit ответа, как всегда нет :)
И более того, да же если мы "придумаем" что то типа
Мы получим шляпу, потому что для разных процессоров соответствие номера прерывания пину совершенно разное. Да и вообще номер прерывания это не номер пина, а номер конвейера, который это прерывание обрабатывает.
Только нафига, когда и так всё решается с вышеупомянутым digitalPinToInterrupt().
Или же нужно было укоротить до pin2int(), потому что тяжело набирать digitalPinToInterrupt()? )))
Вы сначала с методом определитесь. А то пытаетесь скрестить несрещаемое :)
В авто все еще страшней! Кроме педали тормоза есть еще ручной тормоз. Его, чтоб остановится.... тянешь... невероятно, но вверх. А ручной газ, по логике... но он просто отсутствует! Но... Вместо ручного газа, будете смеяться - еще педаль! Сцепления. Теперь угадайте, когда машина поедет? Когда эту педаль жмешь или когда отпускаешь? Как по логике? ))))
Может потому на авто надо права, а на ардуине любой дурак прав.