Почему некоторые контакты Arduino Nano (D3, D4, A3, A4, A6, A7) не могут быть установлены на высокий уровень?

Я сделал набросок для включения всех цифровых и аналоговых контактов и обнаружил, что некоторые контакты не работают должным образом. Примечание. Я вручную устанавливал перемычки с каждого цифрового и аналогового контактов (по одному) на резистор, светодиод и контакт GND.

Я заметил, что некоторые контакты не работали (D3, D4, A4, A6 и A7), а контакт A3 светился только наполовину. Я пробовал два разных Nano, и они работали одинаково (также контакт A3 с половинной интенсивностью).

Я также попробовал проволочные перемычки, непосредственно соприкасающиеся с контактами (без макетной платы между ними, чтобы исключить проблему с макетной платой). Такое же поведение (так что макетная плата в порядке).

Мои вопросы:

  1. Почему на контакты D3, D4, A4, A6 и A7 не подается напряжение VCC (3,3 В)?
  2. Как включить эти контакты?
  3. По какой причине контакт A3 мигает с половинной интенсивностью?
  4. Как полностью включить этот контакт?
  5. Дополнительный вопрос: я использовал числа, почему имена контактов A0..A7 и D0..D12 не определены в Arduino IDE?

Тестовый скетч:

const int NR_OF_PINS = 22;

int pins[NR_OF_PINS]   = 
// 0  1  2  3  4  5  6   7   8   9  10 11   12  13  14  15  16  17  18  19  20  21    
//D0 D1 D2 D3 D4 D5 D6  D7  D8  D9 D10 D11 D12 D13  A0  A1  A2  A3  A4  A5  A6  A7
 { 1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 26 };


void setup() 
{
  for (int n = 0; n < NR_OF_PINS; n++)
  { 
    pinMode(pins[n], OUTPUT);
    digitalWrite(pins[n], HIGH);
  }
}

void loop() 
{
}

, 👍-1

Обсуждение

А6 и А7 аналог только на классическом Nano. 3,3 В на Нано?, @Juraj

Также D0 - это контакт 0, а не контакт 1. Почему вы возитесь с массивом?, @Majenko

@Juraj Хорошо, спасибо, но другие аналоговые контакты работают (частично кроме A3)., @Michel Keijzers

ваш массив неверен. А0 это 13, @Juraj

@Majenko Да, я случайно поменял местами D0 и D1, мне нужен массив, потому что я хочу использовать их в цикле (не для моей тестовой программы, а в моей реальной программе)., @Michel Keijzers

вы используете номера контактов, недопустимые для Nano, вы пропускаете D3 и D4, @Juraj

@Juraj Да, теперь я заметил, что нумерация уже встроена в функции pinMode и digitalWrite., @Michel Keijzers

@Juraj Я использовал эту таблицу: http://www.circuitstoday.com/arduino-nano-tutorial-pinout-schematics, там A0 равно 19., @Michel Keijzers

это контакты печатной платы. извините, A0 равен 14., @Juraj

@Juraj Спасибо (приятно, что у встроенного светодиода есть отдельный «контакт»), @Michel Keijzers

@MichelKeijzers, с какой платой Arduino вы работали до сих пор? Потому что Нано на самом деле всего лишь маленький Уно., @Juraj


1 ответ


Лучший ответ:

2

Вам не нужен массив, и ваш "базовый" вывод неправильный - вы начинаете с контакта 1, а не с контакта 0. Также контакты A6 и A7 могут быть только аналоговыми входами, а не цифровыми выходами.

Проще написать:

void setup() {
    for (uint8_t i = 0; i < NUM_DIGITAL_PINS; i++) {
        pinMode(i, OUTPUT);
        digitalWrite(i, HIGH);
    }
}

void loop() {
}

Это будет корректно работать на всех платах Arduino независимо от количества контактов, поскольку определение платы определяет количество контактов, а контакты всегда последовательно нумеруются, начиная с 0.

,

Спасибо за ответ (кстати, в качестве побочного вопроса я заметил, что не объявлен NUM_ANALOG_PINS). Почему нет? (а также я думал, что аналоговые выводы можно использовать как цифровые, но не наоборот)., @Michel Keijzers

Он определяется как NUM_ANALOG_INPUTS, а не NUM_ANALOG_PINS., @Majenko

И NUM_DIGITAL_PINS включает в себя все аналоговые выводы, которые могут быть цифровыми входами и выходами., @Majenko

спасибо (честно говоря, довольно запутанно, но, по крайней мере, теперь это более понятно). Однако у меня скорее так... сначала я думал, что мои паяльные работы - это бардак ;-), @Michel Keijzers

https://arduinoprosto.ru/q/36683/37523, @VE7JRO

@MichelKeijzers Ну, аналоговый вход может не быть физическим контактом. Существуют микросхемы со встроенными датчиками температуры (например), которые подключаются к ADC MUX, поэтому существует аналоговый вход, который подключается к этому датчику, но у него нет «контакта» как такового, поэтому их называют аналоговыми контактами. это неправильное название., @Majenko

@Majenko хорошо ясно (и звучит логично), у меня есть только Arduino и STM ;-) ... Кстати, только что протестировано, и в NUM_DIGITAL_PINS все цифровые контакты и аналоговые контакты [A0..A5] Контакты A6 и A7 только аналоговые ( или, по крайней мере, не в диапазоне NUM_DIGITAL_PINS)., @Michel Keijzers