LCD freaking out with DC motor

#include <Servo.h>


#include <LiquidCrystal.h>
#include <Adafruit_LiquidCrystal.h>


LiquidCrystal lcd_1(12, 11, 5, 4, 3, 2);
byte bat1[] = {
  B00001,
  B00001,
  B00001,
  B00001,
  B00001,
  B00001,
  B11111,
  B11111
};
byte bat2[] = {
  B11111,
  B11111,
  B00001,
  B00001,
  B00001,
  B00001,
  B00001,
  B00001
};
byte batwall1[] = {
  B11111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};
byte batwall2[] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B11111
};

byte battop1[] = {
  B10000,
  B10000,
  B10000,
  B10000,
  B10000,
  B10000,
  B11111,
  B11111
};
byte battop2[] = {
  B11111,
  B11111,
  B10000,
  B10000,
  B10000,
  B10000,
  B10000,
  B10000
};
byte batdiode1[] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B11111,
  B11111,
  B11111,
  B11111
};
byte batdiode2[] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B00000,
  B00000,
  B00000,
  B00000
};
byte batch1[] = {
  B11111,
  B00000,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111
};
byte batch2[] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B00000,
  B11111
};
byte batch3[] = {
  B11111,
  B00000,
  B01111,
  B01111,
  B01111,
  B01111,
  B01111,
  B01111
};
byte batch4[] = {
  B01111,
  B01111,
  B01111,
  B01111,
  B01111,
  B01111,
  B00000,
  B11111
};
byte batch5[] = {
  B11111,
  B00000,
  B11110,
  B11110,
  B11110,
  B11110,
  B11110,
  B11110
};
byte batch6[] = {
  B11110,
  B11110,
  B11110,
  B11110,
  B11110,
  B11110,
  B00000,
  B11111
};
byte lvl[] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B00000,
  B11111
};
byte lvl2[] = {
  B11111,
  B00000,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111
};
int batt = 3;
int timer = 1;
int state = 0;
int first = 0;
int feet = 0;
void setup()
{
  
  lcd_1.begin(16, 2); // Set up the number of columns and rows on the LCD.

  // Print a message to the LCD.
  
  lcd_1.createChar(0, bat1);
  lcd_1.createChar(1, bat2);
  
  lcd_1.createChar(2, batwall1);
  lcd_1.createChar(3, batwall2);
  
  lcd_1.createChar(4, battop1);
  lcd_1.createChar(5, battop2);
  
  
  lcd_1.createChar(6, lvl);
  lcd_1.createChar(7, lvl2);
  pinMode(9, INPUT);
  
  
  
  
 
}

void loop()
{
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting
  // begins with 0):
  digitalWrite(13, LOW);
  timer += 1;
  if (timer > 100) {
    timer = 1;
  }
  if (state == 1) {
    if (batt == 3) {
      state = 0;
      first = 0;
    }
  }
  if (digitalRead(9) == HIGH) {
    if (first == 0){
      if (batt == 1) {
        feet = 1;
    }
  }
  }
  if (digitalRead(9) != HIGH) {
    if (state == 0) {
       if (batt != 3) {
         
         state = 1;
         batt = 3;
         first = 0;
      
    }
    }
  }
  if (digitalRead(9) != HIGH) {
    if (state == 0) {
      if (first == 1) {
        if (batt == 3) {
          state = 1;
          batt = 0;
          first = 0;
          
        }
      } 
    } 
        
        
      
  }
  if (digitalRead(9) == HIGH) {
    if (state == 0) {
      digitalWrite(7, HIGH);
    }
  } else {
    digitalWrite(7, LOW);
  }
  if (timer == 1) {
    {
  if (digitalRead(9) == HIGH || feet == 1) {
    if (state == 0) {
      if (first == 1){
        feet = 0;
      }
      if (first == 0){
        batt = 0;
        first = 1;
      }
      if (batt < 3) {
        batt += 1;
      }
    }
  }
  if (state == 1) {
      if (first == 0){
        batt = 0;
        first = 1;
      }
      if (batt < 3) {
        batt += 1;
      }
      
    }
  }
  
  lcd_1.clear();
  lcd_1.setCursor(15, 1);
  lcd_1.write(byte(0));
  lcd_1.setCursor(15, 0);
  lcd_1.write(byte(1));
  
  lcd_1.setCursor(0, 1);
  lcd_1.write(byte(1));
  lcd_1.setCursor(0, 0);
  lcd_1.write(byte(0));
  
  lcd_1.setCursor(1, 1);
  lcd_1.write(byte(4));
  lcd_1.setCursor(1, 0);
  lcd_1.write(byte(5));
  
  
  if (batt == 0) {
  
  
  
  lcd_1.setCursor(14, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(13, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(12, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(11, 1);
  lcd_1.write(byte(3));
    
  lcd_1.setCursor(10, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(9, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(8, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(7, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(6, 1);
  lcd_1.write(byte(3));
    
  lcd_1.setCursor(5, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(4, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(3, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(2, 1);
  lcd_1.write(byte(3));
  
 
  lcd_1.setCursor(14, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(13, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(12, 0);
  lcd_1.write(byte(2));  
  lcd_1.setCursor(11, 0);
  lcd_1.write(byte(2));
  
  lcd_1.setCursor(10, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(9, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(8, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(7, 0);
  lcd_1.write(byte(2));  
  lcd_1.setCursor(6, 0);
  lcd_1.write(byte(2));
  
  lcd_1.setCursor(5, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(4, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(3, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(2, 0);
  lcd_1.write(byte(2));
  }
  
  
  
  if (batt == 1) {
  
    
    
  
  lcd_1.setCursor(14, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(13, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(12, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(11, 1);
  lcd_1.write(byte(6));
  
  
    
  lcd_1.setCursor(10, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(9, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(8, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(7, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(6, 1);
  lcd_1.write(byte(3));
    
  lcd_1.setCursor(5, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(4, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(3, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(2, 1);
  lcd_1.write(byte(3));
  
 
  lcd_1.setCursor(14, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(13, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(12, 0);
  lcd_1.write(byte(7));  
  lcd_1.setCursor(11, 0);
  lcd_1.write(byte(7));
  
  lcd_1.setCursor(10, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(9, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(8, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(7, 0);
  lcd_1.write(byte(2));  
  lcd_1.setCursor(6, 0);
  lcd_1.write(byte(2));
  
  lcd_1.setCursor(5, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(4, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(3, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(2, 0);
  lcd_1.write(byte(2));
  }
  
  if (batt == 2) {
  
    
    
  
  lcd_1.setCursor(14, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(13, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(12, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(11, 1);
  lcd_1.write(byte(6));
  
  
    
  lcd_1.setCursor(10, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(9, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(8, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(7, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(6, 1);
  lcd_1.write(byte(6));
    
  lcd_1.setCursor(5, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(4, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(3, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(2, 1);
  lcd_1.write(byte(3));
  
 
  lcd_1.setCursor(14, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(13, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(12, 0);
  lcd_1.write(byte(7));  
  lcd_1.setCursor(11, 0);
  lcd_1.write(byte(7));
  
  lcd_1.setCursor(10, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(9, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(8, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(7, 0);
  lcd_1.write(byte(7));  
  lcd_1.setCursor(6, 0);
  lcd_1.write(byte(7));
  
  lcd_1.setCursor(5, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(4, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(3, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(2, 0);
  lcd_1.write(byte(2));
  }
  
  if (batt == 2) {
  
    
    
  
  lcd_1.setCursor(14, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(13, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(12, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(11, 1);
  lcd_1.write(byte(6));
  
  
    
  lcd_1.setCursor(10, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(9, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(8, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(7, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(6, 1);
  lcd_1.write(byte(6));
    
  lcd_1.setCursor(5, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(4, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(3, 1);
  lcd_1.write(byte(3));
  lcd_1.setCursor(2, 1);
  lcd_1.write(byte(3));
  
 
  lcd_1.setCursor(14, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(13, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(12, 0);
  lcd_1.write(byte(7));  
  lcd_1.setCursor(11, 0);
  lcd_1.write(byte(7));
  
  lcd_1.setCursor(10, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(9, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(8, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(7, 0);
  lcd_1.write(byte(7));  
  lcd_1.setCursor(6, 0);
  lcd_1.write(byte(7));
  
  lcd_1.setCursor(5, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(4, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(3, 0);
  lcd_1.write(byte(2));
  lcd_1.setCursor(2, 0);
  lcd_1.write(byte(2));
  }
  
  if (batt == 3) {
  
    
    
  
  lcd_1.setCursor(14, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(13, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(12, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(11, 1);
  lcd_1.write(byte(6));
  
  
    
  lcd_1.setCursor(10, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(9, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(8, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(7, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(6, 1);
  lcd_1.write(byte(6));
    
  lcd_1.setCursor(5, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(4, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(3, 1);
  lcd_1.write(byte(6));
  lcd_1.setCursor(2, 1);
  lcd_1.write(byte(6));
  
 
  lcd_1.setCursor(14, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(13, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(12, 0);
  lcd_1.write(byte(7));  
  lcd_1.setCursor(11, 0);
  lcd_1.write(byte(7));
  
  lcd_1.setCursor(10, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(9, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(8, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(7, 0);
  lcd_1.write(byte(7));  
  lcd_1.setCursor(6, 0);
  lcd_1.write(byte(7));
  
  lcd_1.setCursor(5, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(4, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(3, 0);
  lcd_1.write(byte(7));
  lcd_1.setCursor(2, 0);
  lcd_1.write(byte(7));
  if (state == 1) {
      if (batt == 3) {
        delay(1000);
      }
  }
  }
  }
  delay(10);
  }
  
  
  

The code and image above are both part of my same project. The code and circuit work in the tinkercad simulator but the LCD freaks out when being used with the DC motor. I unplugged the motor and tested it and everything worked. I have heard that motors send out a lot of power when turned on and off, could that be the problem? I have looked through more than a few forums but I haven't found a solution that works for me.

Your picture is not readable. Much better to draw by han d, but your problem is likely simple. Just google

electrical interference from a dc motor, how to prevent

Thank for the advice. Sorry about the messy circuitry. This totally works.

Working is 1 point out of 10.

What?

Do NOT try to power a motor or servo from the Arduino 5V. Use a separate power supply and be sure to connect the grounds. Example:

No resistors on the gate of the mosfet (needs two) and no kickback diode across the motor.
And motor return current running across the Arduino.
No wonder it goes sideways.

Battery negative should be connected where the motor current returns (source of the fet).
Leo..

If you turn the lcd by 90 degrees, we can see where each wire is going...

Could you show a example
Wawa?


Could this work?

For the motor, first diagram on this page

.

Then unplug the negative wire of the battery from the Arduino, and move the wire to the ground rail of the breadboard, close to the mosfet.

Follow the motor current path with your finger, your way and my way, and you see what I mean.
Leo..

Good you turned the lcd.
Now move up the motor...
See how that improves readability?
A good schematic minimizes the crossing of lines...
And power supplies are at top. Inputs to the left (button and knob), outputs ar to the right (mosfet and motor). Adhering to stanards makes it easier for you and others to see what is (supposed to be) going on...

Not with the code you posted.
What are you trying to do?

Try splitting the project into it's separate parts, LCD and motor.
Get those to work then combine them.
As the others have said, the electronics of the Arduino need protection from the motor.

I'm trying to display a battery while spinning a motor. I'm pretty sure the code works but if it doesn't could you point out why?

You never set the pinMode for pins 7 and 13 to OUTPUT.

What is the part number of the MOSFET?
What kind of motor are you trying to control?
What is the battery voltage?

pinMode(7, OUTPUT);
pinMode(13, OUTPUT);

Ok I set the pin mode to output with the code above.
3 volts.
irf520 MOSFET.
I don't know what type of motor I'm using. It's a very generic hobby motor. It's very small.

Depending on the motor current, that may or may not work, An IRLZ44N would be a bettor choice.