No matching function for call to 'LiquidCrystal_I2C::begin(int, int)'

when I try running the LiquidCrystal library I get multiple errors I've tried with multiple liquid crystal libraries and I keep getting the same error with all of them.

/Users/4tro/Documents/Arduino/Blink/Blink.ino: In function 'void setup()':
/Users/4tro/Documents/Arduino/Blink/Blink.ino:22:18: error: no matching function for call to 'LiquidCrystal_I2C::begin(int, int)'
   lcd.begin(16, 2);
                  ^
In file included from /Users/4tro/Documents/Arduino/Blink/Blink.ino:2:
/Users/4tro/Documents/Arduino/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.h:76:7: note: candidate: 'void LiquidCrystal_I2C::begin()'
  void begin();
       ^~~~~
/Users/4tro/Documents/Arduino/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.h:76:7: note:   candidate expects 0 arguments, 2 provided

exit status 1

Compilation error: no matching function for call to 'LiquidCrystal_I2C::begin(int, int)'
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int vibrationMotorPin = 14;
const int encoderCLK = 16;
const int encoderDT = 17;
const int encoderSW = 18;
volatile int encoderPos = 0;
int vibrationFrequency = 100; // Default frequency in Hz
unsigned long previousMillis = 0;
const long interval = 1000 / vibrationFrequency;

LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address is 0x27, 16 columns, and 2 rows

void setup() {
  pinMode(vibrationMotorPin, OUTPUT);
  pinMode(encoderCLK, INPUT);
  pinMode(encoderDT, INPUT);
  pinMode(encoderSW, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(encoderCLK), updateEncoder, CHANGE);
  lcd.begin(16, 2);
  lcd.print("Vibration Gen");
}

void loop() {
  int newPos = encoderPos;
  if (newPos != 0) {
    vibrationFrequency += newPos;
    if (vibrationFrequency < 1) vibrationFrequency = 1;
    newPos = 0;
    encoderPos = 0;
    lcd.setCursor(0, 1);
    lcd.print("Freq:       "); // Clear the previous frequency value
    lcd.setCursor(6, 1);
    lcd.print(vibrationFrequency);
  }

  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    digitalWrite(vibrationMotorPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(vibrationMotorPin, LOW);
  }
}

void updateEncoder() {
  static unsigned long lastInterruptTime = 0;
  unsigned long interruptTime = millis();
  if (interruptTime - lastInterruptTime > 1) {
    if (digitalRead(encoderCLK) == LOW) {
      if (digitalRead(encoderDT) == LOW)
        encoderPos--;
      else
        encoderPos++;
    }
    lastInterruptTime = interruptTime;
  }
}

Hello 4trodev

Welcome to the worldbest Arduino forum ever.

Try this:

delete

lcd.begin(16, 2);

set to

lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight

hth

Have a nice day and enjoy coding in C++.

3 Likes

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.