#include <LiquidCrystal_I2C.h>
#include <jled.h>
#include <Wire.h>
#include "InputDebounce.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define BUTTON_DEBOUNCE_DELAY 20 // [ms]
#define BUTTON_RESET_PIN 34
#define BUTTON_POWER_PIN 35
// EasyLed ledRed(25, EasyLed::ActiveLevel::High);
// EasyLed ledGreen(32, EasyLed::ActiveLevel::High);
// EasyLed ledYellow(33, EasyLed::ActiveLevel::High);
// EasyLed ledOrange(27, EasyLed::ActiveLevel::High);
auto ledRed = JLed(25);
auto ledGreen = JLed(32);;
auto ledYellow = JLed(33);
auto ledOrange = JLed(27);
JLed leds[] = {
ledOrange,
ledYellow,
ledGreen,
ledRed
};
OneWire oneWire(12);
DallasTemperature sensors(&oneWire);
static InputDebounce buttonPower;
static InputDebounce buttonReset;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setupLeds() {
}
// Pressed - POWER
void buttonPower_pressedCallback(uint8_t pinIn) {
// handle pressed state
Serial.println(pinIn);
Serial.println("PRESSED");
}
// Pressed - RESET
void buttonReset_pressedCallback(uint8_t pinIn) {
// handle pressed state
Serial.println(pinIn);
Serial.println("PRESSED");
}
// Released - POWER
void buttonPower_releasedCallback(uint8_t pinIn) {
// handle released state
Serial.println(pinIn);
Serial.println("RELEASED");
// ledRed.Blink(1000, 500).Forever();
}
// Released - RESET
void buttonReset_releasedCallback(uint8_t pinIn) {
// handle released state
Serial.println(pinIn);
Serial.println("RELEASED");
// ledRed.Blink(1000, 500).Forever();
}
// Pressed Duration - POWER
void buttonPower_pressedDurationCallback(uint8_t pinIn, unsigned long duration) {
// handle still pressed state
Serial.print(duration);
Serial.println(" --> PRESSED DURATION");
// if(duration < 2000) {
// ledRed.Blink(1000, 500).Forever();
// } else {
// // ledYellow.On();
// // ledYellow.Off().DelayBefore(2000);
// ledYellow.Blink(4000, 2000).Repeat(1);
// }
}
// Pressed Duration - RESET
void buttonReset_pressedDurationCallback(uint8_t pinIn, unsigned long duration) {
// handle still pressed state
Serial.print(duration);
Serial.println(" --> PRESSED DURATION");
// if(duration < 2000) {
// ledRed.Blink(1000, 500).Forever();
// } else {
// // ledYellow.On();
// // ledYellow.Off().DelayBefore(2000);
// ledYellow.Blink(4000, 2000).Repeat(1);
// }
}
// Released Duration - POWER
void buttonPower_releasedDurationCallback(uint8_t pinIn, unsigned long duration) {
// handle released state
Serial.println("RELEASED DURATION");
if(duration < 2000) {
ledRed.Blink(1000, 500).Forever();
} else {
// ledYellow.On();
// ledYellow.Off().DelayBefore(2000);
ledYellow.Blink(4000, 2000).Repeat(1);
}
}
// Released Duration - RESET
void buttonReset_releasedDurationCallback(uint8_t pinIn, unsigned long duration) {
// handle released state
Serial.println("RELEASED DURATION");
if(duration < 2000) {
ledGreen.Blink(4000, 2000).Repeat(1);
} else {
// ledYellow.On();
// ledYellow.Off().DelayBefore(2000);
ledOrange.Blink(4000, 2000).Repeat(1);
}
}
void writeLcd(uint8_t row, char *text) {
lcd.setCursor(row, 0);
for(uint8_t i = 8; i < 16; i++) {
lcd.setCursor(row, i);
lcd.print(" ");
}
lcd.setCursor(row, 0);
lcd.print(text);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
sensors.begin();
buttonPower.registerCallbacks(buttonPower_pressedCallback, buttonPower_releasedCallback, buttonPower_pressedDurationCallback, buttonPower_releasedDurationCallback);
buttonReset.registerCallbacks(buttonReset_pressedCallback, buttonReset_releasedCallback, buttonReset_pressedDurationCallback, buttonReset_releasedDurationCallback);
buttonPower.setup(BUTTON_POWER_PIN, BUTTON_DEBOUNCE_DELAY, InputDebounce::PIM_EXT_PULL_DOWN_RES, 100);
buttonReset.setup(BUTTON_RESET_PIN, BUTTON_DEBOUNCE_DELAY, InputDebounce::PIM_EXT_PULL_DOWN_RES, 100);
// initialize LCD
lcd.init();
// turn on LCD backlight
lcd.backlight();
writeLcd(0, "IBM AS/400");
}
void loop() {
uint64_t now = millis();
buttonPower.process(now);
buttonReset.process(now);
ledYellow.Update();
ledOrange.Update();
ledGreen.Update();
ledRed.Update();
// ledRed.on();
// // set cursor to first column, first row
// lcd.setCursor(0, 0);
// // print message
// lcd.print("Hello, World!");
// delay(1000);
// // clears the display to print new message
// lcd.clear();
// // set cursor to first column, second row
// lcd.setCursor(0,1);
// lcd.print("Hello, World!");
// ledRed.off();
// delay(1000);
// lcd.clear();
DeviceAddress address;
uint8_t deviceCount = sensors.getDeviceCount();
for (uint8_t i = 0; i < deviceCount; i++) {
if (!sensors.getAddress(address, i)) {
continue;
}
String addressString = printAddress(address);
float temperature = sensors.getTempC(address);
Serial.print("Addr: ");
Serial.print(addressString.c_str());
Serial.print(" Temp: ");
Serial.println(temperature);
}
delay(1e3);
}
String printAddress(DeviceAddress deviceAddress) {
String ad;
for (uint8_t i = 0; i < 8; i++) {
char currentChar[2];
sprintf(currentChar, "%02X ", deviceAddress[i]);
ad += String(currentChar);
}
return ad;
}