Не понравился ни один из предыдущих ответов, потому что они не совместимы с кросс-платформой. Вам необходимо получить доступ через справочные таблицы контактов. Следующее выражение делает свое дело.
bool value = (0!=(*portOutputRegister( digitalPinToPort(pin) ) & digitalPinToBitMask(pin)));
Позвольте мне разобрать это для лучшего понимания
digitalPinToPort(pin)
найдите банк gpio [порт], которому назначен пин-код на выбранном вами оборудовании
portOutputRegister(...)
дает указатель на порт, содержащий значение, которое вы ищете. * разыменовывает указатель и дает полное значение всех 8 контактов, назначенных этому порту. Это еще не уникально полезно, но бит, который вы ищете, находится там.
&digitalPinToBitMask(pin)
выбирает только интересующий вас бит для вывода, все остальные биты будут равны нулю.
0! = Проверяет, является ли полученное выражение нулем или чем-то еще. Если он равен нулю, то ваш вывод равен нулю на этом выводе. В противном случае вывод равен единице.