#include <Wire.h>
#include <RTClib.h>
#include <LedControl.h>
//MATRIX DISPLAY
byte devices = 1;
LedControl lc = LedControl(4, 5, 6, devices); //DIN, CLK, CS, count of displays
RTC_DS3231 rtc;
const int redPin = 11; // D5
const int yellowPin = 10; // D6
const int greenPin = 9; // D7
const int dimRed = 255;
const int dimYellow = 255;
const int dimGreen = 255;
unsigned long initialHighTide; // Initial high tide timestamp
void setup() {
Serial.begin(115200);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
pinMode(redPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(greenPin, OUTPUT);
// Set initial high tide time (replace with actual values)
// Format: Year, Month, Day, Hour, Minute, Second
initialHighTide = DateTime(2025, 2, 14, 0, 22, 0).unixtime();
}
void loop() {
DateTime now = rtc.now();
unsigned long currentTime = now.unixtime();
unsigned long elapsedTime = (currentTime - initialHighTide) % 44700;
Serial.print("Current time: ");
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.println();
Serial.print("Initial High Tide: ");
Serial.println(initialHighTide);
Serial.print("Elapsed Time: ");
Serial.println(elapsedTime);
if (elapsedTime >= 41906.5 && elapsedTime < 44700) {
setLights(true, false, false); // High Tide (Red)
Serial.println("High Tide");
}
else if (elapsedTime >= 25143.5 && elapsedTime < 41906.5) {
setLights(true, true, false); // Rising Tide (Red + Yellow)
Serial.println("Rising Tide");
}
else if (elapsedTime >= 19556.5 && elapsedTime < 25143.5) {
setLights(false, false, true); // Low Tide (Green)
Serial.println("Low Tide");
}
else if (elapsedTime >= 2793.5 && elapsedTime < 19556.5) {
setLights(false, true, true); // Falling Tide (Green + Yellow)
Serial.println("Falling Tide");
}
else if (elapsedTime >= 0 && elapsedTime < 2793.5) {
setLights(true, false, false); // High Tide (Red)
Serial.println("High Tide");
}
else {
setLights(false, false, false);
Serial.println("Something's wrong");
}
rows();
delay(1000); // Update every minute
}
void setLights(bool red, bool yellow, bool green) {
analogWrite(redPin, red ? dimRed : LOW);
analogWrite(yellowPin, yellow ? dimYellow : LOW);
analogWrite(greenPin, green ? dimGreen : LOW);
}
void rows() {
for(int row=0;row<8;row++) {
delay(20);
lc.setRow(0,row,B11111111);
delay(20);
lc.setRow(0,row,(byte)0);
/*
for(int i=0;i<row;i++) {
delay(1000);
lc.setRow(0,row,B11111111);
delay(1000);
lc.setRow(0,row,(byte)0);
}
*/
}
}