Closing Serial Monitor crashes code

Hello, I am currently working on my final piece and need the Arduino Uno for it. I have already written some code and uploaded it to my Arduino which is connected via USB-A Cable, but I want to power it from the 5V pin. The code also works exactly as I need it to, but only until I unplug the USB-A connection cable and close the serial monitor. The Arduino even has power. So my question: How can it be that the code works perfectly until I close the serial monitor?

can you share your code?

... and a schematic and details of anything that may be connected.

what project is it?

#include <SoftwareSerial.h>
#include <Wire.h>

SoftwareSerial nextion(8, 9); // RX, TX

#define trigPin1 4
#define echoPin1 5

#define trigPin2 6
#define echoPin2 7

int i = 0;
int var = 0;
const byte interruptPin1 = 2;
const byte interruptPin2 = 3;
int RPWM = 10;
int LPWM = 11;
int R_EN = 12;
int L_EN = 13;
int timer = 0;

String daten_display = "";

long duration1;
int distance1;
long duration2;
int distance2;

void setup()
{
pinMode(interruptPin1, INPUT_PULLUP);
pinMode(interruptPin2, INPUT_PULLUP);
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(L_EN, OUTPUT);
pinMode(R_EN, OUTPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin1), endschalter1, CHANGE);
attachInterrupt(digitalPinToInterrupt(interruptPin2), endschalter2, CHANGE);
delay(500);

Serial.begin(9600);
nextion.begin(9600);
}

void loop()
{
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = duration1 * 0.034 / 2;

digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = duration2 * 0.034 / 2;

if (nextion.available() > 0)
{
daten_display += char (nextion.read());
}

switch (var)
{
case 0:
if (daten_display == "Modus 1")
{
daten_display = "";
var = 1;
}
if (daten_display == "Modus 2")
{
daten_display = "";
var = 2;
}
if (daten_display == "IO Test")
{
daten_display = "";
var = 15;
}
break;
case 1: // Modus 1: Sensorabfrage
Serial.println("Case 1");
if (distance1 < 70 || distance2 < 70)
{
var = 3;
} else
{
daten_display = "Modus 1";
var = 0;
}
break;
case 2: // Modus 2: Sensorabfrage
Serial.println("Case 2");

  if (distance1 < 100 || distance2 < 100)
  {
    var = 3;
  } else
  {
    daten_display = "Modus 2";
    var = 0;
  }
  break;
case 3: // Rampe startet nach rechts
  Serial.println("Case 3");
  digitalWrite(R_EN, HIGH);
  digitalWrite(L_EN, HIGH);

  for (i = 0; i < 256; i++)
  {
    analogWrite(RPWM, i);
    delay(10);
  }
  var = 4;
  break;
case 4: // Motor fährt nach rechts und bremst
  Serial.println("Case 4");
  timer++;
  if (timer <= 500)
  {
    analogWrite(RPWM, 255);
  }
  else if (timer > 500)
  {
    var = 9;
    timer = 0;
  }
  break;
case 5:
  Serial.println("Case 5");
  for (i = 255; i > 0; i--)
  {
    analogWrite(RPWM, i);
    delay(10);
  }
  i = 0;
  digitalWrite(L_EN, LOW);
  digitalWrite(R_EN, LOW);
  timer = 0;
  var = 6;
  break;
case 6: // Rampe startet nach links
  Serial.println("Case 6");
  delay(5000);
  digitalWrite(R_EN, HIGH);
  digitalWrite(L_EN, HIGH);

  for (i = 0; i < 256; i++)
  {
    analogWrite(LPWM, i);
    delay(10);
  }
  var = 7;
  break;
case 7: // Motor fährt nach links und bremst
  Serial.println("Case 7");
  timer ++;
  if (timer <= 500)
  {
    analogWrite(LPWM, 255);
  }
  else if (timer > 500)
  {
    var = 11;
    timer = 0;
  }
  break;
case 8:
  Serial.println("Case 8");
  for (i = 255; i > 0; i--)
  {
    analogWrite(LPWM, i);
    delay(10);
  }
  i = 0;
  digitalWrite(L_EN, LOW);
  digitalWrite(R_EN, LOW);
  timer = 0;
  var = 0;
  break;
  
case 9: // Error Drehung Rechts
  Serial.println("Error Rechts");
  for (i = 255; i > 0; i--)
  {
    analogWrite(RPWM, i);
    delay(3);
  }
  i = 0;
  digitalWrite(L_EN, LOW);
  digitalWrite(R_EN, LOW);
  timer = 0;
  var = 10;
  break;
case 10:
  Serial.println("Case 10");
  if (daten_display == "Error")
  {
    daten_display = "";
    var = 13;
  }
  break;
case 11: // Error Drehung Links
  Serial.println("Error Links");
  for (i = 255; i > 0; i--)
  {
    analogWrite(LPWM, i);
    delay(3);
  }
  i = 0;
  digitalWrite(L_EN, LOW);
  digitalWrite(R_EN, LOW);
  var = 12;
  break;
case 12:
  Serial.println("Case 12");
  if (daten_display == "Error")
  {
    daten_display = "";
    var = 13;
  }
  break;
case 13: // Rampe startet nach links
  Serial.println("Case 13");
  delay(1000);
  digitalWrite(R_EN, HIGH);
  digitalWrite(L_EN, HIGH);

  for (i = 0; i < 256; i++)
  {
    analogWrite(LPWM, i);
    delay(10);
  }
  var = 14;
  break;
case 14: // Motor fährt nach links und bremst
  Serial.println("Case 14");
  analogWrite(LPWM, 255);
  break;
case 15: //IO Test

  break;

}
}

void endschalter1()
{
var = 5;
}

void endschalter2()
{
var = 8;
}

There is a Nextion Display, two HCSR04 Sensors, two limit switches and a Modelcraft 5V Gear Motor connceted

what is it suppose to do?

It is planned to open sliding doors if you step in range for the sensors to detect you

#include <SoftwareSerial.h>
#include <Wire.h>

SoftwareSerial nextion(8, 9); // RX, TX

#define trigPin1 4
#define echoPin1 5

#define trigPin2 6
#define echoPin2 7

int i = 0;
int var = 0;
const byte interruptPin1 = 2;
const byte interruptPin2 = 3;
int RPWM = 10;
int LPWM = 11;
int R_EN = 12;
int L_EN = 13;
int timer = 0;

String daten_display = "";

long duration1;
int distance1;
long duration2;
int distance2;

void setup()
{
pinMode(interruptPin1, INPUT_PULLUP);
pinMode(interruptPin2, INPUT_PULLUP);
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(L_EN, OUTPUT);
pinMode(R_EN, OUTPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin1), endschalter1, CHANGE);
attachInterrupt(digitalPinToInterrupt(interruptPin2), endschalter2, CHANGE);
delay(500);

Serial.begin(9600);
nextion.begin(9600);
}

void loop()
{
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = duration1 * 0.034 / 2;

digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = duration2 * 0.034 / 2;

if (nextion.available() > 0)
{
daten_display += char (nextion.read());
}

switch (var)
{
case 0:
if (daten_display == "Modus 1")
{
daten_display = "";
var = 1;
}
if (daten_display == "Modus 2")
{
daten_display = "";
var = 2;
}
if (daten_display == "IO Test")
{
daten_display = "";
var = 15;
}
break;
case 1: // Modus 1: Sensorabfrage
Serial.println("Case 1");
if (distance1 < 70 || distance2 < 70)
{
var = 3;
} else
{
daten_display = "Modus 1";
var = 0;
}
break;
case 2: // Modus 2: Sensorabfrage
Serial.println("Case 2");

  if (distance1 < 100 || distance2 < 100)
  {
    var = 3;
  } else
  {
    daten_display = "Modus 2";
    var = 0;
  }
  break;
case 3: // Rampe startet nach rechts
  Serial.println("Case 3");
  digitalWrite(R_EN, HIGH);
  digitalWrite(L_EN, HIGH);

  for (i = 0; i < 256; i++)
  {
    analogWrite(RPWM, i);
    delay(10);
  }
  var = 4;
  break;
case 4: // Motor fährt nach rechts und bremst
  Serial.println("Case 4");
  timer++;
  if (timer <= 500)
  {
    analogWrite(RPWM, 255);
  }
  else if (timer > 500)
  {
    var = 9;
    timer = 0;
  }
  break;
case 5:
  Serial.println("Case 5");
  for (i = 255; i > 0; i--)
  {
    analogWrite(RPWM, i);
    delay(10);
  }
  i = 0;
  digitalWrite(L_EN, LOW);
  digitalWrite(R_EN, LOW);
  timer = 0;
  var = 6;
  break;
case 6: // Rampe startet nach links
  Serial.println("Case 6");
  delay(5000);
  digitalWrite(R_EN, HIGH);
  digitalWrite(L_EN, HIGH);

  for (i = 0; i < 256; i++)
  {
    analogWrite(LPWM, i);
    delay(10);
  }
  var = 7;
  break;
case 7: // Motor fährt nach links und bremst
  Serial.println("Case 7");
  timer ++;
  if (timer <= 500)
  {
    analogWrite(LPWM, 255);
  }
  else if (timer > 500)
  {
    var = 11;
    timer = 0;
  }
  break;
case 8:
  Serial.println("Case 8");
  for (i = 255; i > 0; i--)
  {
    analogWrite(LPWM, i);
    delay(10);
  }
  i = 0;
  digitalWrite(L_EN, LOW);
  digitalWrite(R_EN, LOW);
  timer = 0;
  var = 0;
  break;
  
case 9: // Error Drehung Rechts
  Serial.println("Error Rechts");
  for (i = 255; i > 0; i--)
  {
    analogWrite(RPWM, i);
    delay(3);
  }
  i = 0;
  digitalWrite(L_EN, LOW);
  digitalWrite(R_EN, LOW);
  timer = 0;
  var = 10;
  break;
case 10:
  Serial.println("Case 10");
  if (daten_display == "Error")
  {
    daten_display = "";
    var = 13;
  }
  break;
case 11: // Error Drehung Links
  Serial.println("Error Links");
  for (i = 255; i > 0; i--)
  {
    analogWrite(LPWM, i);
    delay(3);
  }
  i = 0;
  digitalWrite(L_EN, LOW);
  digitalWrite(R_EN, LOW);
  var = 12;
  break;
case 12:
  Serial.println("Case 12");
  if (daten_display == "Error")
  {
    daten_display = "";
    var = 13;
  }
  break;
case 13: // Rampe startet nach links
  Serial.println("Case 13");
  delay(1000);
  digitalWrite(R_EN, HIGH);
  digitalWrite(L_EN, HIGH);

  for (i = 0; i < 256; i++)
  {
    analogWrite(LPWM, i);
    delay(10);
  }
  var = 14;
  break;
case 14: // Motor fährt nach links und bremst
  Serial.println("Case 14");
  analogWrite(LPWM, 255);
  break;
case 15: //IO Test

  break;
}
}

void endschalter1()
{
var = 5;
}

void endschalter2()
{
var = 8;
}

the code in the correct format.

We really need a schematic please- all sorts of power implications with a display and a motor.

Should schematic be a link?

Here is a screenshot of all things connected

did you use a PCB?

Bonus points for nice schematic (although the colour scheme's a bit pale for my old eyes :wink: but good job.

I did use a PCB

did you try to powering it with a 9v battery thru the barrel jack?

No I didnt try that, but I need to power it from the 5V Pin

Pleas send a photo of every thing.

Power what?

The schematic shows a 5V rail at the top, that powers everything as far as I can see. So what do you mean by powering from the 5V pin- is that the Arduino pin you mean or what, and what will you power from there.