164 lines
3.7 KiB
Arduino
164 lines
3.7 KiB
Arduino
#include <LiquidCrystal.h>
|
|
|
|
LiquidCrystal lcd(9, 8, 7, 6, 5, 4, 3, 2);
|
|
|
|
int row = 0;
|
|
int line = 0;
|
|
bool controller = false;
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
// set up the LCD's number of columns and rows:
|
|
lcd.begin(40, 4);
|
|
lcd.clear();
|
|
lcd.home();
|
|
}
|
|
|
|
#define LCDSERIALIZER_LCDI 0xFE
|
|
|
|
byte serial_getch() {
|
|
int incoming;
|
|
while (Serial.available() == 0) {
|
|
}
|
|
// read the incoming byte:
|
|
incoming = Serial.read();
|
|
//Serial.write(incoming);
|
|
|
|
return (incoming & 0xff);
|
|
}
|
|
|
|
void loop() {
|
|
byte rxbyte = serial_getch(); // Fetch byte
|
|
|
|
if (rxbyte == LCDSERIALIZER_LCDI) // If LCD instruction
|
|
{
|
|
//Serial.write("[CMD]");
|
|
|
|
rxbyte = serial_getch(); // Fetch byte
|
|
|
|
if (rxbyte == 0x01)
|
|
{
|
|
Serial.println("Clear screen");
|
|
}
|
|
else if (rxbyte == 0x0c)
|
|
{
|
|
Serial.println("Restore the display (with cursor hidden)");
|
|
}
|
|
else if (rxbyte == 0x08)
|
|
{
|
|
Serial.println("Blank the display (without clearing)");
|
|
}
|
|
else if (rxbyte == 0x0c)
|
|
{
|
|
Serial.println("Make cursor invisible");
|
|
}
|
|
else if (rxbyte == 0x0f)
|
|
{
|
|
Serial.println("Turn on visible blinking-block cursor");
|
|
}
|
|
else if (rxbyte == 0x0e)
|
|
{
|
|
Serial.println("Turn on visible underline cursor");
|
|
}
|
|
else if (rxbyte == 0x10)
|
|
{
|
|
Serial.println("Move cursor one character left");
|
|
}
|
|
else if (rxbyte == 0x14)
|
|
{
|
|
Serial.println("Move cursor one character right");
|
|
}
|
|
else if (rxbyte == 0x15)
|
|
{
|
|
Serial.println("(15)Move cursor one character right");
|
|
}
|
|
else if (rxbyte == 0x02)
|
|
{
|
|
Serial.println("Home (move cursor to top/left character position)");
|
|
}
|
|
else if (rxbyte == 0x18)
|
|
{
|
|
Serial.println("Scroll display one character left (all lines)");
|
|
}
|
|
else if (rxbyte == 0x1e)
|
|
{
|
|
Serial.println("Scroll display one character right (all lines)");
|
|
}
|
|
else if (rxbyte == 0x20)
|
|
{
|
|
Serial.println("Function set (4-bit interface, 1 line, 5*7 Pixels)");
|
|
}
|
|
else if (rxbyte == 0x28)
|
|
{
|
|
Serial.println("Function set (4-bit interface, 2 lines, 5*7 Pixels)");
|
|
}
|
|
else if (rxbyte == 0x30)
|
|
{
|
|
Serial.println("Function set (8-bit interface, 1 line, 5*7 Pixels)");
|
|
}
|
|
else if (rxbyte == 0x38)
|
|
{
|
|
Serial.println("Function set (8-bit interface, 2 lines, 5*7 Pixels)");
|
|
}
|
|
else if (rxbyte == 0x80) // set ddram address command.
|
|
{
|
|
serial_getch(); // instruction
|
|
row = serial_getch();
|
|
serial_getch(); // instruction
|
|
line = serial_getch();
|
|
|
|
lcd.setCursor(line, row);
|
|
|
|
Serial.println("Set Cursor to " + String(row) + "," + String(line));
|
|
|
|
return;
|
|
}
|
|
else if (rxbyte & 0x40) // set cgram address, cgram is custom character ram.
|
|
{
|
|
Serial.println("Set pointer in character-generator RAM (CG RAM address)");
|
|
Serial.println("[");
|
|
|
|
lcd.setController(0);
|
|
lcd.command(rxbyte);
|
|
lcd.setController(1);
|
|
lcd.command(rxbyte);
|
|
|
|
// get custom char
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
rxbyte = serial_getch(); // Fetch byte
|
|
|
|
String thisString = String(rxbyte, HEX);
|
|
Serial.println(thisString);
|
|
|
|
lcd.setController(0);
|
|
lcd.write(rxbyte);
|
|
lcd.setController(1);
|
|
lcd.write(rxbyte);
|
|
}
|
|
|
|
Serial.println("]");
|
|
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
// print byte.
|
|
String thisString = String(rxbyte, HEX);
|
|
Serial.println("UNKNOWN " + thisString);
|
|
}
|
|
|
|
lcd.command(rxbyte);
|
|
}
|
|
else
|
|
{
|
|
// print byte.
|
|
//String thisString = String(rxbyte, HEX);
|
|
//Serial.println(thisString);
|
|
//Serial.println("position " + String(row) + " " + String(line));
|
|
|
|
lcd.write(rxbyte);
|
|
// line++;
|
|
}
|
|
}
|