Почему у ардуино нано D2 и D3(если пользовать для прерываний)-идут как 0 и 1? Логика где? :-)

mu_ssina
Offline
Зарегистрирован: 30.08.2013

Собственно вопрос в заголовке друзья. Не понимаю я такой квадратной логики. Написано: "пин D2 и D3" у ардуино нано.

Ок, пытаюсь вешать на них прерывания. В скетче соответственно пишу как "пин D2 и D3". А оно ни хрена не работает. Начинаю разбираться. И оказывается, какой то умник их назвал как "прерывания 0 и 1". Оглоблю ему в зад :-)

Это из серии "ты видишь квадратное, но не верь глазам своим- оно в реальности круглое". Хрень какая то...

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

пины 2 и 3, а прерывания 0 и 1.

И что в этом странного?

Green
Offline
Зарегистрирован: 01.10.2015

Все эти номера пинов специально придумали для таких блондинок как ты, кто вообще ничего читать не хочет. Хотя тут даже и читать не надо, достаточно глянуть на распиновку платы, что бы увидеть какие прерывания к какому пину относятся.

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

В автомобиле педаль газа жмешь вниз, а машина едет вперёд. Странно! Педаль тормоза тоже жмешь вниз, но теперь машина останавливается. Где логика, кто это ваще придумал?!

mu_ssina
Offline
Зарегистрирован: 30.08.2013

sadman41 пишет:
В автомобиле педаль газа жмешь вниз, а машина едет вперёд. Странно! Педаль тормоза тоже жмешь вниз, но теперь машина останавливается. Где логика, кто это ваще придумал?!

В  автомобиле, чтобы ехать -не тянешь вручную тросик педали газа. Или не поворачиваешь руками дроссельную заслонку.  А нажимаешь НА ПЕДАЛЬ ;-). 

А тут получается: в коде мы обычно(могу и ошибаться-но насколько я видел разные виды кода) оперируем понятием ПИНа. А не сущностью, скрытой за ПИНом.

По аналогии с машиной, нам говорят "ну и что, что есть педаль газа? тяни тросик руками!" :-)))

 

mu_ssina
Offline
Зарегистрирован: 30.08.2013

Green пишет:

Все эти номера пинов специально придумали для таких блондинок как ты, кто вообще ничего читать не хочет. Хотя тут даже и читать не надо, достаточно глянуть на распиновку платы, что бы увидеть какие прерывания к какому пину относятся.

См. пост. И не переходи на личности. Я задал вопрос людям и не оскорблял тебя.

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

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

Итак магия, берем процессор , припаиваем на плату и у его ног появляются номера которые нужны юзеру для написания программы. Вопрос - ГДЕ ЛОГИКА ?

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

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

mu_ssina пишет:

sadman41 пишет:
В автомобиле педаль газа жмешь вниз, а машина едет вперёд. Странно! Педаль тормоза тоже жмешь вниз, но теперь машина останавливается. Где логика, кто это ваще придумал?!

В  автомобиле, чтобы ехать -не тянешь вручную тросик педали газа. Или не поворачиваешь руками дроссельную заслонку.  А нажимаешь НА ПЕДАЛЬ ;-). 

А тут получается: в коде мы обычно(могу и ошибаться-но насколько я видел разные виды кода) оперируем понятием ПИНа. А не сущностью, скрытой за ПИНом.

По аналогии с машиной, нам говорят "ну и что, что есть педаль газа? тяни тросик руками!" :-)))

Какие тросики, какие дроссели... Ардуино - это педаль(пин) и движение вперед(вызов прерывания). Всё. Никаких больше сущностей вы не видите, как блондинка, севшая в автомобиль и упавшая в обморок от слова "дроссель".

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

 

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

К тому же у разных ардуин разные пины обеспечивают прерывания.  Пины 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.

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

К слову, для ESP32 тоже GPIO No == Interrupt No

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

mu_ssina пишет:

А тут получается: в коде мы обычно(могу и ошибаться-но насколько я видел разные виды кода) оперируем понятием ПИНа. А не сущностью, скрытой за ПИНом.

еще раз. В операторе attachInterrupt используется не номер ПИНА, а номер ПРЕРЫВАНИЯ. Которые в общем случае не совпадают... Это разные номера, понимаете?

"Поезд номер 2 - а отправляется почему-то с платформы номер 6? Где логика?!"

 

rkit
Offline
Зарегистрирован: 23.11.2016

Потому что программисты ардуино поленились сделать нормально.

Green
Offline
Зарегистрирован: 01.10.2015

Ну и как было бы нормально, по твоему?

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

rkit пишет:

Потому что программисты ардуино поленились сделать нормально.

есть же оператор digitalPinToInterrupt(pin): для тех, кто хочет привязаться именно к номеру пина. Только им почему-то никто не пользуется

Green
Offline
Зарегистрирован: 01.10.2015

Мне кажется наоборот. Все те кто хочет красиво - пользуются. Другое дело, что не во всех ядрах этот макрос поддерживается.(

rkit
Offline
Зарегистрирован: 23.11.2016

Ну если есть оператор НеЗабудьКаждыйРазНаписатьДлинныйБесполезныйОператор(), то это делает плохое решение хорошим, конечно.

MaksVV
Offline
Зарегистрирован: 06.08.2015

b707 пишет:

есть же оператор digitalPinToInterrupt(pin): для тех, кто хочет привязаться именно к номеру пина. Только им почему-то никто не пользуется

многабукаф

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А я почему то изначально «прерывания» и «пины» различал. Может не те материалы читал? )) 

Да и схемы читать люблю:

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Green пишет:

Ну и как было бы нормально, по твоему?

На этот вопрос у rkit ответа, как всегда нет :)

И более того, да же если мы "придумаем" что то типа 


#define attachInt(pin,mode) attachInterrupt(digitalPinToInterrupt(pin),mode)

Мы получим шляпу, потому что для разных процессоров соответствие номера прерывания пину совершенно разное. Да и вообще номер прерывания это не номер пина, а номер конвейера, который это прерывание обрабатывает.

Green
Offline
Зарегистрирован: 01.10.2015
Как бы, наверно, можно было бы придумать что бы не использовать макро, типа:
const int PIN = 2;
attachInterrupt(PIN, fun);
ну а в самом attachInterrupt проверять и выдавать при неверном пине, типа:
#error pin must be 2 or 3 only!
Только нафига, когда и так всё решается с вышеупомянутым digitalPinToInterrupt().
Или же нужно было укоротить до pin2int(), потому что тяжело набирать digitalPinToInterrupt()? )))
Upper
Offline
Зарегистрирован: 23.06.2020
 Так работает. Сообщает об ошибке если неправильный номер.
 
  #if digitalPinToInterrupt(3) == -1
  #error Invalid pin number for interrupt.
  #endif
 
 Так не работает. Сообщает об ошибке всегда.
 
  constexpr uint8_t pinNum = 3;
  #if digitalPinToInterrupt(pinNum) == -1
  #error Invalid pin number for interrupt.
  #endif
 
Есть ли способ отключить вывод сообщения об ошибке в случае pinNum (константы или переменной)?
А может есть способ, чтобы правильно отрабатывало константные выражения?
 
Arduino 1.8.13    UNO
brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Вы сначала с методом определитесь. А то пытаетесь скрестить несрещаемое :)

  #define pinNum 3
  #if digitalPinToInterrupt(pinNum) == -1
  #error Invalid pin number for interrupt.
  #endif
 
  const uint8_t myPin = pinNum;
 
Logik
Offline
Зарегистрирован: 05.08.2014

sadman41 пишет:
В автомобиле педаль газа жмешь вниз, а машина едет вперёд. Странно! Педаль тормоза тоже жмешь вниз, но теперь машина останавливается. Где логика, кто это ваще придумал?!

В авто все еще страшней! Кроме педали тормоза есть еще ручной тормоз. Его, чтоб остановится.... тянешь... невероятно, но вверх. А ручной газ, по логике...  но он просто отсутствует! Но... Вместо ручного газа, будете смеяться - еще педаль! Сцепления. Теперь угадайте, когда машина поедет? Когда эту педаль жмешь или когда отпускаешь? Как по логике? ))))

Может потому на авто надо права, а на ардуине любой дурак прав.