Hey guys, I am starting with arduino and I have this code that I and ChatGPT created, but it does not work. The display does not light up. Is my wiring the problem or the code?
#include <LiquidCrystal.h>
const int servoPin = A4;
const int rs = 12, en = 11, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
const int numberOfRows = 4;
const int numberOfColumns = 4;
const int rowPins[numberOfRows] = { A3, A2, A1, A0 };
const int columnPins[numberOfColumns] = { 7, 8, 9, 10 };
const char keyMap[numberOfRows][numberOfColumns] = { { '1', '2', '3', 'A' }, { '4', '5', '6', 'B' }, { '7', '8', '9', 'C' }, { '*', '0', '#', 'D' } };
char correctCode[4] = { '1', '2', '3', '4' };
char code[4] = { 'n', 'n', 'n', 'n' };
unsigned int codePosition = 0;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
Serial.begin(9600);
for (int row = 0; row < numberOfRows; row++) {
pinMode(rowPins[row], INPUT);
digitalWrite(rowPins[row], HIGH);
}
for (int column = 0; column < numberOfColumns; column++) {
pinMode(columnPins[column], OUTPUT);
digitalWrite(columnPins[column], HIGH);
}
pinMode(servoPin, OUTPUT);
digitalWrite(servoPin, LOW);
lcd.begin(16, 2);
resetToMainScreen();
}
void loop() {
char pressedKey = getPressedKey();
if (pressedKey != 0) {
if (codePosition <= 3 && ((pressedKey >= '0' && pressedKey <= '9') || (pressedKey >= 'A' && pressedKey <= 'D'))) {
lcd.setCursor(12 + codePosition, 0);
lcd.print(pressedKey);
code[codePosition] = pressedKey;
codePosition++;
} else if (pressedKey == '*') {
resetToMainScreen();
} else if (pressedKey == '#') {
if (correctCode[0] == code[0] && correctCode[1] == code[1] && correctCode[2] == code[2] && correctCode[3] == code[3]) {
displayWrite2Lines("Correct code", "");
digitalWrite(servoPin, HIGH);
delay(2000);
digitalWrite(servoPin, LOW);
resetToMainScreen();
} else {
displayWrite2Lines("Wrong code", "try again!");
delay(2000);
resetToMainScreen();
}
}
}
}
char getPressedKey() {
char key = 0;
for (int column = 0; column < numberOfColumns; column++) {
digitalWrite(columnPins[column], LOW);
for (int row = 0; row < numberOfRows; row++) {
if (digitalRead(rowPins[row]) == LOW) {
delay(20);
while (digitalRead(rowPins[row]) == LOW);
key = keyMap[row][column];
}
}
digitalWrite(columnPins[column], HIGH);
}
return key;
}
void displayWrite2Lines(String text1, String text2) {
lcd.clear();
lcd.noCursor();
lcd.setCursor(0, 0);
lcd.print(text1);
lcd.setCursor(0, 1);
lcd.print(text2);
}
void resetToMainScreen() {
codePosition = 0;
for (int i = 0; i <= 3; i++) {
code[i] = 'n';
}
displayWrite2Lines("Enter code:", "# Submit * Clear");
lcd.cursor();
}