I created a little custom char for my LCD menu. I was testing the whole menu by putting it in to a loop.
The char I created is supposed to look like a "filled arrow" like in the first picture.
The custom char worked well when uploaded. But when I unplug my arduino and plug it back(power OFF and power ON back) it changes. It looks like some lines as in the 2nd picture.
To get it back correctly I had to re upload the code several times. Any ideas why this is happening and how to fix this.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Custom Chars
byte arrow[8] = {
0b10000,
0b11000,
0b11100,
0b11110,
0b11100,
0b11000,
0b10000,
0b00000
};
void setup() {
lcd.createChar(0, arrow);
delay(3000);
lcd.begin(20,4);
delay(2000);
}
void loop() {
manual_YES();
delay(2000);
lcd.clear();
manual_NO();
delay(2000);
lcd.clear();
menu1();
delay(2000);
lcd.clear();
menu2();
delay(2000);
lcd.clear();
menu3();
delay(2000);
lcd.clear();
menu4();
delay(2000);
lcd.clear();
led_on();
delay(2000);
lcd.clear();
led_off();
delay(2000);
lcd.clear();
dosing_screen();
delay(2000);
lcd.clear();
manual_YES();
delay(2000);
lcd.clear();
manual_NO();
delay(2000);
lcd.clear();
//led_on();
//delay(2000);
//lcd.clear();
//led_off();
//delay(2000);
//lcd.clear();
}
void menu1(){
lcd.setCursor(0,0);
lcd.write((uint8_t)0);
lcd.setCursor(1,0);
lcd.print("Cycle date set");
lcd.setCursor(1,1);
lcd.print("Manual Cycle");
lcd.setCursor(1,2);
lcd.print("LED set");
lcd.setCursor(1,3);
lcd.print("Dosing settings");
}
void menu2(){
lcd.setCursor(0,1);
lcd.write((uint8_t)0);
lcd.setCursor(1,0);
lcd.print("Cycle date set");
lcd.setCursor(1,1);
lcd.print("Manual Cycle");
lcd.setCursor(1,2);
lcd.print("LED set");
lcd.setCursor(1,3);
lcd.print("Dosing settings");
}
void menu3(){
lcd.setCursor(0,2);
lcd.write((uint8_t)0);
lcd.setCursor(1,0);
lcd.print("Cycle date set");
lcd.setCursor(1,1);
lcd.print("Manual Cycle");
lcd.setCursor(1,2);
lcd.print("LED set");
lcd.setCursor(1,3);
lcd.print("Dosing settings");
}
void menu4(){
lcd.setCursor(0,3);
lcd.write((uint8_t)0);
lcd.setCursor(1,0);
lcd.print("Cycle date set");
lcd.setCursor(1,1);
lcd.print("Manual Cycle");
lcd.setCursor(1,2);
lcd.print("LED set");
lcd.setCursor(1,3);
lcd.print("Dosing settings");
}
void led_on(){
lcd.setCursor(2,2);
lcd.write((uint8_t)0);
lcd.setCursor(5,0);
lcd.print("LED State");
lcd.setCursor(3,2);
lcd.print("ON");
lcd.setCursor(14,2);
lcd.print("OFF");
}
void led_off(){
lcd.setCursor(13,2);
lcd.write((uint8_t)0);
lcd.setCursor(5,0);
lcd.print("LED State");
lcd.setCursor(3,2);
lcd.print("ON");
lcd.setCursor(14,2);
lcd.print("OFF");
}
void dosing_screen(){
lcd.setCursor(1,0);
lcd.print("Set Dosing Period");
lcd.setCursor(6,2);
lcd.print("1000Ex");
}
void manual_YES(){
lcd.setCursor(2,2);
lcd.write((uint8_t)0);
lcd.setCursor(1,0);
lcd.print("Manual Water Change");
lcd.setCursor(3,2);
lcd.print("YES");
lcd.setCursor(14,2);
lcd.print("NO");
}
void manual_NO(){
lcd.setCursor(13,2);
lcd.write((uint8_t)0);
lcd.setCursor(1,0);
lcd.print("Manual Water Change");
lcd.setCursor(3,2);
lcd.print("YES");
lcd.setCursor(14,2);
lcd.print("NO");
}
//lcd.backlight();
//lcd.noBacklight();
//lcd.setCursor(0,0);
//lcd.print("Hello, world!");
//lcd.clear();
//lcd.write(Serial.read());