Hi, i am encountering a problem with my project based on a lcd monitor, a rotary encoder and some other stuff that aren't the issue.
The LCD i'm using is a 20x4 and its address is 0x27(i'm using a I2C shield on it), the endcoder has 5 pins(CLK, VCC, GND, SW, DT), and the board is an arduino mega.
The single components when i tested them didn't give me any problems, but when i try to plug together both the LCD monitor and the endcoder, the encoder stops to work. I tried to see what was happening using serial print and i've noticed that the reading from the encoder were kinda noisy, incorrect and the problem disappeared when i restarted my arduino without the LCD plugged in.
So i suspect that maybe the IC2 protocol is doing something, but here my knowledge stops and i've no idea how to resolve it by myself. Every example that i've found searching on internet is based on an Arduino Uno or a LCD monitor with address 0x3F(a 16x2 one), so nothing really helped me. I don't want to use another controller to be capable to read the encoder, it will be a waste of money and hardware, so i'm asking you if you have encountered the same problem and, hopefully, how i can fix it.
Here a sample of my code, just to let you see what i'm doing:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int pinClk = 7;
const int pinDt = 18;
const int pinSw = 19;
const int pinVcc = 10;
const int pinGnd = 11;
int prevClk;
int prevDt;
int pigio;
int interazione;
int contatore;
int contatore_dif = 0;
int prev_contatore = 0;
void rotazione();
void pigiata();
void setup() {
Serial.begin(250000);
pinMode(pinClk, INPUT);
pinMode(pinDt, INPUT);
pinMode(pinSw, INPUT);
pinMode(pinVcc, OUTPUT);
pinMode(pinGnd, OUTPUT);
digitalWrite(pinVcc, HIGH);
digitalWrite(pinGnd, LOW);
prevClk = digitalRead(pinClk);
prevDt = digitalRead(pinDt);
contatore = 0;
lcd.begin(20, 4);
}
void loop()
{
// put your main code here, to run repeatedly:
pigiata();
rotazione();
}
void pigiata()
{
pigio = digitalRead(pinSw);
if (pigio != 1)
{
while(pigio != 1)
{
pigio = digitalRead(pinSw);
delay(50);
}
contatore = 0;
contatore_dif = 0;
prev_contatore = 0;
interazione = 1;
}
}
void rotazione()
{
int currClk, currDt;
currClk = digitalRead(pinClk);
currDt = digitalRead(pinDt);
if (currClk != prevClk)
{
if (currDt == currClk) {
contatore_dif --;
} else {
contatore_dif ++;
}
if (prev_contatore != contatore_dif/2)
{
contatore = contatore_dif/2;
prev_contatore = contatore_dif/2;
Serial.println(contatore);
}
prevClk = currClk;
prevDt = currDt;
}
}