+void convcycle(void)
+{
+ static char state = 0;
+ static unsigned long last = 0;
+ static float a, ra, l, t;
+
+ /*
+ * Theoretically:
+ * t = RC * ln(2) => R = t / (C * ln(2))
+ * R = A * exp(B / T) => T = B / ln(R / A)
+ * T = B / ln(R / (A * C * ln(2)))
+ * In the following:
+ * a = ttimea as float
+ * C = 1e6 / (A * C * ln(2))
+ * ra = a * C
+ * l = ln(ra)
+ * t = B / l
+ * Note, temperature is in Kelvin
+ */
+#define C 9.792934
+#define B 4020.0
+ if(state == 0) {
+ if((mnow - last > 200000) && tavgok) {
+ a = (float)ttimea;
+ state = 1;
+ tavgok = 0;
+ last = mnow;
+ }
+ } else if(state == 1) {
+ ra = a * C;
+ state = 2;
+ } else if(state == 2) {
+ l = log(ra);
+ state = 3;
+ } else if(state == 3) {
+ t = B / l;
+ state = 4;
+ } else if(state == 4) {
+ tempk = (int)t;
+ ktok = 1;
+ state = 0;
+ }
+}
+