Hello guys,
So far I've been using LiquidCrystal.h library with normal LCD display and my code ran just fine.
Now I'm forced to use I2C with DFRobot DFR0063 display. Code remained the same, changed library and added lcd.backlight(), but that's about it.
Problem: Arduino now reacts with about 1sec delay (somethimes less, it's random), which is unacceptable in this project where I use values like 650ms or 800ms.
Is there any fix to it? Different library? (in code there is deliberate delay of turning on and of SolenoidPin, as well as 1sec update interval for display, BUT even MotorPin and VibratorPin react with this random delay when A2 is powered)
Thanks in advance!
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20, 16, 2);
int VibratorPin = 12;
int MotorPin = 8;
int SolenoidPin = 9;
int GunPin = A2;
int Lbs = A3;
byte prevButtonGpin = 0;
unsigned long startDelayTime = 0;
unsigned long stopDelayTime = 0;
unsigned long delayOnInterval = 650;
unsigned long delayOffInterval = 800;
void setup() {
lcd.init();
pinMode(VibratorPin, OUTPUT);
pinMode(MotorPin, OUTPUT);
pinMode(SolenoidPin, OUTPUT);
pinMode(GunPin, INPUT);
pinMode(Lbs, INPUT);
lcd.clear();
lcd.backlight();
}
void loop()
{
unsigned long currentTime = millis();
byte buttonGpin = digitalRead(GunPin);
if (buttonGpin != prevButtonGpin) {
startDelayTime = currentTime;
prevButtonGpin = buttonGpin;
}
static unsigned long Time;
if (buttonGpin == LOW) {
digitalWrite(VibratorPin, LOW);
digitalWrite(MotorPin, LOW);
if (currentTime - startDelayTime >= delayOnInterval) {
digitalWrite(SolenoidPin, LOW);
stopDelayTime = currentTime;
}
if (millis() - Time >= 1000)
{
Time += 1000;
if (digitalRead(Lbs) == HIGH) {
PotrosnjaLb();
}
else {
Potrosnja();
}
}
}
if (buttonGpin == HIGH) {
digitalWrite(VibratorPin, HIGH);
digitalWrite(MotorPin, HIGH);
if (currentTime - stopDelayTime >= delayOffInterval) {
digitalWrite(SolenoidPin, HIGH);
startDelayTime = currentTime;
}
if (millis() - Time >= 1000)
{
Time += 1000;
if (digitalRead(Lbs) == HIGH) {
WorkingLb();
}
else {
Working();
}
}
}
}
void Potrosnja() {
lcd.backlight();
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("SOMETHING");
lcd.setCursor(0, 1);
lcd.print("SOMETHING");
lcd.setCursor(12, 1);
lcd.print("SOMETHING");
int Potenciometar = A1;
int Pot1 = 0;
int Pot2 = 0;
Pot1 = analogRead(A1) / 11;
Pot2 = Pot1 / 1.313;
lcd.setCursor(9, 1);
lcd.print(Pot2);
}
void Working() {
lcd.backlight();
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SOMETHING");
lcd.setCursor(0, 1);
lcd.print("SOMETHING");
lcd.setCursor(12, 1);
lcd.print("SOMETHING");
int Potenciometar = A1;
int Pot1 = 0;
int Pot2 = 0;
Pot1 = analogRead(A1) / 11;
Pot2 = Pot1 / 1.313;
lcd.setCursor(9, 1);
lcd.print(Pot2);
}
void WorkingLb() {
lcd.backlight();
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SOMETHING");
lcd.setCursor(0, 1);
lcd.print("SOMETHING");
lcd.setCursor(12, 1);
lcd.print("SOMETHING");
int Potenciometar = A1;
int Pot1 = 0;
int Pot2 = 0;
Pot1 = analogRead(A1) / 6.572;
Pot2 = Pot1 / 1.007;
lcd.setCursor(9, 1);
lcd.print(Pot2);
}
void PotrosnjaLb() {
lcd.backlight();
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("SOMETHING");
lcd.setCursor(0, 1);
lcd.print("SOMETHING");
lcd.setCursor(12, 1);
lcd.print("SOMETHING");
int Potenciometar = A1;
int Pot1 = 0;
int Pot2 = 0;
Pot1 = analogRead(A1) / 6.572;
Pot2 = Pot1 / 1.007;
lcd.setCursor(9, 1);
lcd.print(Pot2);
}