arreglos y funciones en Arduino

Los array son pasados como referencia (modifican la variable externa) y tambien hay que pasar el tamaño del array.
https://www.tutorialspoint.com/arduino/arduino_passing_arrays_to_functions.htm

int datosSize = 8;
byte datos[datosSize] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
for ( int k = 0 ; k < datosSize ; k=k+1 )
       datos[k] = 0;

void ModificaDatos( byte datos[], int datosSize ) {
   for ( int k = 0 ; k < datosSize ; k=k+1 )
       datos[k] = (1 +k);
  }

bytes y enteros en Arduino

un entero 16 bits (0 a 65535) —> 2 bytes (8 bits c/u)
o un entero 14 bits (0 a 16383) —> 2 bytes (8 bits c/u)

byte lowBy = (entero & 0xff);  //los primeros 8 bits
byte highBy = (entero >> 8) & 0xff);  //los siguientes 8 bits

byte lowBy low  = (entero & 0x7f);  //los primeros 7 bits, el bit8 siempre en 0 indica es low
byte highBy = ((entero >> 7) & 0x7f) | 0x80;  //los siguientes 7 bits, el bit8 siempre en 1 indica es high

byte = highByte(entero);  //los primeros 8 bits
byte = lowByte(entero);  //los siguientes 8 bits

entero = word(highBy, lowBy); //returns the integer value of the highBy and lowBy bytes