Error con la Funcion map();

Buenas, hace bastante no escribo en el foro, tenia otra cuenta y esta es nueva, bueno yendo al grano, estoy tratando de hacer una interpolación entre dos array para interpretar los datos de un sensor, en este caso un NTC de 10K, interpolando el valor un array que contiene los valores del ADC con otro que contiene valores de temperatura, el problema es que tengo una especie de bug en la funcion map(); y no entiendo el porque, les dejo el codigo con el error

#define centesima 100
#define TAMANIO 41

unsigned int ADC_VALOR[TAMANIO] =  //Array de lecturas del ADC
{765, 760, 718, 713, 668, 663, 617, 611, 564, 559, 512, 507, 461, 456, 413, 408, 367, 363, 325, 321, 287, 283, 252, 249, 221, 218, 194, 191, 170, 168, 149, 147, 130, 128, 114, 1012, 100, 99, 88, 87, 77};
//  0,  0.5  5,   5.5,  10  10.5  15  15.5  20  20.5  25  25.5 30  30.5   35  35.5  40  40.5  45  45.5  50  50.5  55  55.5  60  60.5  65  65.5  70  70.5  75  75.5  80  80.5  85  85.5  90  90.5 95 95.5 100

unsigned int Temperatura[TAMANIO] = //Array de temperaturas en centecimas
{0, 50, 500, 550, 1000, 1050, 1500, 1550, 2000, 2050,  2500, 2550, 3000, 3050, 3500, 3550, 4000, 4050, 4500, 4550, 5000, 5050, 5500, 5550, 6000, 6050, 6500, 6550, 7000, 7050, 7500, 7550, 8000, 8050, 8500, 8550, 9000, 9050, 9500, 9550, 10000};
//0,  0.5  5, 5.5,  10   10.5   15    15.5  20   20.5    25   25.5    30   30.5  35   35.5   40   40.5   45   45.5   50   50.5   55   55.5   60   60.5  65    65.5   70   70.5   75   75.5   80   80.5   85   85.5   90   90.5   95   95.5   100

const int NTC_pin = 0; //Sensor NTC en la entrada A0

void setup(){
	Serial.begin (9600); //Seteamos la frecuencia de comunicacion
         pinMode(NTC_pin, INPUT); //pin A0 como entrada Analoga
}

void loop(){

	int Temp;
	int Lectura_NTC =0;
	int i=0;
	Lectura_NTC = analogRead (NTC_pin); //Leo el puerto A0
	
      Serial.print("Valor ADC: ");
      Serial.print(Lectura_NTC);
      Serial.print("\t\t\t ");

  for (i = (TAMANIO - 1); ADC_VALOR[i] < Lectura_NTC; i --){   //Realizo una busqueda del valor lelido en mi A0 con los valores de mi Array
//buscando el valor que tengo en la entrada o el mas proximo

		if (i==0){                                                   

			goto fin_del_bucle;
			//si no encuentra el valor de ADC que busca entonces sale del bucle para no
			//quedar atrapado de forma infinita.
		}
    }
    
   fin_del_bucle:

  Temp = map(Lectura_NTC, ADC_VALOR[i], ADC_VALOR[i+1], Temperatura[i], Temperatura[i+1]); //mapeo entre los dos array y almaceno en temp


  Serial.print("Temperatura: ");
  Serial.print((float)Temp/centesima); 
//divido por 100 e imprimo en pantalla, de esta manera evito usar float en los Array
  Serial.println("\t\t\t ");
  delay(250); 
}
//fin del programa

La primera vez cargue 21 valores y obtenía una apreciación de 1 grado y me funciono, les dejo el primero que escribí (este funciona muy bien)

#define TAMANIO 21

unsigned int Temperatura[TAMANIO] =
{0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100}; //Array de temperatura

unsigned int ADC_VALOR[TAMANIO] =
{765, 718, 668, 618, 564, 512, 461, 413, 367, 325, 287, 252, 221, 194, 170, 149, 130, 114, 100, 88, 77}; //Array para los valores de ADC

const int NTC_pin = 0; //Sensor NTC en la entrada A0

void setup()
{
	Serial.begin (9600); //Seteamos la frecuencia de comunicacion
    pinMode(NTC_pin, INPUT);
}

void loop()
{
	int Temp;
	int Lectura_NTC =0;
	int i=0;
	Lectura_NTC = analogRead (NTC_pin); //Leemos el puerto A0
	
	
	Serial.print("Valor ADC: ");
  Serial.print(Lectura_NTC);
	Serial.print("\t\t\t ");
    for (i = (TAMANIO - 1); ADC_VALOR[i] < Lectura_NTC; i --) //Busco el valor de mi entrada A0 o el mas proximo
    {   
		if (i==0)
		{ 
			goto fin_del_bucle;
			//si no encuentra el valor de ADC que busca entonces sale del bucle para no
			//quedar atrapado de forma infinita.
		}
    }
    
    fin_del_bucle:
    
	Temp = map(Lectura_NTC, ADC_VALOR[i], ADC_VALOR[i+1], Temperatura[i], Temperatura[i+1]); //mapeo entre los dos Array (Interpolacion)
    Serial.print("Temperatura: ");
    Serial.print(Temp);  //Imprimo la Temperatuera (apresiacion de a 1 Grado )
    Serial.println("\t\t\t ");
	  delay(250);
} //fin

agradecería que me ayudaran a encontrar mi error en el primer código que coloque se que es en el map(); pero no logro verlo, desde ya gracias

Ya veo tu error.

  Temp = map(Lectura_NTC, ADC_VALOR[i], ADC_VALOR[i+1], Temperatura[i], Temperatura[i+1]);

Haces una búsqueda de un indice y luego intentas interporlar.
La interpolación entre dos puntos de tu recta me parece que esta mal, pero intentaré desarrollar la idea.

Mira lo que hace tu loop (for)

Valor ADC: 218 Valor i =35 Temperatura: 89.41
Valor ADC: 87 Valor i =39 Temperatura: 95.50
Valor ADC: 315 Valor i =35 Temperatura: 88.93
Valor ADC: 442 Valor i =35 Temperatura: 88.31
Valor ADC: 286 Valor i =35 Temperatura: 89.08
Valor ADC: 671 Valor i =35 Temperatura: 87.18
Valor ADC: 252 Valor i =35 Temperatura: 89.25
Valor ADC: 297 Valor i =35 Temperatura: 89.02
Valor ADC: 456 Valor i =35 Temperatura: 88.24
Valor ADC: 130 Valor i =35 Temperatura: 89.85
Valor ADC: 666 Valor i =35 Temperatura: 87.20
Valor ADC: 169 Valor i =35 Temperatura: 89.65

En lugar del AD he usado un random entre tu valor mas chico 77 y el mas grande 718 y estos son los resultados, siempre el valor de i es 35 salvo con valores bajos que es 39.
Entonces tu for no funciona como esperas.

Con valores chicos funciona bien, ejemplo puse 85 como el valor Lectura_NTC y lo devuelve correctamente.

Parece que el termino 35 estaba mal escrito, se te escapó un 0 y decia 1012 y tal vez sea 112 porque los valores consecutivos son mucho menores.
Ahora te comento como resulta.
Ese era el error.

Mira lo que hace ahora

Valor ADC: 320 Valor i =19 Temperatura: 45.63
Valor ADC: 320 Valor i =19 Temperatura: 45.63

Correcto y si lo pongo random, veamos

Ahora lo hace correctamente

Valor ADC: 218 Valor i =25 Temperatura: 60.50
Valor ADC: 87 Valor i =39 Temperatura: 95.50
Valor ADC: 315 Valor i =19 Temperatura: 46.29
Valor ADC: 442 Valor i =13 Temperatura: 31.96
Valor ADC: 286 Valor i =20 Temperatura: 50.12
Valor ADC: 671 Valor i =3 Temperatura: 9.70
Valor ADC: 252 Valor i =22 Temperatura: 55.00
Valor ADC: 297 Valor i =19 Temperatura: 48.67
Valor ADC: 456 Valor i =13 Temperatura: 30.50
Valor ADC: 130 Valor i =32 Temperatura: 80.00
Valor ADC: 666 Valor i =4 Temperatura: 10.20
Valor ADC: 169 Valor i =28 Temperatura: 70.25
Valor ADC: 182 Valor i =27 Temperatura: 67.42
Valor ADC: 576 Valor i =7 Temperatura: 18.85
Valor ADC: 477 Valor i =11 Temperatura: 28.43
Valor ADC: 134 Valor i =31 Temperatura: 78.94
Valor ADC: 314 Valor i =19 Temperatura: 46.42
Valor ADC: 416 Valor i =13 Temperatura: 34.68

Entonces tu error es corregir esto

{765, 760, 718, 713, 668, 663, 617, 611, 564, 559, 512, 507, 461, 456, 413, 408, 367, 363, 325, 321, 287, 283, 252, 249, 221, 218, 194, 191, 170, 168, 149, 147, 130, 128, 114, 1012 <== VALOR MAL, 100, 99, 88, 87, 77};