#include <util/delay.h>
#define ADDR_DDR DDRA
#define ADDR_PORT PORTA
#define ADDR_PIN PINA
uint8_t get_one_address(int pin) {
uint8_t result = 0;
ADDR_DDR &= ~(1<<pin); // set pin to input
ADDR_PORT &= ~(1<<pin); // disable internal pull-up
_delay_ms(1);
if (ADDR_PIN & (1 << pin)) {
result = 2; // pin set high
} else { // is pin set low or floating?
ADDR_PORT |= (1<<pin); // enable internal pull-up
_delay_ms(0.1); // see Tiny44A datasheet, 10.1.4
if (ADDR_PIN & (1<<pin)) { // ... is pin floating?
result = 0; // pin floating
} else {
result = 1; // pin forced low
}
ADDR_PORT &= ~(1<<pin); // disable internal pull-up
}
return result;
}