void spi_cs(int f) { if (f) { digitalWrite(2, HIGH); } else { digitalWrite(2, LOW); } } void spi_ck(int f) { if (f) { digitalWrite(3, HIGH); } else { digitalWrite(3, LOW); } } void spi_do(int f) { if (f) { digitalWrite(4, HIGH); } else { digitalWrite(4, LOW); } } int spi_di() { return digitalRead(5); } unsigned short spi_transfer(unsigned short v) { int i; for (i = 0; i < 16; i++) { spi_ck(0); if (v & 0x8000) { spi_do(1); } else { spi_do(0); } delay(2); v <<= 1; if (spi_di()) { v |= 1; } spi_ck(1); delay(2); } spi_do(1); return v; } unsigned short sample_ch0() { spi_cs(0); int v = spi_transfer(0x6800) & 0x03ff; spi_cs(1); return v; } unsigned short sample_ch1() { spi_cs(0); int v = spi_transfer(0x7800) & 0x03ff; spi_cs(1); return v; } int get_temperature() { #if 0 return (int)((sample_ch0() / 1023.0 * 5000 / 4 - 424) / 6.25 * 10); #else return (sample_ch0() * 50000L - (1023L * 424 * 4 * 10)) / (25 * 1023); #endif } static int temparray[16]; static int tempindex; void setup() { Serial.begin(9600); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, INPUT); for (int i = 0; i < 16; i++) { temparray[i] = get_temperature(); } } void loop() { int t = 0; for (int i = 0; i < 16; i++) { t += temparray[i]; } t /= 16; if (t < 0) { t = 0; } else if (t > 999) { t = 999; } char buf[100]; sprintf(buf, "%2u.%01u\n", t / 10, t % 10); Serial.print(buf); delay(1000); temparray[tempindex] = get_temperature(); tempindex = (tempindex + 1) % 16; }