#include <Adafruit_SSD1306.h>
#include <Wire.h>
#include <Arduino.h>
// Constants for pins
const int buttonIncreasePin = 2;
const int buttonDecreasePin = 15;
const int buttonOKPin = 4;
const int redLEDPinRelay = 12;
const int infraredLEDPinRelay = 13;
const int battery = 5;
// Variables for time
int setMinutes = 0;
bool LEDsOn = false;
// OLED display setup
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void setup() {
// Initialize buttons
pinMode(buttonIncreasePin, INPUT_PULLUP);
pinMode(buttonDecreasePin, INPUT_PULLUP);
pinMode(buttonOKPin, INPUT_PULLUP);
// Initialize LEDs
pinMode(redLEDPinRelay, OUTPUT);
pinMode(infraredLEDPinRelay, OUTPUT);
// Battery voltage read percentage
pinMode(battery,INPUT);
int voltage = analogRead(battery);
// Initialize display
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000); // Pause for 2 seconds
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 30);
display.print("Set Time: ");
display.display();
}
void loop() {
// Handle button presses
if (digitalRead(buttonIncreasePin) == LOW) {
// Increase minutes
setMinutes++;
if (setMinutes > 60) {
setMinutes = 60;
}
updateDisplay();
delay(50); // Debounce delay
}
if (digitalRead(buttonDecreasePin) == LOW) {
// Decrease minutes
setMinutes--;
if (setMinutes < 0) {
setMinutes = 0;
}
updateDisplay();
delay(50); // Debounce delay
}
if (digitalRead(buttonOKPin) == LOW) {
// User confirmed set time
// Turn on LEDs
// Normally closed configuration, HIGH signal
digitalWrite(redLEDPinRelay, HIGH);
digitalWrite(infraredLEDPinRelay, HIGH);
delay(5000);
LEDsOn = true;
}
// Check if LEDs should be on based on the set time
if (LEDsOn) {
unsigned long currentMillis = millis();
unsigned long elapsedMinutes = currentMillis / (1000UL * 60); // Calculate elapsed minutes
if (elapsedMinutes >= setMinutes) {
// Turn off LEDs
// Normally closed configuration, LOW signal
digitalWrite(redLEDPinRelay, LOW);
digitalWrite(infraredLEDPinRelay, LOW);
delay(5000);
LEDsOn = false;
}
}
// Name
display.setTextSize(1.2);
display.setCursor(0,0);
display.print("acuPressure");
display.display();
display.setTextSize(0.5);
display.setCursor(0,10);
display.print("points stimulator");
display.display();
//voltage display
int voltage = analogRead(battery);
display.setTextSize(1);
display.setCursor(0,50);
float percent = voltage * 100 / 4096 ;
display.print("% battery:");
display.setTextSize(1);
display.setCursor(90,50);
display.print(percent);
display.display();
}
void updateDisplay() {
display.clearDisplay();
display.setCursor(0, 30);
display.print("Set Time: ");
if (setMinutes < 10) {
display.print("0");
}
display.print(setMinutes);
display.print(" minutes");
display.display();
}