/****************** Arduino Smile with 8x8 Matrix and temp ******************/
#include <SPI.h>
#define CS 10
// MAX7219 Control registers
#define DECODE_MODE 9
#define INTENSITY 0x0A
#define SCAN_LIMIT 0x0B
#define SHUTDOWN 0x0C
#define DISPLAY_TEST 0x0F
byte sadFace [8] = {0x00,0x66,0x66,0x00,0x3C,0x42,0x42,0x00};
byte happyFace [8] = {0x00,0x66,0x66,0x00,0x42,0x42,0x3C,0x00};
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
void SendData(uint8_t address, uint8_t value) {
digitalWrite(CS, LOW);
SPI.transfer(address); // Send address.
SPI.transfer(value); // Send the value.
digitalWrite(CS, HIGH); // Finish transfer.
}
void setup() {
pinMode(CS, OUTPUT);
SPI.setBitOrder(MSBFIRST); // Most significant bit first
SPI.begin(); // Start SPI
SendData(DISPLAY_TEST, 0x01); // Run test - All LED segments lit.
delay(1000);
SendData(DISPLAY_TEST, 0x00); // Finish test mode.
SendData(DECODE_MODE, 0x00); // Disable BCD mode.
SendData(INTENSITY, 0x0e); // Use lowest intensity.
SendData(SCAN_LIMIT, 0x0f); // Scan all digits.
SendData(SHUTDOWN, 0x01); // Turn on chip.
Serial.begin(9600);
}
void loop() {
int analogValue = analogRead(A0);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
Serial.print("Temperature: ");
Serial.print(celsius);
Serial.println(" ℃");
if(celsius < 0.0)
{
for (int i=1;i<9;i++) SendData(i, sadFace[i-1]);
}
else if (celsius > 0.0 && celsius < 28.0)
{
for (int i=1;i<9;i++) SendData(i, happyFace[i-1]);
}
else
{
for (int i=1;i<9;i++) SendData(i, sadFace[i-1]);
}
}