В 1000-й раз о RTC1307. Не сохраняет время.

ardunoob
Offline
Зарегистрирован: 22.04.2016

Не смог найти решения на форуме, хотя признаю, что мог проглядеть. Подскажите, пожалуйста, почему не сохраняется время после отключения питания.

Скетч ниже. Установку времени произвожу примером 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;
}

 

ardunoob
Offline
Зарегистрирован: 22.04.2016

PS. И подскажите как удалять свои темы? o.O

ardunoob
Offline
Зарегистрирован: 22.04.2016

UPDATE

Вопрос решен. Контакт к батарейке на плате плохо подходил. Паяльник в руки и теперь все отлично.