Hello ! So, i'm trying to test my LCD into 8 bits mode without any libraries, but I can't make any character appear, even the instructions aren't working !
Any help would be greatly appreciated
main file
//#include <LiquidCrystal.h>
#include "LCD1602.h"
const uint8_t data[8]{5, 6, 7, 8, 9, 10, 11, 12};
LCD1602 _lcd(2, 3, 4, data);
//LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
void setup() {
//lcd.begin(16, 2);
_lcd.begin(0x38, 0x0F, 6);
_lcd.writeChar(0x7D);
//lcd.print('c');
}
void loop() {
}
LCD1602 source file
#include <stdint.h>
#include "Arduino.h"
#include "LCD1602.h"
LCD1602::LCD1602(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t* dataPins){
_rs = rs;
_rw = rw;
_enable = enable;
_dataPins = dataPins;
}
void LCD1602::begin(char functionSet, char displayOnOff, char entryModeSet){
pinMode(_rs, OUTPUT);
pinMode(_rw, OUTPUT);
pinMode(_enable, OUTPUT);
dataSize = sizeof(_dataPins) / sizeof(*_dataPins);
is4BitsMode = dataSize == 4;
for (uint8_t i = 0; i < dataSize; i++) {
pinMode(_dataPins[i], OUTPUT);
}
inst(functionSet);
inst(displayOnOff);
inst(entryModeSet);
clear();
}
void LCD1602::writeChar(char code){
digitalWrite(_rs, HIGH);
digitalWrite(_rw, LOW);
if (!is4BitsMode){
writeCodeToLCD(code);
clk();
}else{
char lcdCode = code >> 4;
writeCodeToLCD(lcdCode);
clk();
lcdCode = code & 0x0F;
writeCodeToLCD(lcdCode);
clk();
}
delayMicroseconds(50);
}
void LCD1602::writeString(char *message){
char* pt = message;
while (*pt != 0) {
writeChar(*pt);
pt++;
}
}
void LCD1602::inst(char code){
digitalWrite(_rs, LOW);
digitalWrite(_rw, LOW);
if (!is4BitsMode){
writeCodeToLCD(code);
clk();
}else{
char lcdCode = code >> 4;
writeCodeToLCD(lcdCode);
clk();
lcdCode = code & 0x0F;
writeCodeToLCD(lcdCode);
clk();
}
delayMicroseconds(50);
}
void LCD1602::clear(){
digitalWrite(_rs, LOW);
digitalWrite(_rw, LOW);
writeCodeToLCD(0);
clk();
writeCodeToLCD(1);
clk();
delay(2);
}
void LCD1602::returnHome(){
digitalWrite(_rs, LOW);
digitalWrite(_rw, LOW);
writeCodeToLCD(0);
clk();
writeCodeToLCD(2);
clk();
delay(2);
}
void LCD1602::setCursor(uint8_t x, uint8_t y){
char code = 128 + (64 * x) + y;
inst(code);
}
void LCD1602::clk(){
digitalWrite(_enable, HIGH);
digitalWrite(_enable, LOW);
}
void LCD1602::writeCodeToLCD(char code){
for (uint8_t i = 0; i < dataSize; i++){
digitalWrite(_dataPins[i], (code >> i) & 1);
}
}


