Initial commit
This commit is contained in:
commit
8f435970bd
128
prototype/prototype.ino
Normal file
128
prototype/prototype.ino
Normal file
@ -0,0 +1,128 @@
|
||||
#include <LiquidCrystal_I2C.h>
|
||||
#include <millisDelay.h>
|
||||
#include <IRremote.h>
|
||||
|
||||
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x3F for a 16 chars and 2 line display
|
||||
millisDelay timer;
|
||||
|
||||
const bool DEBUG = true;
|
||||
// Define IR receiver pin
|
||||
const int IR_RECEIVE_PIN = 2;
|
||||
// LCD
|
||||
const int LCD_COLS = 16;
|
||||
const int LCD_ROWS = 2;
|
||||
|
||||
String getMinutes() {
|
||||
unsigned long minutes = timer.remaining() / (60 * 1000l);
|
||||
if (minutes < 10) {
|
||||
return "0" + String(minutes);
|
||||
}
|
||||
return String(minutes);
|
||||
}
|
||||
|
||||
String getSeconds() {
|
||||
unsigned long seconds = timer.remaining() % (60 * 1000l) / 1000l;
|
||||
if (seconds < 10) {
|
||||
return "0" + String(seconds);
|
||||
}
|
||||
return String(seconds);
|
||||
}
|
||||
|
||||
void lcdUpdate() {
|
||||
if (timer.isRunning()) {
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print(String(getMinutes()) + ":" + String(getSeconds()));
|
||||
} else {
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("No Timer Set");
|
||||
}
|
||||
}
|
||||
|
||||
void lcdClearRow(int line) {
|
||||
for (int i = 0; i < LCD_COLS; i++) {
|
||||
lcd.setCursor(i, line);
|
||||
lcd.print(' ');
|
||||
}
|
||||
}
|
||||
|
||||
void powerOn() {
|
||||
lcdClearRow(0);
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Power ON");
|
||||
}
|
||||
|
||||
void powerOff() {
|
||||
lcdClearRow(0);
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Power OFF");
|
||||
}
|
||||
|
||||
void startTimer(int minutes) {
|
||||
if (timer.isRunning()) {
|
||||
timer.stop();
|
||||
} else {
|
||||
timer.start(minutes * 60 * 1000l);
|
||||
lcdClearRow(1);
|
||||
}
|
||||
}
|
||||
|
||||
void addTimerMinutes(int minutes) {
|
||||
if (timer.isRunning()) {
|
||||
long millis = (minutes * 60 * 1000l);
|
||||
if (millis < 0 && timer.remaining() <= abs(millis)) {
|
||||
timer.finish();
|
||||
} else {
|
||||
timer.start(timer.remaining() + millis);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
|
||||
lcd.init();
|
||||
lcd.clear();
|
||||
lcd.backlight(); // Make sure backlight is on
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Power OFF");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("No Timer Set");
|
||||
|
||||
// Initialize the IR receiver
|
||||
IrReceiver.begin(IR_RECEIVE_PIN, true);
|
||||
|
||||
startTimer(30);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
lcdUpdate();
|
||||
|
||||
if (IrReceiver.decode()) {
|
||||
if (DEBUG) {
|
||||
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // Print "old" raw data
|
||||
// Print IR signal info
|
||||
IrReceiver.printIRResultShort(&Serial); // Print complete received data in one line
|
||||
IrReceiver.printIRSendUsage(&Serial); // Print the statement required to send this data
|
||||
// Enable IR receiver for the next signal
|
||||
}
|
||||
|
||||
switch (IrReceiver.decodedIRData.decodedRawData) {
|
||||
case 0xEE11CD32: // up
|
||||
addTimerMinutes(10);
|
||||
break;
|
||||
case 0xEB14CD32: // down
|
||||
addTimerMinutes(-10);
|
||||
break;
|
||||
case 0x9C63CD32: // sleep timer
|
||||
powerOn();
|
||||
startTimer(30);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
IrReceiver.resume();
|
||||
}
|
||||
|
||||
if (timer.justFinished()) {
|
||||
powerOff();
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user