Lab 19/ HW 19
Lab 19 (RTC):
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include <RTClib.h>
#include <EEPROM.h>
#include <math.h>
RTC_DS1307 rtc;
int years = 0, previousyears = 0, elapsedyears = 0;
int months = 0, previousmonths = 0, elapsedmonths = 0;
int days = 0, previousdays = 0, elapseddays = 0;
int hours = 0, previoushours = 0, elapsedhours = 0;
int minutes = 0, previousminutes = 0, elapsedminutes = 0;
int seconds = 0, previousseconds = 0, elapsedseconds = 0;
void setup ()
{
Serial.begin(57600);
if (! rtc.begin())
{
Serial.println("Couldn't find RTC");
while (1);
}
DateTime now = rtc.now();
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
//rtc.adjust(DateTime(2018, 11, 9, 12, 26, 00));
previousyears = EEPROM.read(1);
previousmonths = EEPROM.read(2);
previousdays = EEPROM.read(3);
previoushours = EEPROM.read(4);
previousminutes = EEPROM.read(5);
previousseconds = EEPROM.read(6);
if (now.second() > previousseconds || now.minute() > previousminutes || now.hour() > previoushours || now.day() > previousdays || now.month() > previousmonths || now.year() > previousyears)
{
elapsedyears = abs(now.year() - (previousyears + 2000));
elapsedmonths = abs(now.month() - previousmonths);
elapseddays = abs(now.day() - previousdays);
elapsedminutes = abs(now.minute() - previousminutes);
elapsedseconds = abs(now.second() - previousseconds);
if (previousseconds > now.second())
{
elapsedminutes = elapsedminutes - 1;
}
if (previousminutes > now.minute())
{
elapsedhours = elapsedhours - 1;
}
Serial.println("Time when Arduino was unplugged:");
Serial.print(previousyears + 2000, DEC);
Serial.print('/');
Serial.print(previousmonths, DEC);
Serial.print('/');
Serial.print(previousdays, DEC);
Serial.print(" (");
Serial.print(previoushours, DEC);
Serial.print(':');
Serial.print(previousminutes, DEC);
Serial.print(':');
Serial.print(previousseconds, DEC);
Serial.print(')');
Serial.println();
Serial.println("Elapsed Time:");
Serial.print("Years: ");
Serial.println(elapsedyears, DEC);
Serial.print("Months: ");
Serial.println(elapsedmonths, DEC);
Serial.print("Days: ");
Serial.println(elapseddays, DEC);
Serial.print("Minutes: ");
Serial.println(elapsedminutes, DEC);
Serial.print("Seconds: ");
Serial.println(elapsedseconds, DEC);
Serial.println("/----------------------/");
}
}
void loop ()
{
while (millis() > 5000)
{
DateTime now = rtc.now();
years = now.year() - 2000;
months = now.month();
days = now.day();
hours = now.hour();
minutes = now.minute();
seconds = now.second();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(')');
Serial.println();
EEPROM.write(1, years);
EEPROM.write(2, months);
EEPROM.write(3, days);
EEPROM.write(4, hours);
EEPROM.write(5, minutes);
EEPROM.write(6, seconds);
delay(1000);
}
}
Lab 19b (EEPROM):
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include <RTClib.h>
#include <EEPROM.h>
#include <math.h>
RTC_DS1307 rtc;
int years = 0, previousyears = 0, elapsedyears = 0;
int months = 0, previousmonths = 0, elapsedmonths = 0;
int days = 0, previousdays = 0, elapseddays = 0;
int hours = 0, previoushours = 0, elapsedhours = 0;
int minutes = 0, previousminutes = 0, elapsedminutes = 0;
int seconds = 0, previousseconds = 0, elapsedseconds = 0;
void setup ()
{
Serial.begin(57600);
if (! rtc.begin())
{
Serial.println("Couldn't find RTC");
while (1);
}
DateTime now = rtc.now();
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
//rtc.adjust(DateTime(2018, 11, 9, 12, 26, 00));
previousyears = EEPROM.read(1);
previousmonths = EEPROM.read(2);
previousdays = EEPROM.read(3);
previoushours = EEPROM.read(4);
previousminutes = EEPROM.read(5);
previousseconds = EEPROM.read(6);
if (now.second() > previousseconds || now.minute() > previousminutes || now.hour() > previoushours || now.day() > previousdays || now.month() > previousmonths || now.year() > previousyears)
{
elapsedyears = abs(now.year() - (previousyears + 2000));
elapsedmonths = abs(now.month() - previousmonths);
elapseddays = abs(now.day() - previousdays);
elapsedminutes = abs(now.minute() - previousminutes);
elapsedseconds = abs(now.second() - previousseconds);
if (previousseconds > now.second())
{
elapsedminutes = elapsedminutes - 1;
}
if (previousminutes > now.minute())
{
elapsedhours = elapsedhours - 1;
}
Serial.println("Time when Arduino was unplugged:");
Serial.print(previousyears + 2000, DEC);
Serial.print('/');
Serial.print(previousmonths, DEC);
Serial.print('/');
Serial.print(previousdays, DEC);
Serial.print(" (");
Serial.print(previoushours, DEC);
Serial.print(':');
Serial.print(previousminutes, DEC);
Serial.print(':');
Serial.print(previousseconds, DEC);
Serial.print(')');
Serial.println();
Serial.println("Elapsed Time:");
Serial.print("Years: ");
Serial.println(elapsedyears, DEC);
Serial.print("Months: ");
Serial.println(elapsedmonths, DEC);
Serial.print("Days: ");
Serial.println(elapseddays, DEC);
Serial.print("Minutes: ");
Serial.println(elapsedminutes, DEC);
Serial.print("Seconds: ");
Serial.println(elapsedseconds, DEC);
Serial.println("/----------------------/");
}
}
void loop ()
{
while (millis() > 5000)
{
DateTime now = rtc.now();
years = now.year() - 2000;
months = now.month();
days = now.day();
hours = now.hour();
minutes = now.minute();
seconds = now.second();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(')');
Serial.println();
EEPROM.write(1, years);
EEPROM.write(2, months);
EEPROM.write(3, days);
EEPROM.write(4, hours);
EEPROM.write(5, minutes);
EEPROM.write(6, seconds);
delay(1000);
}
}
Lab 19b (EEPROM):
#include <EEPROM.h>
int zz;
int EEsize = 1024; // size in bytes of your board's EEPROM
void setup()
{
Serial.begin(9600);
randomSeed(analogRead(0));
}
void loop()
{
Serial.println("Writing random numbers...");
for (int i = 0; i < EEsize; i++)
{
zz=random(255);
EEPROM.write(i, zz);
}
Serial.println();
for (int a=0; a<EEsize; a++)
{
zz = EEPROM.read(a);
Serial.print("EEPROM position: ");
Serial.print(a);
Serial.print(" contains ");
Serial.println(zz);
delay(25);
}
}
Comments
Post a Comment