[136] | 1 | #include "Arduino.h"
|
---|
| 2 | #include <Wire.h>
|
---|
| 3 | #include <LiquidCrystal_I2C.h>
|
---|
| 4 |
|
---|
| 5 |
|
---|
| 6 | const uint8_t addressTemp = 0x4Ful;
|
---|
| 7 | const uint8_t addressLCD = 0x20ul;
|
---|
| 8 | const uint8_t addressRTC = 0x68ul;
|
---|
| 9 | uint16_t valueTemp = 0;
|
---|
| 10 | uint8_t a, b;
|
---|
| 11 |
|
---|
| 12 | LiquidCrystal_I2C lcd(addressLCD,16,2); // set the LCD address to 0x20(Cooperate with 3 short circuit caps) for a 16 chars and 2 line display
|
---|
| 13 |
|
---|
| 14 | struct timeRTC
|
---|
| 15 | {
|
---|
| 16 | uint8_t hour;
|
---|
| 17 | uint8_t minute;
|
---|
| 18 | uint8_t second;
|
---|
| 19 |
|
---|
| 20 | uint8_t dayMonth;
|
---|
| 21 | uint8_t dayWeek;
|
---|
| 22 | uint8_t month;
|
---|
| 23 | uint8_t year;
|
---|
| 24 | } timeRtc;
|
---|
| 25 |
|
---|
| 26 | // Convert normal decimal to numbers binary coded decimal
|
---|
| 27 | uint8_t decToBcd(byte val)
|
---|
| 28 | {
|
---|
| 29 | return ( (val/10*16) + (val%10) );
|
---|
| 30 | }
|
---|
| 31 |
|
---|
| 32 | // Convert binary coded decimal to normal decimal numbers
|
---|
| 33 | uint8_t bcdToDec(byte val)
|
---|
| 34 | {
|
---|
| 35 | return ( (val/16*10) + (val%16) );
|
---|
| 36 | }
|
---|
| 37 |
|
---|
| 38 | void updateTime()
|
---|
| 39 | {
|
---|
| 40 | Wire.beginTransmission(addressRTC);
|
---|
| 41 | //Wire.write((uint8_t)0x3F);
|
---|
| 42 | Wire.write((uint8_t)0x00);
|
---|
| 43 | Wire.endTransmission();
|
---|
| 44 |
|
---|
| 45 | delay(10);
|
---|
| 46 |
|
---|
| 47 | Wire.requestFrom(addressRTC, 7);
|
---|
| 48 |
|
---|
| 49 | timeRtc.second = bcdToDec(Wire.read());
|
---|
| 50 | timeRtc.minute = bcdToDec(Wire.read());
|
---|
| 51 | timeRtc.hour = bcdToDec(Wire.read());
|
---|
| 52 |
|
---|
| 53 | timeRtc.dayWeek = bcdToDec(Wire.read());
|
---|
| 54 | timeRtc.dayMonth = bcdToDec(Wire.read());
|
---|
| 55 | timeRtc.month = bcdToDec(Wire.read());
|
---|
| 56 | timeRtc.year = bcdToDec(Wire.read());
|
---|
| 57 | }
|
---|
| 58 |
|
---|
| 59 | void setup()
|
---|
| 60 | {
|
---|
| 61 | Serial5.begin( 115200 );
|
---|
| 62 | Serial5.println("Wire init");
|
---|
| 63 | Wire.begin();
|
---|
| 64 |
|
---|
| 65 | lcd.init();
|
---|
| 66 | lcd.backlight();
|
---|
| 67 | lcd.home();
|
---|
| 68 |
|
---|
| 69 | pinMode(2, INPUT_PULLUP);
|
---|
| 70 | }
|
---|
| 71 |
|
---|
| 72 | void LCDSpecialPrint(uint8_t value)
|
---|
| 73 | {
|
---|
| 74 | if(value < 10)
|
---|
| 75 | {
|
---|
| 76 | lcd.print('0');
|
---|
| 77 | }
|
---|
| 78 |
|
---|
| 79 | lcd.print(value);
|
---|
| 80 | }
|
---|
| 81 |
|
---|
| 82 | void loop()
|
---|
| 83 | {
|
---|
| 84 | Wire.beginTransmission(addressTemp);
|
---|
| 85 | Wire.write((uint8_t) 0x00);
|
---|
| 86 | Wire.endTransmission();
|
---|
| 87 |
|
---|
| 88 | delay(10);
|
---|
| 89 |
|
---|
| 90 | Wire.requestFrom(addressTemp, 2);
|
---|
| 91 | Serial5.print((char)13); // Erase current line
|
---|
| 92 | Serial5.print("Temperature : ");
|
---|
| 93 |
|
---|
| 94 | a = Wire.read();
|
---|
| 95 | b = Wire.read();
|
---|
| 96 |
|
---|
| 97 | valueTemp = a << 7;
|
---|
| 98 | valueTemp |= b;
|
---|
| 99 | valueTemp >>= 7;
|
---|
| 100 |
|
---|
| 101 | Serial5.print(a);
|
---|
| 102 | Serial5.print(" | ");
|
---|
| 103 | Serial5.print(b);
|
---|
| 104 |
|
---|
| 105 | updateTime();
|
---|
| 106 | lcd.setCursor(0, 0);
|
---|
| 107 | lcd.print(" ");
|
---|
| 108 | LCDSpecialPrint(valueTemp);
|
---|
| 109 | lcd.print((char)0xDF);
|
---|
| 110 | lcd.print("C ");
|
---|
| 111 |
|
---|
| 112 | LCDSpecialPrint(timeRtc.month);
|
---|
| 113 | lcd.print("/");
|
---|
| 114 | LCDSpecialPrint(timeRtc.dayMonth);
|
---|
| 115 | lcd.print("/");
|
---|
| 116 | LCDSpecialPrint(timeRtc.year);
|
---|
| 117 | lcd.print(" ");
|
---|
| 118 |
|
---|
| 119 | lcd.setCursor(0, 1);
|
---|
| 120 | lcd.print(" ");
|
---|
| 121 | LCDSpecialPrint(timeRtc.hour);
|
---|
| 122 | lcd.print(":");
|
---|
| 123 | LCDSpecialPrint(timeRtc.minute);
|
---|
| 124 | lcd.print(":");
|
---|
| 125 | LCDSpecialPrint(timeRtc.second);
|
---|
| 126 | }
|
---|