volatile uint8_t* port;
volatile uint8_t* ddr;
volatile uint8_t* pin;
Why are these volatile? Are you expecting the values to change, in an interrupt, after being set in setup()?
I don't see your code using interrupts.
for (uint8_t x=0; x<16; x++)
{
digitalWrite(2, bitRead(x,0)); digitalWrite(3, bitRead(x,1));
digitalWrite(4, bitRead(x,2)); digitalWrite(5, bitRead(x,3));
values[x] += readCapacitivePin();
}
I don't see the value of multiple statements on one line. It makes the code much harder to read.
if (buttons[x] == 99) { buttonEvent[x] = 2; buttonchanged = 1; }
Ditto here (and other places). What is the magic value 99 for? A #define with a meaningful name would be better.