MCP9808 and 4-digit 7-segment display
Simple temperature reading with the MCP9808 on the 4-digit 7-segment display.
Components and supplies
4
Resistor 1k ohm
1
Jumper wires (generic)
1
MCP9808
1
Breadboard (generic)
1
4-digit 7-segment display
1
Arduino UNO
Project description
Code
Code:
arduino
1/* Using the MCP9808 to take more accurate temperature readings, 2 display it on the 4 digit 7 segment. 3 4 Components: 5 - Arduino Uno 6 - MCP9808 7 - 4 digit 7 segment display 8 - 1kOhm resistor (x 4) 9 10 Libraries: 11 - Wire 12 - Adafruit_MCP9808 13 14 Datasheet: https://cdn-shop.adafruit.com/datasheets/MCP9808.pdf 15 16 Created on 13 June 2022 by c010rblind3ngineer 17*/ 18 19#include <Wire.h> 20#include "Adafruit_MCP9808.h" 21 22// Create the MCP9808 temperature sensor object 23Adafruit_MCP9808 tempSensor = Adafruit_MCP9808(); 24 25int pinA = 11; 26int pinB = 7; 27int pinC = 4; 28int pinD = 2; 29int pinE = 1; 30int pinF = 10; 31int pinG = 5; 32int pinDP = 3; 33 34int D1 = 12; 35int D2 = 9; 36int D3 = 8; 37int D4 = 6; 38 39void setup() { 40 // put your setup code here, to run once: 41 pinMode(pinA, OUTPUT); //11 42 pinMode(pinB, OUTPUT); //7 43 pinMode(pinC, OUTPUT); //4 44 pinMode(pinD, OUTPUT); //2 45 pinMode(pinE, OUTPUT); //1 46 pinMode(pinF, OUTPUT); //10 47 pinMode(pinG, OUTPUT); //5 48 pinMode(D1, OUTPUT); //12 49 pinMode(D2, OUTPUT); //9 50 pinMode(D3, OUTPUT); //8 51 pinMode(D4, OUTPUT); //6 52 53 tempSensor.begin(0x18); 54} 55 56void loop() { 57 // put your main code here, to run repeatedly: 58 float C = tempSensor.readTempC(); // Celsius 59 // float F = C*9.0/5.0 + 32; // Fahrenheit 60 61 // display temperature (Celsius) digis on 4 digit 7 segment display 62 int tempd1 = int(C / 10); 63 int tempd2 = int((int)C % 10); 64 65 // display temperature (Fahrenheit) digis on 4 digit 7 segment display 66 // int tempd1 = int(F/10); 67 // int tempd2 = int((int)F%10); 68 69 // 'for' loop ensures the display is constantly ON within a period of time (approx. 10s)... 70 // ...before sensor takes another reading. 71 // Temperature reading 72 for (int i = 0; i < 2000; i++) { 73 digitalWrite(D1, LOW); 74 digitalWrite(D2, HIGH); 75 digitalWrite(D3, HIGH); 76 digitalWrite(D4, HIGH); 77 disp(tempd1); 78 delay(1); 79 80 digitalWrite(D1, HIGH); 81 digitalWrite(D2, LOW); 82 digitalWrite(D3, HIGH); 83 digitalWrite(D4, HIGH); 84 disp(tempd2); 85 delay(1); 86 87 digitalWrite(D1, HIGH); 88 digitalWrite(D2, HIGH); 89 digitalWrite(D3, LOW); 90 digitalWrite(D4, HIGH); 91 disp(11); 92 delay(1); 93 94 digitalWrite(D1, HIGH); 95 digitalWrite(D2, HIGH); 96 digitalWrite(D3, HIGH); 97 digitalWrite(D4, LOW); 98 disp(10); 99 delay(1); 100 101 // Fahrenheit symbol 102 // digitalWrite(D1, HIGH); 103 // digitalWrite(D2, HIGH); 104 // digitalWrite(D3, HIGH); 105 // digitalWrite(D4, LOW); 106 // disp(12); 107 // delay(1); 108 } 109 displayoff(); 110 tempSensor.shutdown_wake(1); // shutdown MCP9808 - power consumption ~0.1 micro Ampere 111 delay(2000); 112 tempSensor.shutdown_wake(0); // wake up MCP9808 - power consumption ~200 micro Ampere 113 114} 115 116void disp(int number) { 117 118 switch (number) { 119 case 0 : // display '0' on 7 segment 120 digitalWrite(pinA, HIGH); 121 digitalWrite(pinB, HIGH); 122 digitalWrite(pinC, HIGH); 123 digitalWrite(pinD, HIGH); 124 digitalWrite(pinE, HIGH); 125 digitalWrite(pinF, HIGH); 126 digitalWrite(pinG, LOW); 127 break; 128 129 case 1 : // display '1' on 7 segment 130 digitalWrite(pinA, LOW); 131 digitalWrite(pinB, HIGH); 132 digitalWrite(pinC, HIGH); 133 digitalWrite(pinD, LOW); 134 digitalWrite(pinE, LOW); 135 digitalWrite(pinF, LOW); 136 digitalWrite(pinG, LOW); 137 break; 138 139 case 2 : // display '2' on 7 segment 140 digitalWrite(pinA, HIGH); 141 digitalWrite(pinB, HIGH); 142 digitalWrite(pinC, LOW); 143 digitalWrite(pinD, HIGH); 144 digitalWrite(pinE, HIGH); 145 digitalWrite(pinF, LOW); 146 digitalWrite(pinG, HIGH); 147 break; 148 149 case 3 : // display '3' on 7 segment 150 digitalWrite(pinA, HIGH); 151 digitalWrite(pinB, HIGH); 152 digitalWrite(pinC, HIGH); 153 digitalWrite(pinD, HIGH); 154 digitalWrite(pinE, LOW); 155 digitalWrite(pinF, LOW); 156 digitalWrite(pinG, HIGH); 157 break; 158 159 case 4 : // display '4' on 7 segment 160 digitalWrite(pinA, LOW); 161 digitalWrite(pinB, HIGH); 162 digitalWrite(pinC, HIGH); 163 digitalWrite(pinD, LOW); 164 digitalWrite(pinE, LOW); 165 digitalWrite(pinF, HIGH); 166 digitalWrite(pinG, HIGH); 167 break; 168 169 case 5 : // display '5' on 7 segment 170 digitalWrite(pinA, HIGH); 171 digitalWrite(pinB, LOW); 172 digitalWrite(pinC, HIGH); 173 digitalWrite(pinD, HIGH); 174 digitalWrite(pinE, LOW); 175 digitalWrite(pinF, HIGH); 176 digitalWrite(pinG, HIGH); 177 break; 178 179 case 6 : // display '6' on 7 segment 180 digitalWrite(pinA, HIGH); 181 digitalWrite(pinB, LOW); 182 digitalWrite(pinC, HIGH); 183 digitalWrite(pinD, HIGH); 184 digitalWrite(pinE, HIGH); 185 digitalWrite(pinF, HIGH); 186 digitalWrite(pinG, HIGH); 187 break; 188 189 case 7 : // display '7' on 7 segment 190 digitalWrite(pinA, HIGH); 191 digitalWrite(pinB, HIGH); 192 digitalWrite(pinC, HIGH); 193 digitalWrite(pinD, LOW); 194 digitalWrite(pinE, LOW); 195 digitalWrite(pinF, LOW); 196 digitalWrite(pinG, LOW); 197 break; 198 199 case 8 : // display '8' on 7 segment 200 digitalWrite(pinA, HIGH); 201 digitalWrite(pinB, HIGH); 202 digitalWrite(pinC, HIGH); 203 digitalWrite(pinD, HIGH); 204 digitalWrite(pinE, HIGH); 205 digitalWrite(pinF, HIGH); 206 digitalWrite(pinG, HIGH); 207 break; 208 209 case 9 : // display '9' on 7 segment 210 digitalWrite(pinA, HIGH); 211 digitalWrite(pinB, HIGH); 212 digitalWrite(pinC, HIGH); 213 digitalWrite(pinD, LOW); 214 digitalWrite(pinE, LOW); 215 digitalWrite(pinF, HIGH); 216 digitalWrite(pinG, HIGH); 217 break; 218 219 case 10 : // display 'C' on 7 segment 220 digitalWrite(pinA, HIGH); 221 digitalWrite(pinB, LOW); 222 digitalWrite(pinC, LOW); 223 digitalWrite(pinD, HIGH); 224 digitalWrite(pinE, HIGH); 225 digitalWrite(pinF, HIGH); 226 digitalWrite(pinG, LOW); 227 break; 228 229 case 11 : // display 'o' on 7 segment 230 digitalWrite(pinA, HIGH); 231 digitalWrite(pinB, HIGH); 232 digitalWrite(pinC, LOW); 233 digitalWrite(pinD, LOW); 234 digitalWrite(pinE, LOW); 235 digitalWrite(pinF, HIGH); 236 digitalWrite(pinG, HIGH); 237 break; 238 239 // case 12 : // display "F" on 7 segment 240 // digitalWrite(pinA, HIGH); 241 // digitalWrite(pinB, LOW); 242 // digitalWrite(pinC, LOW); 243 // digitalWrite(pinD, LOW); 244 // digitalWrite(pinE, HIGH); 245 // digitalWrite(pinF, HIGH); 246 // digitalWrite(pinG, HIGH); 247 // break; 248 } 249} 250 251void displayoff() { 252 digitalWrite(D1, HIGH); 253 digitalWrite(D2, HIGH); 254 digitalWrite(D3, HIGH); 255 digitalWrite(D4, HIGH); 256} 257
Repository link:
Code:
arduino
1/* Using the MCP9808 to take more accurate temperature readings, 2 display it on the 4 digit 7 segment. 3 4 Components: 5 - Arduino Uno 6 - MCP9808 7 - 4 digit 7 segment display 8 - 1kOhm resistor (x 4) 9 10 Libraries: 11 - Wire 12 - Adafruit_MCP9808 13 14 Datasheet: https://cdn-shop.adafruit.com/datasheets/MCP9808.pdf 15 16 Created on 13 June 2022 by c010rblind3ngineer 17*/ 18 19#include <Wire.h> 20#include "Adafruit_MCP9808.h" 21 22// Create the MCP9808 temperature sensor object 23Adafruit_MCP9808 tempSensor = Adafruit_MCP9808(); 24 25int pinA = 11; 26int pinB = 7; 27int pinC = 4; 28int pinD = 2; 29int pinE = 1; 30int pinF = 10; 31int pinG = 5; 32int pinDP = 3; 33 34int D1 = 12; 35int D2 = 9; 36int D3 = 8; 37int D4 = 6; 38 39void setup() { 40 // put your setup code here, to run once: 41 pinMode(pinA, OUTPUT); //11 42 pinMode(pinB, OUTPUT); //7 43 pinMode(pinC, OUTPUT); //4 44 pinMode(pinD, OUTPUT); //2 45 pinMode(pinE, OUTPUT); //1 46 pinMode(pinF, OUTPUT); //10 47 pinMode(pinG, OUTPUT); //5 48 pinMode(D1, OUTPUT); //12 49 pinMode(D2, OUTPUT); //9 50 pinMode(D3, OUTPUT); //8 51 pinMode(D4, OUTPUT); //6 52 53 tempSensor.begin(0x18); 54} 55 56void loop() { 57 // put your main code here, to run repeatedly: 58 float C = tempSensor.readTempC(); // Celsius 59 // float F = C*9.0/5.0 + 32; // Fahrenheit 60 61 // display temperature (Celsius) digis on 4 digit 7 segment display 62 int tempd1 = int(C / 10); 63 int tempd2 = int((int)C % 10); 64 65 // display temperature (Fahrenheit) digis on 4 digit 7 segment display 66 // int tempd1 = int(F/10); 67 // int tempd2 = int((int)F%10); 68 69 // 'for' loop ensures the display is constantly ON within a period of time (approx. 10s)... 70 // ...before sensor takes another reading. 71 // Temperature reading 72 for (int i = 0; i < 2000; i++) { 73 digitalWrite(D1, LOW); 74 digitalWrite(D2, HIGH); 75 digitalWrite(D3, HIGH); 76 digitalWrite(D4, HIGH); 77 disp(tempd1); 78 delay(1); 79 80 digitalWrite(D1, HIGH); 81 digitalWrite(D2, LOW); 82 digitalWrite(D3, HIGH); 83 digitalWrite(D4, HIGH); 84 disp(tempd2); 85 delay(1); 86 87 digitalWrite(D1, HIGH); 88 digitalWrite(D2, HIGH); 89 digitalWrite(D3, LOW); 90 digitalWrite(D4, HIGH); 91 disp(11); 92 delay(1); 93 94 digitalWrite(D1, HIGH); 95 digitalWrite(D2, HIGH); 96 digitalWrite(D3, HIGH); 97 digitalWrite(D4, LOW); 98 disp(10); 99 delay(1); 100 101 // Fahrenheit symbol 102 // digitalWrite(D1, HIGH); 103 // digitalWrite(D2, HIGH); 104 // digitalWrite(D3, HIGH); 105 // digitalWrite(D4, LOW); 106 // disp(12); 107 // delay(1); 108 } 109 displayoff(); 110 tempSensor.shutdown_wake(1); // shutdown MCP9808 - power consumption ~0.1 micro Ampere 111 delay(2000); 112 tempSensor.shutdown_wake(0); // wake up MCP9808 - power consumption ~200 micro Ampere 113 114} 115 116void disp(int number) { 117 118 switch (number) { 119 case 0 : // display '0' on 7 segment 120 digitalWrite(pinA, HIGH); 121 digitalWrite(pinB, HIGH); 122 digitalWrite(pinC, HIGH); 123 digitalWrite(pinD, HIGH); 124 digitalWrite(pinE, HIGH); 125 digitalWrite(pinF, HIGH); 126 digitalWrite(pinG, LOW); 127 break; 128 129 case 1 : // display '1' on 7 segment 130 digitalWrite(pinA, LOW); 131 digitalWrite(pinB, HIGH); 132 digitalWrite(pinC, HIGH); 133 digitalWrite(pinD, LOW); 134 digitalWrite(pinE, LOW); 135 digitalWrite(pinF, LOW); 136 digitalWrite(pinG, LOW); 137 break; 138 139 case 2 : // display '2' on 7 segment 140 digitalWrite(pinA, HIGH); 141 digitalWrite(pinB, HIGH); 142 digitalWrite(pinC, LOW); 143 digitalWrite(pinD, HIGH); 144 digitalWrite(pinE, HIGH); 145 digitalWrite(pinF, LOW); 146 digitalWrite(pinG, HIGH); 147 break; 148 149 case 3 : // display '3' on 7 segment 150 digitalWrite(pinA, HIGH); 151 digitalWrite(pinB, HIGH); 152 digitalWrite(pinC, HIGH); 153 digitalWrite(pinD, HIGH); 154 digitalWrite(pinE, LOW); 155 digitalWrite(pinF, LOW); 156 digitalWrite(pinG, HIGH); 157 break; 158 159 case 4 : // display '4' on 7 segment 160 digitalWrite(pinA, LOW); 161 digitalWrite(pinB, HIGH); 162 digitalWrite(pinC, HIGH); 163 digitalWrite(pinD, LOW); 164 digitalWrite(pinE, LOW); 165 digitalWrite(pinF, HIGH); 166 digitalWrite(pinG, HIGH); 167 break; 168 169 case 5 : // display '5' on 7 segment 170 digitalWrite(pinA, HIGH); 171 digitalWrite(pinB, LOW); 172 digitalWrite(pinC, HIGH); 173 digitalWrite(pinD, HIGH); 174 digitalWrite(pinE, LOW); 175 digitalWrite(pinF, HIGH); 176 digitalWrite(pinG, HIGH); 177 break; 178 179 case 6 : // display '6' on 7 segment 180 digitalWrite(pinA, HIGH); 181 digitalWrite(pinB, LOW); 182 digitalWrite(pinC, HIGH); 183 digitalWrite(pinD, HIGH); 184 digitalWrite(pinE, HIGH); 185 digitalWrite(pinF, HIGH); 186 digitalWrite(pinG, HIGH); 187 break; 188 189 case 7 : // display '7' on 7 segment 190 digitalWrite(pinA, HIGH); 191 digitalWrite(pinB, HIGH); 192 digitalWrite(pinC, HIGH); 193 digitalWrite(pinD, LOW); 194 digitalWrite(pinE, LOW); 195 digitalWrite(pinF, LOW); 196 digitalWrite(pinG, LOW); 197 break; 198 199 case 8 : // display '8' on 7 segment 200 digitalWrite(pinA, HIGH); 201 digitalWrite(pinB, HIGH); 202 digitalWrite(pinC, HIGH); 203 digitalWrite(pinD, HIGH); 204 digitalWrite(pinE, HIGH); 205 digitalWrite(pinF, HIGH); 206 digitalWrite(pinG, HIGH); 207 break; 208 209 case 9 : // display '9' on 7 segment 210 digitalWrite(pinA, HIGH); 211 digitalWrite(pinB, HIGH); 212 digitalWrite(pinC, HIGH); 213 digitalWrite(pinD, LOW); 214 digitalWrite(pinE, LOW); 215 digitalWrite(pinF, HIGH); 216 digitalWrite(pinG, HIGH); 217 break; 218 219 case 10 : // display 'C' on 7 segment 220 digitalWrite(pinA, HIGH); 221 digitalWrite(pinB, LOW); 222 digitalWrite(pinC, LOW); 223 digitalWrite(pinD, HIGH); 224 digitalWrite(pinE, HIGH); 225 digitalWrite(pinF, HIGH); 226 digitalWrite(pinG, LOW); 227 break; 228 229 case 11 : // display 'o' on 7 segment 230 digitalWrite(pinA, HIGH); 231 digitalWrite(pinB, HIGH); 232 digitalWrite(pinC, LOW); 233 digitalWrite(pinD, LOW); 234 digitalWrite(pinE, LOW); 235 digitalWrite(pinF, HIGH); 236 digitalWrite(pinG, HIGH); 237 break; 238 239 // case 12 : // display "F" on 7 segment 240 // digitalWrite(pinA, HIGH); 241 // digitalWrite(pinB, LOW); 242 // digitalWrite(pinC, LOW); 243 // digitalWrite(pinD, LOW); 244 // digitalWrite(pinE, HIGH); 245 // digitalWrite(pinF, HIGH); 246 // digitalWrite(pinG, HIGH); 247 // break; 248 } 249} 250 251void displayoff() { 252 digitalWrite(D1, HIGH); 253 digitalWrite(D2, HIGH); 254 digitalWrite(D3, HIGH); 255 digitalWrite(D4, HIGH); 256} 257
Repository link:
Downloadable files
Circuit:
Circuit:

Schematic:
Schematic:

Circuit:
Circuit:

Comments
Only logged in users can leave comments