Помощь по коду СИ

Опрос Didgital Pins

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Аватара пользователя
ElectroMechaniC
Сержант
Сообщения: 230
Зарегистрирован: 21.09.2016{, 06:50}
Репутация: 1
Откуда: Донецк
Имя: Юрий

Помощь по коду СИ

#1

Сообщение ElectroMechaniC » 25.01.2018{, 09:05}

Привет в собственном блоке использую вот такой фрагмент кода
СпойлерПоказать
void ReadDigitalStatuses()
{
digitalInputs = 0;
if (digitalRead(1) == HIGH) digitalInputs |= 1;
if (digitalRead(2) == HIGH) digitalInputs |= 2;
if (digitalRead(3) == HIGH) digitalInputs |= 4;
if (digitalRead(4) == HIGH) digitalInputs |= 8;
if (digitalRead(5) == HIGH) digitalInputs |= 16;
if (digitalRead(6) == HIGH) digitalInputs |= 32;
if (digitalRead(7) == HIGH) digitalInputs |= 64;
if (digitalRead(8) == HIGH) digitalInputs |= 128;
if (digitalRead(9) == HIGH) digitalInputs |= 256;;
}
,для опроса цифровых входов на UNO, для MEGA этот код тоже работает. Хочу расширить функционал для остальных пинов MEGA, 22-53
Помогите разобраться как это правильно реализовать в коде. Весь блок приложил! Спасибо!
Вложения
RealDash_CAN_to_Serial_1_(CODE).ubi
(37.78 КБ) 36 скачиваний
:newrus: Все в руках человека. Поэтому всегда мойте руки перед и зад! :victory:
:smile225: :smile469: :smile427:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Помощь по коду СИ

#2

Сообщение pan » 25.01.2018{, 09:53}

ElectroMechaniC, ==HIGH можно убрать , if (digitalRead(х) достаточно.

чтобы не писать талмут из строк на большое количество пинов, попробуйте использовать оператор "for"
инфу и примеры его использования найти не проблема.

Аватара пользователя
ElectroMechaniC
Сержант
Сообщения: 230
Зарегистрирован: 21.09.2016{, 06:50}
Репутация: 1
Откуда: Донецк
Имя: Юрий

Помощь по коду СИ

#3

Сообщение ElectroMechaniC » 26.01.2018{, 10:36}

pan, спасибо за ответ, но в этом конкретном случае нужно именно каждый пин прописать, так программа требует в которую информация отправляется. Интересен другой момент- как выразить остальные пины , не меняя структуры программы? если digitalRead(1) == HIGH) digitalInputs |= 1, а (digitalRead(9) == HIGH) digitalInputs |= 256, то сколько тогда будет (digitalRead(22)???, можно ли его выразить как digitalInputs |= 512 например?
:newrus: Все в руках человека. Поэтому всегда мойте руки перед и зад! :victory:
:smile225: :smile469: :smile427:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Помощь по коду СИ

#4

Сообщение pan » 26.01.2018{, 10:52}

ElectroMechaniC писал(а):
26.01.2018{, 10:36}
то сколько тогда будет (digitalRead(22)
ну если продолжать по порядку то будет 2097152
ElectroMechaniC писал(а):
26.01.2018{, 10:36}
можно ли его выразить как digitalInputs |= 512 например
да хоть 8,547
всё зависит от того что вам нужно получить от этого кода.
ElectroMechaniC писал(а):
26.01.2018{, 10:36}
в этом конкретном случае нужно именно каждый пин прописать
я имелл ввиду вместо if(digitalRead(1) == HIGH) digitalInputs |= 1; , можно написать просто if(digitalRead(1)) digitalInputs |= 1;

Ответить

Вернуться в «Спросить у знатоков»