#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
int inMin = 0; // Countdown Minute
int inSec = 5; // Countdown Seconds
int cdTime = (inMin * 60) + inSec; // Countdown Seconds
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup()
{
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
pinMode(3, OUTPUT);
}
void countDown(int inMin, int inSec, float inVolt)
{
boolean RUN = true;
int inPwm = inVolt / 9 * 255;
while (RUN)
{
inSec = inSec - 1;
delay(1000);
if (inSec == -1)
{
inSec = 59;
inMin = inMin - 1;
}
if (inMin == -1)
{
inMin = 59;
}
analogWrite(3, inPwm);
Serial.println(inPwm);
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,7);
if (inPwm != 0) {
display.print(F("Power"));
display.setTextSize(2);
display.setCursor(36,0);
display.print(inVolt);
display.print(F("V"));
}
else {
display.print(F("Cooldown"));
}
display.drawFastHLine(0,19,61,SSD1306_WHITE);
display.drawFastVLine(0,19,17,SSD1306_WHITE);
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text
display.setCursor(1,20);
if (inMin == 0 && inSec == 0)
{
RUN = false;
display.println("DONE ");
delay(1000);
}
else {
if (inMin <= 9)
{
display.print('0');
}
display.print(inMin);
display.print(':');
if (inSec <= 9)
{
display.print('0');
}
display.print(inSec);
}
display.display();
}
}
void breakIn() {
countDown(0,5,1.5);
countDown(0,5,0);
countDown(0,5,2.0);
countDown(0,5,0);
countDown(0,5,2.5);
countDown(0,5,0);
countDown(0,5,3.0);
countDown(0,5,0);
countDown(0,5,3.5);
countDown(0,5,0);
countDown(0,5,4.0);
countDown(0,5,0);
countDown(0,5,4.5);
countDown(0,5,0);
countDown(0,5,5.0);
countDown(0,5,0);
countDown(0,5,5.5);
countDown(0,5,0);
countDown(0,5,6.0);
}
void loop()
{
breakIn();
}