De hecho dudo que lo estés haciendo correctamente. Si hubieras leído la hoja de datos, notarás que la secuencia correcta es: un byte donde sólo se aplican los 3 bits menos significativos, luego otro donde van 2 bits más significativos (aquí se reciben los bits 8-11 de la lectura analógica) y por último un byte "dummy" (aquí se reciben los primeros 8 bits de la lectura analógica).
En resumen, lo correcto sería:
unsigned int analogSPIRead(byte pin) {
byte buffer[2]; // Aquí se almacenarán los dos 12 bits de la lectura
unsigned int* r = (unsigned int*)&buffer; // Esto me va a facilitar la conversión de 2 bytes en unsigned int, realmente se usa al final
byte b1 = B110 | ((pin >> 2) & 1); // Aquí va el bit de inicio + modo simple + tercer bit del número de pin a leer
byte b2 = pin << 6; // Aquí van solo los dos primeros bits del número de pin a leer. Se hacen los más significativos por la forma en que SPI se va a configurar
pinMode(CS, OUTPUT); // Recuerda que CS es el número de pin donde va el CS del integrado
SPI.beginTransaction(SPISettings(2000000, MSBFIRST, SPI_MODE0)); // Según la hoja de datos, esta es la configuración recomendada
digitalWrite(CS, LOW);
SPI.transfer(b1); // Aquí solo se transmite el primer byte, aún no se recibe nada importante
buffer[1] = SPI.transfer(b2); // Se transmite el segundo byte, y se reciben los 4 bits más significativos de la lectura
buffer[0] = SPI.transfer(0); // Realmente no importa lo que se transmite, pero se requiere para los otros 8 bits de la lectura
digitalWrite(CS, HIGH);
SPI.endTransaction(); // Eso es todo lo que hay que hacer
buffer[1] &= 0x0F; // Para estar seguros que el valor resultante verdaderamente sea de 12 bits
return *r; // ¿Recuerdas cuando declaré a r? Pues para esto era...
}
¿Así sí te sirve? Mira que de antemano ya deberías haber llamado a SPI.begin()