#include #define THERMISTOR 5 #define SWITCH 9 #define A_PIN 2 const int cent = 0; const int fahr = 1; const int abso = 2; int units = cent; void setup(void) { for (int i = 0; i < 7; i++) pinMode(A_PIN + i, OUTPUT); pinMode(SWITCH, INPUT); } void loop(void) { double rt = 1.0 / 298.15 + log(1024.0 / analogRead(THERMISTOR) - 1) / 3977.0; double t = 1.0 / rt; if (!digitalRead(SWITCH)) { if (++units > abso) units = cent; } if (units != abso) { t -= 273.15; if (units == fahr) t = t * 9.0 / 5.0 + 32; } if (t < 0) { t = -t; minus(); } int temp = (int)(t + 0.5); boolean zero = true; for (int pow = 100; pow > 0; pow /= 10) { int dig = temp / pow; temp -= dig * pow; zero = zero && (dig == 0); if (!zero) { digit(dig); } } if (units == fahr) fahrenheit(); else if (units == cent) centigrade(); else if (units == abso) absolute(); } const int A = 1 << 0; const int B = 1 << 1; const int C = 1 << 2; const int D = 1 << 3; const int E = 1 << 4; const int F = 1 << 5; const int G = 1 << 6; static int digits[] = { A | B | C | D | E | F, B | C, A | B | G | E | D, A | B | G | C | D, F | G | B | C, A | F | G | C | D, A | F | E | G | C | D, A | B | C, A | B | C | D | E | F | G, A | B | C | F | G, }; void digit(int d) { bits(digits[d]); } void minus() { bits(G); } void centigrade() { bits(A | F | E | D); } void fahrenheit() { bits(A | F | E | G); } void absolute() { bits(A | B | C | E | F | G); } void bits(int bits) { int b = 1; for (int i = 0; i < 7; i++) { int pin = A_PIN + i; digitalWrite(pin, LOW); if (bits & b) digitalWrite(pin, HIGH); b *= 2; } delay(750); }