Buscar el valor mas cercano en un array para conocer su hubicacion

Buenas tardes,

Quiciera saber si existe una función que me entregue el valor mas cercano de un array por ejemplo:

mi arduino lee una señal con valor 12

y en mi array ya establecido es el siguiente

array[] = { 3,5,6,13, 23} ;

quisiera que me arroje la posición 3 la cual contiene el valor 13 la que es mas cercana al valor 12

Crea una función diferencia tal que barra tu vector desde 0 a N y se quede con la menor diferencia entre tu número y el valor del vector en valor absoluto

algo asi

int valor = 12;

int array[] = {3, 5, 6, 13, 23};

byte ubicacion(int vector[], int num) {
    byte tmp = 0;
    int dif = 12-array[0];
    
    for (byte i = 0; i<num; i++) {
        if (abs(valor-array[i]) < dif) {
            tmp = i; // me quedo con esa ubiacion
        }          
    }
    return tmp;
}


void setup() {
  Serial.begin(9600);  
  Serial.println("Ubicacion : " + String(ubicacion(array, sizeof(array)/sizeof(int))));
}

void loop() {
  
}

Podría mejorarse pero la parte que luce como muy complicada

ubicacion(array, sizeof(array)/sizeof(int))

es la que le dice el tamaño de tu vecor. Si hubieras puesto algo como

#define N 5 // tamaño del vector

todo sería mas facil mira pq lo digo

#define   N  5
int valor = 12;

int array[N] = {3, 5, 6, 13, 23};

byte ubicacion(int vector[]) {
    byte tmp = 0;
    int dif = 12-array[0];
    
    for (byte i = 0; i<N; i++) {
        if (abs(valor-array[i]) < dif) {
            tmp = i; // me quedo con esa ubiacion
        }          
    }
    return tmp;
}


void setup() {
  
  Serial.begin(9600);  
  byte pos = ubicacion(array);
  Serial.println("Ubicacion : " + String(pos));
  Serial.println("Valor     : " + String(array[pos]));
}

void loop() {
  
}