Buenas tardes a todos, es comento un raro problema que ando teniendo con mi proyecto. 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 función map(); y no entiendo el porque, les dejo el código con el error
Primera mente 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)
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
Código:
#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
Primera mente 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)
Código:
#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