#define PIN 25
#define NUM_LEDS 8
#define NUM_MARKS 8
#define MARK_COLOR SwimStrip.Color(0, 0, 255) // Blue
#include "Adafruit_NeoPixel.h"
#include <LiquidCrystal_I2C.h>
int delayMark = 800;
int CurrentMark = 1;
boolean MarkDirectionUp = true;
int PoolNum=1;
Adafruit_NeoPixel SwimStrip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void TurnOnMark(int mark, uint32_t markColor = MARK_COLOR) {
// mark = 1 to NUM_MARKS
SwimStrip.fill(markColor, (mark - 1) * (NUM_LEDS / NUM_MARKS), NUM_LEDS / NUM_MARKS);
SwimStrip.show();
}
void TurnOffMark(int mark) {
SwimStrip.fill(SwimStrip.Color(0, 0, 0), (mark - 1) * (NUM_LEDS / NUM_MARKS), NUM_LEDS / NUM_MARKS);
SwimStrip.show();
}
void SwimTimer() {
Serial.println("SwimTimer Marker: " + (String)CurrentMark + " " + (String)PoolNum);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SwimTimer: " + (String)CurrentMark + " " + (String)PoolNum);
TurnOnMark(CurrentMark);
if (MarkDirectionUp) {
TurnOffMark(CurrentMark - 1);
CurrentMark++;
} else {
TurnOffMark(CurrentMark + 1);
CurrentMark--;
}
if ((CurrentMark == NUM_MARKS+1) || (CurrentMark == 0)) {
PoolNum++;
Serial.println("change direction: " + (String)CurrentMark);
if (MarkDirectionUp) {
CurrentMark-=2;
} else {
CurrentMark+=2;
}
MarkDirectionUp = not(MarkDirectionUp);
}
}
void setup() {
delay(1000);
Serial.begin(115200);
Serial.println("Start");
lcd.init();
lcd.backlight(); //enables backlight
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Start");
delay(2000);
SwimStrip.begin();
SwimStrip.setBrightness(80);
SwimStrip.clear();
SwimStrip.show();
}
void loop() {
SwimTimer();
delay(delayMark);
}