В 1000-й раз о RTC1307. Не сохраняет время.
- Войдите на сайт для отправки комментариев
Втр, 10/05/2016 - 17:04
Не смог найти решения на форуме, хотя признаю, что мог проглядеть. Подскажите, пожалуйста, почему не сохраняется время после отключения питания.
Скетч ниже. Установку времени произвожу примером SetTime из библиотеки DS1307RTC.
Затем:
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <TFT_ILI9163C.h>
#include <DS1307RTC.h>
// Color definitions
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define __CS 10
#define __DC 9
TFT_ILI9163C display = TFT_ILI9163C(__CS, __DC);
float p = 3.1415926;
byte previous_hour = 0;
byte previous_min = 0;
byte previous_sec = 0;
void setup(void) {
display.begin();
display.cp437(true); //Поправка на 256-й символ в функции русификации
uint16_t time = millis();
time = millis() - time;
Serial.begin(9600);
while (!Serial) ; // wait until Arduino Serial Monitor opens
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");
}
void loop() {
if (timeStatus() == timeSet) {
digitalClockDisplay();
}
else {
Serial.println("The time has not been set. Please run the Time");
Serial.println("TimeRTCSet example, or DS1307RTC SetTime example.");
Serial.println();
delay(4000);
}
}
void digitalClockDisplay(){
display.setCursor(25,15);
display.setTextSize(3);
display.setTextColor(CYAN);
display.print(hour());
printDigits(minute());
if(previous_hour !=hour())
{
display.fillRect(22, 14, 40, 26, 0);
previous_hour = hour(); //сохраняем текущее время как старое
}
if(previous_min !=minute())
{
display.fillRect(75, 14, 40, 26, 0);
previous_min = minute(); //сохраняем текущее время как старое
}
if(previous_sec !=second())
{
display.fillRect(61, 14, 14, 26, 0);
previous_sec = second(); //сохраняем текущее время как старое
}
display.setCursor(12,45);
display.setTextSize(2);
display.print(day());
display.print(" ");
display.print(month());
display.print(" ");
display.print(year());
display.println();
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
display.print(":");
if(digits < 10)
display.print('0');
display.print(digits);
}
/* Recode russian fonts from UTF-8 to Windows-1251 */
String utf8rus(String source)
{
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xC0) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB8; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
PS. И подскажите как удалять свои темы? o.O
UPDATE
Вопрос решен. Контакт к батарейке на плате плохо подходил. Паяльник в руки и теперь все отлично.