#include <AccelStepper.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
RTC_DS1307 rtc;
#include <Adafruit_GFX.h>
#include <Wire.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define TRIG_PIN 12 // GPIO pin for the ultrasonic sensor trig
#define ECHO_PIN 13 // GPIO pin for the ultrasonic sensor echo
#define BUTTON_PIN 3 // GPIO pin for the button
#define PHOTO_PIN 26 // GPIO pin for the LDR
#define DIRECTION_PIN 9 // GPIO pin for the direction
#define STEP_PIN 11 // GPIO pin for the step
//Variables and text
int BState = 0;
String Alarm = "WAKE UP\n";
String Active = "Alarm is set to 6am\nPress button to disable Alarm";
String Inactive = "Alarm is not set\nPress button to set alarm";
String failMes = "SSD1306 allocation failed";
String currenttime = "time";
String Currenttime = "time";
void setup(){
// Initialize the OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial1.println(failMes);
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.display();
// Set up the GPIO pins
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(DIRECTION_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
pinMode(PHOTO_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT);
}
void loop(){
delay(1);
if(BState = 0){
DateTime now = rtc.now();
setTime(now);
displayMessage(Currenttime + Inactive);
if (digitalRead(BUTTON_PIN) == HIGH){
BState == 1;
delay(300); //prevents bouncing
}
else{
delay(150);
}
}
if(BState = 1){
DateTime now = rtc.now();
setTime(now);
displayMessage(currenttime + Active);
if(digitalRead(BUTTON_PIN) == HIGH){
BState == 0;
delay(300);
}
else{
if(now.hour() == 6){
if(analogRead(PHOTO_PIN) < 1000)
{
delay(300000);
}
triggerThe();
digitalWrite(STEP_PIN, LOW);
displayMessage("Good Morning!");
delay(5000);
BState = 0;
}
delay(200);
}
}
}
//function to start alarm
void triggerAlarm()
{
DateTime now = rtc.now();
setTime(now);
Serial1.println(Alarm);
displayMessage(Currenttime + Alarm);
digitalWrite(DIRECTION_PIN, HIGH);
digitalWrite(STEP_PIN, HIGH);
}
// Function to display a message on the OLED display
void displayMessage(String message)
{
display.clearDisplay();
display.setCursor(0, 0);
display.println(message);
display.display();
delay(10);
}
//function to set time
void setTime(DateTime input) {
String hourr = String(input.hour());
String minutee = String(input.minute());
String secondd = String(input.second());
String Currenttime = "Time: " + hourr + ":" + minutee + ":" + secondd + "\n";
}
//function for alarm stuff
void triggerThe(){
triggerAlarm();
// Measure distance using ultrasonic sensor
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2; // Convert to distance in cm
while(distance > 50)
{
// Measure distance using ultrasonic sensor
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2; // Convert to distance in cm
}
}