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?
did you use a PCB?
Bonus points for nice schematic (although the colour scheme's a bit pale for my old eyes
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.
