/*
  
  Forum: https://forum.arduino.cc/t/lcd-display-timer1-problem/1191499
  Wokwi: https://wokwi.com/projects/381946778462389249

*/
#include <TimerOne.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 20 chars and 4 line display

const int outPin1 = 10; //for timer
const int inPin1 = 3; // for timer
const int motPulsePin =  2; // simulates either the CW or CCW motor-on signal 
const long motPulseonTime = 70; // time in milliseconds that mot signal is high
const long motPulseoffTime = 20; // time in milliseconds that mot signal is low
int motPulseState = LOW;
long remembermotPulseTime = 0;
unsigned long pulseCount = 0;

void setup() 
{
 Serial.begin(9600);
 pinMode (outPin1, OUTPUT); // for timer
 pinMode (inPin1, INPUT); // for timer
 pinMode(motPulsePin,OUTPUT); // simulates either the CW or CCW motor-on signal
 Timer1.initialize(5000);//sets time between pulses
 Timer1.pwm(outPin1, 50); //sets pulse width

 lcd.init();                      // initialize the lcd 
 lcd.backlight();
 lcd.setCursor(1,0);
 lcd.print("  CCW:");
 lcd.setCursor(1,1);
 lcd.print("   CW:");
 lcd.setCursor(1,2);
 lcd.print("COUNT:");
 lcd.setCursor(1,3);
 lcd.print("ALARM:");
 lcd.setCursor(14,2);
 lcd.print(pulseCount);
}

void loop() 
{
if (motPulseState == HIGH) 
 {
  if ((millis() - remembermotPulseTime) >= motPulseonTime)
  {
  motPulseState = LOW;
  Timer1.stop();
  remembermotPulseTime = millis();
  }
 }
else
{
  if ( (millis() - remembermotPulseTime) >= motPulseoffTime)
  {
    motPulseState = HIGH;
    Timer1.start();
    remembermotPulseTime = millis();
  }
}
 digitalWrite(motPulsePin,motPulseState);
 
}