Настройка pinMode(pin, input/output) в соответствии с требованиями пользователя

Я работаю на arduino IDE и esp8266 nodemcu. Изучая IDE, я увидел, что существует структура void loop() и void setup(), а все примеры в Интернете включают определение pinModes внутри блока void setup(). Я хочу создать программу, в которой через mqtt или http пользователь будет вводить данные о том, какой тип устройства он/она хочет подключить к esp8266, поэтому на основе этого мне придется установить состояние ВХОДА/ВЫХОДА на следующих контактах.

Моей первоначальной идеей было:

void setup()
{
    connectwifi();
}

void loop()
{
   call_some_function();
}

где call_some_function() получит требования от пользователя по http. Например, он хочет свет на pin3, поэтому pinMode(pin3,OUTPUT);

Теперь я хотел, чтобы было, вызывать метод - call_some_function() всякий раз, когда пользователю нужно добавить к нему дополнительное устройство, что означает, что изначально, когда мы хотели добавить 4 лампы к esp8266, мы напишем

pinMode(pin1,OUTPUT);
pinMode(pin2,OUTPUT);
pinMode(pin3,OUTPUT);
pinMode(pin4,OUTPUT);

Но теперь, когда у меня есть ввод, определенный пользователем, мой код станет примерно таким,

call_some_function()
{
     pin=(user gave me the pin no);
     state=(based on the device the server will send the state i.e IN/OUT);
     pinMode(pin,state);
}

Теперь у меня вопрос: вызов этой функции 4 раза и написание функции pinMode() 4 раза приведет к одному и тому же результату или к разным результатам? И возможно ли это, могу ли я написать вот так? Я буду вызывать эту функцию из void loop() вместо if void setup(), так как я постоянно слушаю пользовательский ввод, Потому что я не могу найти другого способа сделать пользовательский ввод

, 👍2

Обсуждение

Вы можете вызвать pinMode в любое время, @Juraj

Можете ли вы сделать свой комментарий «ответом на свой вопрос», потому что если дальнейшее обсуждение окажется ответом, то я смогу отметить его как ответ., @Wan Street


2 ответа


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

2

Теперь у меня вопрос: вызов этой функции 4 раза и написание функции pinMode() 4 раза приведет к одному и тому же результату или к разным? Также это выполнимо, например, могу ли я написать так?

Вы можете вызвать pinMode в любое время

И чтобы добавить что-то еще к pinMode. Это не просто некоторая подготовка пина. Это меняет вещи для подключенной схемы. Установка на INPUT позволяет присоединенной схеме управлять. Если есть подтягивающая схема, состояние будет HIGH, если pull-down — LOW. INPUT_PULLUP сохраняет состояние HIGH, но позволяет присоединенной схеме потянуть его вниз. pinMode OUTPUT устанавливает вывод LOW.

В двух случаях на данный момент я использую установку вывода в положение ВЫХОД только на время, когда я хочу управлять присоединенной схемой, а затем я устанавливаю его обратно в положение ВХОД. В первом случае я сбрасываю esp8266 с подключенным выводом EN, устанавливая вывод LOW, затем я позволяю внешнему подтягивающему резистору удерживать вывод EN в положении HIGH. Второй случай — это модуль усилителя для функции tone(). Я устанавливаю вывод в положение ВХОД после tone(), иначе он улавливает шум.

,

2

pinMode() обычно вызывается из setup(), поскольку в большинстве случаев режим пина остается неизменным на протяжении всего выполнения. Иногда есть причина изменить его во время выполнения, как в вашем примере, и вы можете вызвать pinMode() в любое подходящее время для этого.

,

Хорошо, ты... Джурадж первым дал правильный ответ, поэтому я отмечу его ответ., @Wan Street