#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerif9pt7b.h>
#include<Servo.h>
Servo motor;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define OLED_ADDR 0x3C
#define COUNTDOWN_TIME 14401000ul //4hour
char
szString[20];
byte
mins, secs;
unsigned long
timeTemp,
timeNow,
timeStart,
timeElapsed,
timeLeft;
void setup()
{
// initialize and clear display
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
motor.attach(2); // Servo motorun data pinini arduino 3 numaralı
motor.write(0);
delay(1000);
Serial.begin(9600);
timeStart = millis();
mins = 1;
secs = 1;
}//setup
void DoCountdown()
{
static unsigned long
lastTimeNow = 0;
static byte
lastsecs = 1;
timeNow = millis();
timeElapsed = timeNow - timeStart;
if( mins == 0 && secs == 0 )
return;
timeLeft = COUNTDOWN_TIME - timeElapsed;
mins = (byte)(timeLeft / 60000ul);
timeTemp = timeLeft - (mins * 60000);
secs = (byte)(timeTemp / 1000ul);
timeTemp = timeTemp - (secs * 1000ul);
if( mins == 0 && secs == 0 )
{
motor.attach(2);
sprintf( szString, "**WakeUp**" );
Serial.println( szString );
display.setCursor( 44, 30 );
display.print( szString );
display.display();
motor.write(180);
delay(1000);
}//if
else if( secs != lastsecs )
{
lastsecs = secs;
sprintf( szString, "%02d:%02d", mins, secs );
Serial.println( szString );
//
display.setCursor( 50, 30 );
display.print( szString );
display.display();
}//if
display.clearDisplay();
motor.attach(3);
}//DoCountdown
void loop()
{
DoCountdown();
}//loop
Comments
Please log in or sign up to comment.