#include "DHT.h"
#define DHTPIN 2 // what pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
#include "LedControlMS.h" // need the library
LedControl lc=LedControl(12,11,10,4); // lc is our object
// pin 2 is connected to the MAX7219 pin 1
// pin 1 is connected to the CLK pin 13
// pin 0 is connected to LOAD pin 12
// 1 as we are only using 1 MAX7219
#include <OneWire.h>
// OneWire DS18S20, DS18B20, DS1822 Temperature Example
// http://www.pjrc.com/teensy/td_libs_OneWire.html
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library
OneWire ds(6); // on pin 10 (a 4.7K resistor is necessary)
int powerPin = 5;
int groundPin = 4;
int DHTpowerPin = 7;
int DHTgroundPin = 8;
float sample;
float tempC;
float tempF;
void setup()
{
pinMode(powerPin, OUTPUT);
pinMode(groundPin, OUTPUT);
digitalWrite(powerPin, HIGH);
digitalWrite(groundPin, LOW);
pinMode(DHTpowerPin, OUTPUT);
pinMode(DHTgroundPin, OUTPUT);
digitalWrite(DHTpowerPin, HIGH);
digitalWrite(DHTgroundPin, LOW);
lc.shutdown(0,false);// turn off power saving, enables display
lc.shutdown(1,false);// turn off power saving, enables display
lc.shutdown(2,false);// turn off power saving, enables display
lc.shutdown(3,false);// turn off power saving, enables display
lc.setIntensity(0,1);// sets brightness (0~15 possible values)
lc.setIntensity(1,1);// sets brightness (0~15 possible values)
lc.setIntensity(2,1);// sets brightness (0~15 possible values)
lc.setIntensity(3,1);// sets brightness (0~15 possible values)
lc.clearDisplay(0);// clear screen
lc.clearDisplay(1);// clear screen
lc.clearDisplay(2);// clear screen
lc.clearDisplay(3);// clear screen
Serial.begin(9600);
dht.begin();
}
void printNumberC(float num)
{
int ones;
int tens;
int hundreds;
int v=(int)num;
float diff=num-v;
diff=diff*100;
int fones,ftens;
fones=(int)diff%10;
diff=diff/10;
ftens=(int)diff%10;
diff=diff/10;
ones=v%10;
v=v/10;
tens=v%10;
v=v/10;
hundreds=v;
//Now print the number digit by digit
lc.displayChar(0,tens);
lc.displayChar(1,ones);
lc.displayChar(2,ftens);
// prints degree C symbol.
int r,c;
lc.setLed(1,r=7,c=0,true); //Turn off for 1/4 sec
lc.setLed(1,r=6,c=0,true); //Turn off for 1/4 sec // decimal dot
lc.setLed(1,r=6,c=1,true); //Turn off for 1/4 sec
lc.setLed(1,r=7,c=1,true); //Turn off for 1/4 sec
lc.setLed(3,r=2,c=7,true); //Turn off for 1/4 sec
lc.setLed(3,r=2,c=6,true); //Turn off for 1/4 sec // degree `C dot
lc.setLed(3,r=1,c=7,true); //Turn off for 1/4 sec
lc.setLed(3,r=1,c=6,true); //Turn off for 1/4 sec
lc.setLed(3,r=4,c=5,true); //Turn off for 1/4 sec
lc.setLed(3,r=4,c=4,true); //Turn off for 1/4 sec // letter C vertical bar
lc.setLed(3,r=4,c=6,true); //Turn off for 1/4 sec
lc.setLed(3,r=4,c=7,true); //Turn off for 1/4 sec
lc.setLed(3,r=5,c=7,true); //Turn off for 1/4 sec
lc.setLed(3,r=6,c=7,true); //Turn off for 1/4 sec // letter C top bar
lc.setLed(3,r=5,c=4,true); //Turn off for 1/4 sec
lc.setLed(3,r=6,c=4,true); //Turn off for 1/4 sec // letter C lower bar.
}
void printNumberH(float num)
{
int ones;
int tens;
int hundreds;
int v=(int)num;
float diff=num-v;
diff=diff*100;
int fones,ftens;
fones=(int)diff%10;
diff=diff/10;
ftens=(int)diff%10;
diff=diff/10;
ones=v%10;
v=v/10;
tens=v%10;
v=v/10;
hundreds=v;
//Now print the number digit by digit
lc.displayChar(0,tens);
lc.displayChar(1,ones);
lc.displayChar(2,ftens);
int c,r;
lc.setLed(1,r=7,c=0,true); //Turn off for 1/4 sec
lc.setLed(1,r=6,c=0,true); //Turn off for 1/4 sec
lc.setLed(1,r=6,c=1,true); //Turn off for 1/4 sec
lc.setLed(1,r=7,c=1,true); //Turn off for 1/4 sec
lc.setLed(3,r=1,c=5,true); //Turn off for 1/4 sec
lc.setLed(3,r=1,c=6,true); //Turn off for 1/4 sec
lc.setLed(3,r=2,c=5,true); //Turn off for 1/4 sec
lc.setLed(3,r=2,c=6,true); //Turn off for 1/4 sec // percent left dot
lc.setLed(3,r=5,c=1,true); //Turn off for 1/4 sec
lc.setLed(3,r=5,c=2,true); //Turn off for 1/4 sec
lc.setLed(3,r=6,c=1,true); //Turn off for 1/4 sec
lc.setLed(3,r=6,c=2,true); //Turn off for 1/4 sec // percent right dot
lc.setLed(3,r=1,c=1,true); //Turn off for 1/4 sec
lc.setLed(3,r=2,c=2,true); //Turn off for 1/4 sec
lc.setLed(3,r=3,c=3,true); //Turn off for 1/4 sec
lc.setLed(3,r=4,c=4,true); //Turn off for 1/4 sec
lc.setLed(3,r=5,c=5,true); //Turn off for 1/4 sec // percent diagonal bar
lc.setLed(3,r=6,c=6,true); //Turn off for 1/4 sec
}
void loop(){
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
ds.search(addr);
delay(25);
lc.clearDisplay(0);// clear screen
lc.clearDisplay(1);// clear screen
lc.clearDisplay(2);// clear screen
lc.clearDisplay(3);// clear screen
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
Serial.println(" Chip = DS18S20"); // or old DS1820
type_s = 1;
break;
case 0x28:
Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case 0x22:
Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
delay(75); // maybe 750ms is enough for correct start up temp, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
Serial.print(" Data = ");
Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
Serial.print(data[i], HEX);
Serial.print(" ");
}
Serial.print(" CRC=");
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();
// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10) {
// "count remain" gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time
}
celsius = raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
celsius = celsius +1;
Serial.print(" Temperature = ");
Serial.print(celsius);
Serial.print(" Celsius, ");
Serial.print(fahrenheit);
Serial.println(" Fahrenheit");
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity()+8;
// Read temperature as Celsius
float t = dht.readTemperature();
// Read temperature as Fahrenheit
float f = dht.readTemperature(true);
// Compute heat index
// Must send in temp in Fahrenheit!
float hi = dht.computeHeatIndex(f, h);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hi);
Serial.println(" *F");
Serial.println(" ");
Serial.println("--------------------------------------------------------------------------------------------------- ");
// delay(2000);
lc.clearDisplay(0);// clear screen
lc.clearDisplay(1);// clear screen
lc.clearDisplay(2);// clear screen
lc.clearDisplay(3);// clear screen
lc.clearDisplay(4);// clear screen
printNumberC(celsius);
delay(5000);
lc.clearDisplay(0);// clear screen
lc.clearDisplay(1);// clear screen
lc.clearDisplay(2);// clear screen
lc.clearDisplay(3);// clear screen
lc.clearDisplay(4);// clear screen
tempF=(h);
printNumberH(tempF);
// delay(2500);
int c,r;
delay(2500);
lc.clearDisplay(3);// clear screen
lc.setColumn(3,c=7,B00111100);
lc.setColumn(3,c=6,B01000010);
lc.setColumn(3,c=5,B00100101);
lc.setColumn(3,c=4,B00010001);
lc.setColumn(3,c=3,B00001001);
lc.setColumn(3,c=2,B11111001);
lc.setColumn(3,c=1,B01000010);
lc.setColumn(3,c=0,B00111100);
delay(500);
lc.clearDisplay(3);// clear screen
lc.setColumn(3,c=7,B00111100);
lc.setColumn(3,c=6,B01000010);
lc.setColumn(3,c=5,B10001001);
lc.setColumn(3,c=4,B10000001); // CLOSED MOUTH PACMAN
lc.setColumn(3,c=3,B11110001);
lc.setColumn(3,c=2,B10000001);
lc.setColumn(3,c=1,B01000010);
lc.setColumn(3,c=0,B00111100);
delay(500);
lc.clearDisplay(3);// clear screen
lc.setColumn(3,c=7,B00111100);
lc.setColumn(3,c=6,B01000010);
lc.setColumn(3,c=5,B00100101);
lc.setColumn(3,c=4,B00010001);
lc.setColumn(3,c=3,B00001001);
lc.setColumn(3,c=2,B11111001);
lc.setColumn(3,c=1,B01000010);
lc.setColumn(3,c=0,B00111100);
delay(250);
lc.clearDisplay(3);// clear screen
lc.clearDisplay(2);
lc.setColumn(2,c=7,B00111100);
lc.setColumn(2,c=6,B01000010);
lc.setColumn(2,c=5,B00100101);
lc.setColumn(2,c=4,B00010001);
lc.setColumn(2,c=3,B00001001);
lc.setColumn(2,c=2,B11111001);
lc.setColumn(2,c=1,B01000010);
lc.setColumn(2,c=0,B00111100);
delay(250);
lc.clearDisplay(2);// clear screen
lc.setColumn(2,c=7,B00111100);
lc.setColumn(2,c=6,B01000010);
lc.setColumn(2,c=5,B10001001);
lc.setColumn(2,c=4,B10000001); // CLOSED MOUTH PACMAN
lc.setColumn(2,c=3,B11110001);
lc.setColumn(2,c=2,B10000001);
lc.setColumn(2,c=1,B01000010);
lc.setColumn(2,c=0,B00111100);
delay(250);
lc.clearDisplay(2);
lc.setColumn(2,c=7,B00111100);
lc.setColumn(2,c=6,B01000010);
lc.setColumn(2,c=5,B00100101);
lc.setColumn(2,c=4,B00010001);
lc.setColumn(2,c=3,B00001001);
lc.setColumn(2,c=2,B11111001);
lc.setColumn(2,c=1,B01000010);
lc.setColumn(2,c=0,B00111100);
delay(250);
lc.clearDisplay(2);// clear screen
lc.clearDisplay(1);
lc.setColumn(1,c=7,B00111100);
lc.setColumn(1,c=6,B01000010);
lc.setColumn(1,c=5,B00100101);
lc.setColumn(1,c=4,B00010001);
lc.setColumn(1,c=3,B00001001);
lc.setColumn(1,c=2,B11111001);
lc.setColumn(1,c=1,B01000010);
lc.setColumn(1,c=0,B00111100);
delay(250);
lc.clearDisplay(1);// clear screen
lc.setColumn(1,c=7,B00111100);
lc.setColumn(1,c=6,B01000010);
lc.setColumn(1,c=5,B10001001);
lc.setColumn(1,c=4,B10000001); // CLOSED MOUTH PACMAN
lc.setColumn(1,c=3,B11110001);
lc.setColumn(1,c=2,B10000001);
lc.setColumn(1,c=1,B01000010);
lc.setColumn(1,c=0,B00111100);
delay(250);
lc.clearDisplay(1);// clear screen
lc.clearDisplay(0);
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010);
lc.setColumn(0,c=5,B00100101);
lc.setColumn(0,c=4,B00010001);
lc.setColumn(0,c=3,B00001001);
lc.setColumn(0,c=2,B11111001);
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100);
delay(250);
lc.clearDisplay(0);// clear screen
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010);
lc.setColumn(0,c=5,B10001001);
lc.setColumn(0,c=4,B10000001); // CLOSED MOUTH PACMAN
lc.setColumn(0,c=3,B11110001);
lc.setColumn(0,c=2,B10000001);
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100);
delay(250);
lc.clearDisplay(0);// clear screen
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010);
lc.setColumn(0,c=5,B00100101);
lc.setColumn(0,c=4,B00010001);
lc.setColumn(0,c=3,B00001001);
lc.setColumn(0,c=2,B11111001);
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100);
delay(250);
lc.clearDisplay(0);// clear screen
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010);
lc.setColumn(0,c=5,B10001001);
lc.setColumn(0,c=4,B10000001);
lc.setColumn(0,c=3,B11110001);
lc.setColumn(0,c=2,B10000001);
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100);
delay(500);
//lc.clearDisplay(0);// clear screen
lc.setColumn(1,c=0,B10000000);
delay(200);
lc.setColumn(1,c=0,B0100000);
delay(300);
lc.setColumn(1,c=0,B00100000);
delay(200);
lc.setColumn(1,c=0,B10100000);
delay(200);
lc.setColumn(1,c=0,B01100000);
delay(200);
lc.setColumn(1,c=0,B00100000);
lc.setColumn(1,c=1,B00100000);
delay(700);
lc.setColumn(1,c=0,B00100000);
lc.setColumn(1,c=1,B00100000);
lc.setColumn(1,c=0,B10100000);
delay(200);
lc.setColumn(1,c=0,B00100000);
lc.setColumn(1,c=1,B00100000);
lc.setColumn(1,c=0,B01100000);
delay(1500);
//lc.clearDisplay(0);// clear screen
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010);
lc.setColumn(0,c=5,B10000001);
lc.setColumn(0,c=4,B10000001);
lc.setColumn(0,c=3,B11110001);
lc.setColumn(0,c=2,B10000001);
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100);
delay(250);
lc.setColumn(0,c=7,B00111100);
lc.setColumn(0,c=6,B01000010);
lc.setColumn(0,c=5,B10001001);
lc.setColumn(0,c=4,B10000001);
lc.setColumn(0,c=3,B11110001);
lc.setColumn(0,c=2,B10000001);
lc.setColumn(0,c=1,B01000010);
lc.setColumn(0,c=0,B00111100);
delay(1000);
lc.clearDisplay(0);// clear screen
}