#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
#define BUTTON_PIN 12
#define LED_R 8
#define IR_VCC 7
#define IR_DO 4
unsigned long TIME_START;
unsigned long TIME_END;
unsigned long TIME_VALUE;
unsigned long STATE_START;
unsigned long TIME_START_IR;
unsigned long TIME_END_IR;
float TIME_VALUE_IR;
unsigned long STATE_START_IR;
int EZER;
int lastState = HIGH;
int lastState_IR = LOW;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
// Init
lcd.init();
lcd.backlight();
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(IR_VCC, OUTPUT);
pinMode(IR_DO, INPUT);
TIME_START = millis();
digitalWrite(IR_VCC, HIGH);
digitalWrite(IR_DO, LOW);
}
void loop() {
int value = digitalRead((BUTTON_PIN));
if (lastState != value and millis() >= STATE_START+5) {
lastState = value;
if (value == HIGH) {
STATE_START = millis();
TIME_END = millis();
Serial.print(" released :");
TIME_VALUE = TIME_END-TIME_START;
Serial.println(TIME_VALUE);
digitalWrite(LED_R, LOW);
}
if (value == LOW) {
STATE_START = millis();
TIME_START = millis();
Serial.println(" pressed");
digitalWrite(LED_R, HIGH);
}
}
int value_IR = digitalRead((IR_DO));
if (lastState_IR != value_IR) {
lastState_IR = value_IR;
if (value_IR == HIGH) {
STATE_START_IR = millis();
TIME_END_IR = millis();
Serial.print(" NO LIGHT :");
TIME_VALUE_IR = TIME_END_IR-TIME_START_IR;
Serial.println(TIME_VALUE_IR);
EZER=int (TIME_VALUE_IR/1000);
Serial.print(EZER);
Serial.print(" 1/");
lcd.setCursor(0, 0);
lcd.print(" ");
if (EZER > 0) {
lcd.setCursor(0, 0);
lcd.print(EZER);
lcd.print(" + 1/");
Serial.println(int (10000/(TIME_VALUE_IR - EZER * 1000)));
lcd.print(int (10000/(TIME_VALUE_IR - EZER * 1000)));
}
else {
lcd.setCursor(3, 0);
lcd.print(" 1/");
Serial.println(int (10000/TIME_VALUE_IR));
lcd.print(int (10000/TIME_VALUE_IR));
}
}
if (value_IR == LOW) {
STATE_START_IR = millis();
TIME_START_IR = millis();
Serial.println(" LIGHT ");
}
}
}