written for another thread but might be generic usable
tested on UNO only
//
// FILE: getPinMode.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.00
// PURPOSE: getPinMode
// DATE: 2014-05-11
// URL:
//
// Released to the public domain
//
int getPinMode(uint8_t pin)
{
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *reg, *out;
if (port == NOT_A_PIN) return -1;
// JWS: can I let the optimizer do this?
reg = portModeRegister(port);
out = portOutputRegister(port);
if ((~*reg & bit) == bit) // INPUT OR PULLUP
{
if ((~*out & bit) == bit) return INPUT;
else return INPUT_PULLUP;
}
return OUTPUT;
}
void setup()
{
Serial.begin(115200);
Serial.println("Start ");
pinMode(13, INPUT);
int a = getPinMode(13);
Serial.println(INPUT, DEC);
Serial.println(a, DEC);
pinMode(13, INPUT_PULLUP);
int b = getPinMode(13);
Serial.println(INPUT_PULLUP, DEC);
Serial.println(b, DEC);
pinMode(13, OUTPUT);
int c = getPinMode(13);
Serial.println(OUTPUT, DEC);
Serial.println(c, DEC);
}
void loop()
{
}