#ifndef __TEMPERATUR_H #define __TEMPERATUR_H //-------------------------------------------------------------------------- // temperatur.h //-------------------------------------------------------------------------- // Beinhaltet eine Funktion, die einen gewandelten Analogwert (0...1023) // in eine Temperatur (-40,0...+125,0) mit linearer Interpolation // umrechnet //-------------------------------------------------------------------------- // Autor: Sven Jordan, http://www.s-jordan.de // Version: 1.1 // Stand: 2008-01-09 // // Versionsverlauf: Version 1.0: Initiale Version // Version 1.1: Suchalgorithmus implementiert // //-------------------------------------------------------------------------- #include #include #include signed short temperatur (unsigned short adc_wert); signed short temperatur (unsigned short adc_wert) { if(adc_wert >= 348) { if(adc_wert >= 875) { if(adc_wert >= 973) { if(adc_wert >= 998) return(-9999); // kleiner -40 Grad C else return((((signed long)adc_wert * (-100)/24))+3754); // - 40 ... - 30 Grad C } else { if(adc_wert >= 934) return((((signed long)adc_wert * (-100)/39))+2195); // - 30 ... - 20 Grad C else return((((signed long)adc_wert * (-100)/59))+1383); // - 20 ... - 10 Grad C } } else { if(adc_wert >= 688) { if(adc_wert >= 792) return((((signed long)adc_wert * (-100)/83))+954); // - 10 ... 0 Grad C else return((((signed long)adc_wert * (-100)/104))+762); // 0 ... + 10 Grad C } else { if(adc_wert >= 512) return((((signed long)adc_wert * (-150)/177))+684); // + 10 ... + 25 Grad C else return((((signed long)adc_wert * (-150)/164))+718); // + 25 ... + 40 Grad C } } } else if(adc_wert >= 27) { if(adc_wert >= 102) { if(adc_wert >= 191) { if(adc_wert >= 260) return((((signed long)adc_wert * (-100)/88))+796); // + 40 ... + 50 Grad C else return((((signed long)adc_wert * (-100)/69))+877); // + 50 ... + 60 Grad C } else { if(adc_wert >= 140) return((((signed long)adc_wert * (-100)/51))+975); // + 60 ... + 70 Grad C else return((((signed long)adc_wert * (-100)/38))+1068); // + 70 ... + 80 Grad C } } else { if(adc_wert >= 55) { if(adc_wert >= 75) return((((signed long)adc_wert * (-100)/27))+1178); // + 80 ... + 90 Grad C else return((((signed long)adc_wert * (-100)/20))+1275); // + 90 ... +100 Grad C } else { return((((signed long)adc_wert * (-250)/28))+1491); // +100 ... +125 Grad C } } } else return(+9999); // groesser +125 Grad C } #endif