Lesson 34: Using the MCP9808 High-Accuracy I2C Temperature Sensor with a TM1637 LED Display in an Arduino Step-by-Step Course
In this lesson, we learn how to use the MCP9808 temperature sensor to measure temperature and display it on a TM1637 LED display. We have no decimal point with this display. There are two other video lectures for this sensor: one is an introduction to the MCP9808 and the other shows how to use the MCP9808 with an LCD screen.
514-Lesson 34: Using the MCP9808 High-Accuracy I2C Temperature Sensor with a TM1637 LED Display | Arduino Step-by-Step Course
Language: C++
/*
* Robojax Arduino Step-by-Step Course
* Part 3: Temperature Sensors
* Lesson 34: MCP9808 with TM1637 LED Display
* Updated by Ahmad Shamshiri for Robojax Robojax.com
* on March 23, 2019 in Ajax, Ontario, Canada
Please watch video instructions here: https://youtu.be/Q_rBLKdnCd4
This code is available at: http://robojax.com/course1/?vid=lecture34
with over 100 lectures free on YouTube. Watch it here: http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339
If you found this tutorial helpful, please support me so I can continue creating.
Make a donation using PayPal: http://robojax.com/L/?id=64
* Code is available at: http://robojax.com/learn/arduino
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**************************************************************************/
/*!
This is a demo for the Adafruit MCP9808 breakout
----> http://www.adafruit.com/products/1782
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
*/
/**************************************************************************/
#include <math.h>
#include <Wire.h>
#include "Adafruit_MCP9808.h"
// Create the MCP9808 temperature sensor object
Adafruit_MCP9808 tempsensor = Adafruit_MCP9808();
// start of settings of TM1637 display
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 5
#define DIO 6
TM1637Display display(CLK, DIO);
// start of settings of TM1637 display
uint8_t blank[] = { 0x0, 0x0, 0x0, 0x0 };// blank value for all digits
void setup() {
//YouTube Watch it here http://robojax.com/L/?id=338
Serial.begin(9600);
Serial.println("MCP9808 demo by Robojax");
display.setBrightness(0x0f);
// Make sure the sensor is found, you can also pass in a different i2c
// address with tempsensor.begin(0x19) for example
if (!tempsensor.begin()) {
Serial.println("Couldn't find MCP9808!");
while (1);
}
}
void loop() {
//Serial.println("wake up MCP9808.... "); // wake up MCP9808 - power consumption ~200 mikro Ampere
//tempsensor.wake(); // wake up, ready to read!
// Robojax example
Serial.print(getTemp('C'));// print Temperature in Celsius
Serial.println(" C");// print C
Serial.print(getTemp('F'));// print Temperature in Celsius
Serial.println(" F");// print F
Serial.print(getTemp('K'));// print Temperature in Kelvin
Serial.println(" K");// print K
Serial.println();
display.setSegments(blank);
display.showNumberDec(round(getTemp('C')));
delay(3000);
display.setSegments(blank);
display.showNumberDec(round(getTemp('F')));
//Serial.println("Shutdown MCP9808.... ");
//tempsensor.shutdown(); // shutdown MCP9808 - power consumption ~0.1 micro Ampere
delay(1000);
//YouTube Watch it here http://robojax.com/L/?id=338
}
/*
* Written by Ahmad Shamshiri
* January 22, 2019 in Ajax, Ontario, Canada
*
* getTemp(char type)
* returns temperature in either C, F or K
* @param type is character of upper case
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
*/
float getTemp(char type) {
//YouTube Watch it here http://robojax.com/L/?id=338
float c = tempsensor.readTempC();//get main temperature in C
float f = c * 9.0 / 5.0 + 32;// convert to fahrenheit
if(type =='F')
{
return f;// fahrenheit
}else if(type =='K')
{
return c + 274.15;// return Kelvin
}else{
return c; //return Celsius
}
}//getTemp ends
Resources & references
-
ExternalAdafruit MCP9808 library (from GitHub)github.com
-
ExternalDownload the MCP9808 datasheet (PDF)ww1.microchip.com
Files📁
No files available.