Hello, Im trying to make a gift for my girlfriend I want a LCD screen that prints little cute messages while having LEDs flashing in the background, when I first start the arduino its able to change the messages with the buttons but as soon as I activate the light button the text on the screen starts to get combined with the other messages. I know it has something to do with the delay function I found online but I can't tell how to fix it. Any help is appreciated. Also Im new to arduino so my code is very scrambled and not that great apologize in advance, thank you.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int red_light_pin= 9;
int green_light_pin = 10;
int blue_light_pin = 8;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
lcd.begin();
//Buttons
//Light Button
pinMode(2, INPUT);
//Message Button
pinMode(3, INPUT);
//Lights
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
lcd.print(" Welcome to");
lcd.setCursor(0,1);
lcd.print("Korilakkuma Box");
}
int lightMode = 0;
int lightButton = 3;
int MessButton = 2;
void loop() {
//Phrases
String phrases[20];
phrases[0] = " 111111111111";
phrases[1] = "2222222222222";
phrases[2] = "33333333333333";
phrases[3] = "4444444444444";
phrases[4] = "555555555555";
phrases[5] = "66666666666";
phrases[6] = "77777777777777";
phrases[7] = "8888888888888";
phrases[8] = "9999999999999";
phrases[9] = "101010101010";
phrases[10] = " 11 11 11 11 11 11";
phrases[11] = "121212121212";
phrases[12] = "13131313131313";
phrases[13] = "14141414141414";
phrases[14] = "1515151515151515";
phrases[15] = "161616161616";
phrases[16] = " 17171717";
phrases[17] = "18181818181818";
phrases[18] = "19191919191919";
phrases[19] = " 20202020202020";
//newMessage(phrases);
Serial.println(digitalRead(MessButton));
Serial.println(digitalRead(lightButton));
if(digitalRead(MessButton) == 1){
lcd.clear();
newMessage(phrases);
delay(1000);
}
if(digitalRead(lightButton) == 1){
lightMode++;
delay(1000);
}
if(lightMode == 1){
RGBMode(phrases);
}
if(lightMode == 2){
RCMMode(phrases);
}
if(lightMode == 3){
offMode(phrases);
}
LMCheck();
}
void myDelay(unsigned long duration, int pin, String list[]){
unsigned long start = millis();
while (millis() - start <= duration) {
checkButtons(pin, list);
}
}
void checkButtons(int pin, String list[]){
int buttonstate = digitalRead(pin);
if(digitalRead(MessButton) == HIGH){
newMessage(list);
delay(1000);
}
if(digitalRead(lightButton) == HIGH){
lightMode++;
delay(1000);
}
}
void newMessage(String list[]){
int current = rand() % 20;
if(list[current].length() > 16){
String half =list[current].substring(16, list[current].length());
lcd.print(list[current].substring(0,16));
lcd.setCursor(0,1);
lcd.print(half);
}else{
lcd.print(list[current]);
}
}
void RGBMode(String phrases[]){
RGB_color(255, 0, 0); // Red
myDelay(1000, lightButton, phrases);
RGB_color(0, 255, 0); // Green
myDelay(1000, lightButton, phrases);
RGB_color(0, 0, 255); // Blue
myDelay(1000, lightButton, phrases);
}
void RCMMode(String phrases[]){
RGB_color(255, 255, 125); // Raspberry
myDelay(1000, lightButton, phrases);
RGB_color(0, 255, 255); // Cyan
myDelay(1000, lightButton, phrases);
RGB_color(255, 0, 255); // Magenta
myDelay(1000, lightButton, phrases);
}
void LMCheck(){
if(lightMode >= 4){
lightMode = 1;
}
}
void offMode(String phrases[]){
RGB_color(255, 255, 255);
myDelay(1000, lightButton, phrases);
}
void RGB_color(int red_light_value, int green_light_value, int blue_light_value){
analogWrite(red_light_pin, red_light_value);
analogWrite(green_light_pin, green_light_value);
analogWrite(blue_light_pin, blue_light_value);
}