Помогите разобраться с часами реального времени
- Войдите на сайт для отправки комментариев
Пнд, 16/04/2018 - 00:31
Суть такая.
После подключения устройства к питанию, время продолжается наматывать с того момента на котором устройство было отключено.
В чем причина?
[code]
#include <Wire.h> // библиотека для работы I²C
#include "TroykaRTC.h"// библиотека для работы с часами реального времени
#include <SPI.h> // библиотека для работы с SPI
#include <SD.h> // библиотека для работы с SD-картами
#include <iarduino_DHT.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,16,2);
iarduino_DHT sensor(2);
#define SD_CS_PIN 7
#define LEN_TIME 12 // размер массива для времени
#define LEN_DATE 12 // размер массива для даты
#define LEN_DOW 12 // размер массива для дня недели
RTC clock; // создаём объект для работы с часами реального времени
char time[LEN_TIME]; // массив для хранения текущего времени
char date[LEN_DATE]; // массив для хранения текущей даты
char weekDay[LEN_DOW]; // массив для хранения текущего дня недели
String dataString = "";
void setup()
{
Serial.begin(9600); // открываем последовательный порт
clock.begin(); // инициализация часов
// clock.set(10,25,45,27,07,2005,THURSDAY); // метод установки времени и даты в модуль вручную
clock.set(__TIMESTAMP__); // метод установки времени и даты автоматически при компиляции
// закоментируйте оба метода clock.set(); // что бы время менялось при прошивки или сбросе питания
Serial.println("Initializing SD card...");
// если microSD-карта не была обнаружена
if (!SD.begin(SD_CS_PIN)) {
// выводим сообщение об ошибке
Serial.println("Card failed, or not present");
// don't do anything more:
return;
} else {
Serial.println("Card initialized.");
}
}
void loop()
{
int check; // переменная состояния датчика
int temperature; // переменная покозания температуры
int humidity; // переменная показания влажности
dataString = "";
// мониторинг ошибок
// считывание данных с датчика DHT11
check = sensor.read();
clock.read(); // запрашиваем данные с часов
clock.getTimeStamp(time, date, weekDay); // сохраняем текущее время, дату и день недели в переменные
Serial.print(time); // выводим в serial порт текущее время, дату и день недели
Serial.print("\t"); // выводим в serial порт текущее время, дату и день недели
Serial.print(date); // выводим в serial порт текущее время, дату и день недели
Serial.print("\t"); // выводим в serial порт текущее время, дату и день недели
Serial.println(weekDay); // выводим в serial порт текущее время, дату и день недели
switch (check) {
case DHT_OK: // всё OK
temperature = sensor.tem; // считываем показания влажности и температуры
humidity = sensor.hum;
dataString += String(time); // формируем строку с результатами показаний датчика
dataString += "\t"; // ставим знак табуляции
dataString += String(temperature);
dataString += "\t";
dataString += String(humidity);
dataString += "\r";
Serial.print(dataString); // выводим результаты в serial-порт
saveSD(); // сохраняем на microSD
break;
case DHT_ERROR_CHECKSUM: // ошибка контрольной суммы
Serial.println("Checksum error");
break;
default: // неизвестная ошибка
Serial.println("Unknown error");
break;
}
lcd.init(); //включение дисплея
lcd.backlight(); //включение подсветки
lcd.setCursor(8, 1); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки)
lcd.print(time);//выводим сообщение
lcd.setCursor(7, 0); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки)
lcd.print(temperature);//выводим сообщение
lcd.setCursor(9, 0); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки)
lcd.print(" C");//выводим сообщение
lcd.setCursor(12, 0); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки)
lcd.print(humidity);//выводим сообщение
lcd.setCursor(14, 0); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки)
lcd.print(" %");//выводим сообщение
lcd.setCursor(7, 1); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки)
lcd.print("S");//выводим сообщение
delay(1000); // ждём одну секунду
}
void saveSD()
{
File dataFile = SD.open("sdv.txt", FILE_WRITE); // создаём файл для записи
if (dataFile) { // если файл доступен для записи
dataFile.println(dataString); // сохраняем данные
dataFile.close(); // закрываем файл
Serial.println("Save OK"); // выводим сообщение об удачной записи
} else {
Serial.println("Error opening sdv.txt"); // если файл не доступен
}
}
[/code]
Не знаю, что у Вас за модуль, но среди китайских попадаются такие, в которых вроде как предусмотена цепь заряда аккумулятора, а реально стоит не аккумулятор, а обычная батарейка. Нужно выпаять все, относящееся к цепи заряда, а на освободившееся место поставить перемычку.
нужно закоментировать.
Часы реального времени RTC (Real Time Clock) — модуль на базе чипа DS1307 с автономным питанием от батарейки-таблетки. Используйте его для получения текущей секунды, минуты, часа, дня недели месяца и года.
Извиняюсь за не грамотность. "Закоментировать" это что значит?
https://msdn.microsoft.com/ru-ru/library/k1dbk8bw.aspx
А подскажите пожалуйста. Как изменить выше приведенный код так, что бы запись на SD производилась каждые 15 секунд?
Спасибо.
А подскажите пожалуйста. Как изменить выше приведенный код так, что бы запись на SD производилась каждые 15 секунд?
Спасибо.
BlinkWithoutDelay
Не переходит по ссылке.
http://arduino.ru/tutorials/BlinkWithoutDelay
Подскажите еще пожалуйста. На LCD 1602 на этом коде, что вначале темы, часы обновляется как-то рывками секунды обновляются каждые 3 секунды, а не плавно каждую секунду.
Покажите пожалуйста, как нужно код изменить, чтобы на сд каждые 15 секунд записывалось, а не каждое считывание информации с датчика.
П.С. Извиняюсь за нубские вопросы!)
Покажите пожалуйста, как нужно код изменить, чтобы на сд каждые 15 секунд записывалось, а не каждое считывание информации с датчика.
П.С. Извиняюсь за нубские вопросы!)
Как то так
Покажите пожалуйста, как нужно код изменить, чтобы на сд каждые 15 секунд записывалось, а не каждое считывание информации с датчика.
П.С. Извиняюсь за нубские вопросы!)
Как то так
Неа. С таким кодом также, сохранение происходит каждое считывание данных с датчика.