werken met binaire getallen.

(bit manipulaties is vooral proberen om te kijken hoe het werkt)

mbt code
Om te beginnen probeer een consequente inspring styl te hanteren om de boel leesbaarder te houden. Spaties kosten (vrijwel) niets. Verder zijn het delay microseconds die waarschijnlijk nodig zijn om de chips op je IOexpansie bordje (oid) de tijd te geven om de juiste signalen klaar te zetten. ALs je de specificatie van het bordje hebt kun je zien of en hoe groot evt delays moeten zijn. De initialisatie op 0 van controller_data is niet nodig omdat de eerste digitalread die waarde weer overschrijft.

Je kunt de for loop waarschijnlijk optimaliseren zodat het lezen van de eerste bit ook in de loop zit.

Verder zou je de functie de waarde van de ingelezen bits terugkunnen laten geven

omdat ik niet weet wat de digitalwrites doen is een enkele regel commentaar hier wel op zijn plaats.

int controllerRead() 
{
  // ....
  IOexp.digitalWrite(1, 2, LOW);
  IOexp.digitalWrite(1, 1, LOW);

  // ...
  IOexp.digitalWrite(1, 2, HIGH);
  delayMicroseconds(2);
  IOexp.digitalWrite(1, 2, LOW);

  // READ 8 DATABITS TO SEE BUTTONS
  int controller_data = IOexp.digitalRead(1 ,0);
  for (int i = 1; i <= 7; i ++)
  {
    IOexp.digitalWrite(1, 1, HIGH);
    delayMicroseconds(2);
    controller_data = controller_data << 1;
    controller_data = controller_data + IOexp.digitalRead(1, 0) ;
    delayMicroseconds(4);
    IOexp.digitalWrite(1, 1, LOW);
  } 
  return  controller_data;
}

// aanroep voorbeeld
buttons = controllerRead();

2 cents,