#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <AccelStepper.h>
const byte Fullstep = 4;
const byte Halfstep = 8;
const short fullRevolution = 2038;
const float SteppDegree = 11.32; // Half/Full 11.32 / 5.66
// Pins IN1-IN3-IN2-IN4
AccelStepper stepper1(Halfstep, 12, 10, 11, 9);
#define OLED_RESET -1
Adafruit_SSD1306 display(OLED_RESET);
const int buttonHour = A1; // Pin für Stunden-Taste
const int buttonMinute = A2; // Pin für Minuten-Taste
const int buttonStart = A3; // Pin für Start-Taste
int hours = 23; // Set initial countdown hours
int minutes = 0; // Set initial countdown minutes
int seconds = 0; // Set initial countdown seconds
bool buttonHourPressed = false;
bool buttonMinutePressed = false;
bool buttonStartPressed = false;
const int ledPin = 6; // Define the pin for the LED
const int speakerPin = 7 ;
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
pinMode(6, OUTPUT);
stepper1.setMaxSpeed(2000); // set the maximum speed
stepper1.setSpeed(200); // set initial speed
stepper1.setAcceleration(50); // set acceleration
stepper1.setCurrentPosition(0); // set position
pinMode(buttonHour, INPUT_PULLUP);
pinMode(buttonMinute, INPUT_PULLUP);
pinMode(buttonStart, INPUT_PULLUP);
}
void loop() {
float degree = 360; // im Uhrzeigersinn
float moveRev = degree * SteppDegree;
while (seconds > 0 || minutes > 0 || hours > 0 || buttonStartPressed == false) {
display.clearDisplay();
display.setCursor(0, 0);
display.print("Countdown:\n");
display.print(hours);
display.print(":");
display.print(minutes);
display.print(":");
display.println(seconds);
display.display();
if (digitalRead(buttonHour) == LOW && !buttonHourPressed) {
hours = (hours + 1) % 24;
buttonHourPressed = true;
} else if (digitalRead(buttonHour) == HIGH) {
buttonHourPressed = false;
}
if (digitalRead(buttonMinute) == LOW && !buttonMinutePressed) {
minutes = (minutes + 1) % 60;
buttonMinutePressed = true;
} else if (digitalRead(buttonMinute) == HIGH) {
buttonMinutePressed = false;
}
if (digitalRead(buttonStart) == LOW && !buttonStartPressed) {
buttonStartPressed = true;
}
if (buttonStartPressed) {
int initialHours = hours;
int initialMinutes = minutes;
while (seconds > 0 || minutes > 0 || hours > 0) {
decrementTime();
delay(1000); // Wait for 1 second
}
}
}
if (hours == 0 && minutes == 0 && seconds == 0) {
stepper1.moveTo(-moveRev); // - für Uhrzeigersinn
stepper1.run();
int sensorWert = analogRead(A0); // Read the sensor value
Serial.println(sensorWert);
delay(100);
if (sensorWert < 500) {
display.clearDisplay();
display.setCursor(0, 0);
display.print("Bitte Tabletten ");
display.setCursor(0, 10);
display.print("entnehmen");
display.display();
}
else if (sensorWert > 500) {
display.clearDisplay();
display.setCursor(0, 0);
display.print("Tabletten wurden");
display.setCursor(0, 10);
display.print("entnommen");
display.display();
delay(5000);
digitalWrite(13, LOW);
seconds = 3;
minutes = initialMinutes;
hours = initialHours;
}
// Für LED und Speaker
digitalWrite(6, HIGH);
tone(speakerPin, 1000);
delay(200);
digitalWrite(6, LOW);
noTone(speakerPin);
//delay(500);
}
}
void decrementTime() {
if (seconds > 0) {
seconds--;
} else if (minutes > 0) {
minutes--;
seconds = 59;
} else if (hours > 0) {
hours--;
minutes = 59;
seconds = 59;
}
}