// this library is public domain. enjoy! // www.ladyada.net/learn/sensors/thermocouple #include #include #include #include "max6675_local.h" MAX6675::MAX6675(int8_t SCLK, int8_t CS, int8_t MISO) { sclk = SCLK; cs = CS; miso = MISO; //define pin modes pinMode(cs, OUTPUT); pinMode(sclk, OUTPUT); pinMode(miso, INPUT); digitalWrite(cs, HIGH); } double MAX6675::readCelsius(void) { uint16_t v; digitalWrite(cs, LOW); _delay_ms(1); v = spiread(); v <<= 8; v |= spiread(); digitalWrite(cs, HIGH); if (v & 0x4) { // uh oh, no thermocouple attached! return NAN; //return -100; } v >>= 3; return v * 0.25; } double MAX6675::readFarenheit(void) { return readCelsius() * 9.0 / 5.0 + 32; } byte MAX6675::spiread(void) { int i; byte d = 0; for (i = 7; i >= 0; i--) { digitalWrite(sclk, LOW); _delay_ms(1); if (digitalRead(miso)) { //set the bit to 0 no matter what d |= (1 << i); } digitalWrite(sclk, HIGH); _delay_ms(1); } return d; }