Variablen per Nextion Display ändern

Servus Freunde,

ich bin gerade daran eine Art Cocktailmaschine zu bauen.

Dabei wird die Auswahl über ein Nextiondisplay getätigt und bei entsprechender Eingabe sollen Variablen verändert werden, um die Verfahrwege der Schrittmotoren zu variieren.

Wenn am Display die Eingabe getätigt wird, fahren die Motoren die Endschalter an, danach soll eigentlich der Stepper die verschiedenen Punkte anfahren, stattdessen bleiben diese stehen und die Pumpen gehen nach Ablauf der Zeit an.
Erst nach dem zweiten Durchlauf des Loops beginnen beide Schrittmotoren wie gewollt zu laufen.

Könnt ihr euch den Code anschauen und mir evtl. sagen wo im Sketch der Fehler liegt?

Gruß und Danke
Bastian


#include "AccelStepper.h" 
#include <SoftwareSerial.h>


AccelStepper stepper1(AccelStepper::DRIVER, A0, 13); //stepPin, dirPin
AccelStepper stepper2(AccelStepper::DRIVER, A4, A3); //stepPin, dirPin
SoftwareSerial nextion(9, 8); // RX, TX
String daten_display = "";

// Define the Pins used
#define Endschalter1 12  // Endschalter für horizontale Achse
#define Endschalter2 7   // Endschalter für vertikale Achse
#define Pumpe1_rechtslauf 11  // Pumpe 1 dreht rechtsrum
#define Pumpe1_linkslauf 6 // Pumpe 1 dreht linksrum 
#define Pumpe2_rechtslauf 10  // Pumpe 2 dreht rechtsrum
#define Pumpe2_linkslauf 5 // Pumpe 2 dreht linksrum 

int Weg1 = 0;
int Weg2 = 0;
int Weg3 = 0;
int Weg4 = 0;
int Weg5 = 0;

// Stepper Travel Variables
long initial_homing1=1;  // Used to Home Stepper at startup
long initial_homing2=1;  // Used to Home Stepper at startup


void setup() {
   Serial.begin(9600);  // Start the Serial monitor with speed of 9600 Bauds
   nextion.begin(9600);

   pinMode(Endschalter1, INPUT_PULLUP);
   pinMode(Endschalter2, INPUT_PULLUP);
   pinMode(Pumpe1_rechtslauf, OUTPUT);
   pinMode(Pumpe1_linkslauf, OUTPUT);
   pinMode(Pumpe2_rechtslauf, OUTPUT);
   pinMode(Pumpe2_linkslauf, OUTPUT);

   delay(5);  // Wait for EasyDriver wake up

   //  Set Max Speed and Acceleration of each Steppers at startup for homing



// Start Homing procedure of Stepper Motor at startup
}
 
void loop(){
  if (nextion.available() > 0)
  {
    daten_display += char (nextion.read());
    }


  if (daten_display >"0")
    {
    stepper1.setMaxSpeed(10000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
    stepper1.setAcceleration(100.0);  // Set Acceleration of Stepper
    while (digitalRead(Endschalter1)) {  // Make the Stepper move CCW until the switch is activated   
    stepper1.moveTo(initial_homing1);  // Set the position to move to
    initial_homing1++;  // Decrease by 1 for next move if needed
    stepper1.run();  // Start moving the stepper
    delay(5);
    }

    stepper1.setCurrentPosition(0);  // Set the current position as zero for now
    stepper1.setMaxSpeed(10000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
    stepper1.setAcceleration(100.0);  // Set Acceleration of Stepper
    initial_homing1=1;

    while (!digitalRead(Endschalter1)) { // Make the Stepper move CW until the switch is deactivated
    stepper1.moveTo(initial_homing1);  
    stepper1.run();
    initial_homing1--;
    delay(5);
    }
  
    stepper1.setCurrentPosition(0);
    stepper2.setMaxSpeed(10000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
    stepper2.setAcceleration(100.0);  // Set Acceleration of Stepper

    while (digitalRead(Endschalter2)) {  // Make the Stepper move CCW until the switch is activated   
    stepper2.moveTo(initial_homing2);  // Set the position to move to
    initial_homing2++;  // Decrease by 1 for next move if needed
    stepper2.run();  // Start moving the stepper
    delay(5);
    }

    stepper2.setCurrentPosition(0);  // Set the current position as zero for now
    stepper2.setMaxSpeed(5000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
    stepper2.setAcceleration(100.0);  // Set Acceleration of Stepper
    initial_homing2=1;

    while (!digitalRead(Endschalter2)) { // Make the Stepper move CW until the switch is deactivated
    stepper2.moveTo(initial_homing2);  
    stepper2.run();
    initial_homing2--;
    delay(5);
    }
if (nextion.available() > 0)
{
  daten_display += char (nextion.read());
  }


if (daten_display == "BCL")
    {
    Weg1 = -7500.0;
    Weg2 = -5000.0;
    Weg3 = 0;
    Weg4 = -15000.0;
    Weg5 = 1000;
    }
    delay(1000);  
    stepper1.setMaxSpeed(5000.0);      // Set Max Speed of Stepper (Faster for regular movements)
    stepper1.setAcceleration(500.0);
    stepper1.runToNewPosition(Weg1);
    delay(1000);
    stepper2.setMaxSpeed(5000.0);      // Set Max Speed of Stepper (Faster for regular movements)
    stepper2.setAcceleration(500.0);
    stepper2.runToNewPosition(Weg2);
    delay(500); 
    stepper2.setMaxSpeed(5000.0);      // Set Max Speed of Stepper (Faster for regular movements)
    stepper2.setAcceleration(500.0);
    stepper2.runToNewPosition(Weg3);
    delay(1000);   
    stepper1.setMaxSpeed(5000.0);      // Set Max Speed of Stepper (Faster for regular movements)
    stepper1.setAcceleration(500.0);
    stepper1.runToNewPosition(Weg4);
    delay(1000);
    analogWrite(Pumpe1_rechtslauf, 0);
    analogWrite(Pumpe1_linkslauf, 255);
    delay(1000);
    analogWrite(Pumpe1_rechtslauf, 0);
    analogWrite(Pumpe1_linkslauf, 0);
    delay(1000);
    analogWrite(Pumpe1_rechtslauf, 255);
    analogWrite(Pumpe1_linkslauf, 0);
    delay(1000);
    analogWrite(Pumpe1_rechtslauf, 0);
    analogWrite(Pumpe1_linkslauf, 0);
    delay(1000);
    analogWrite(Pumpe2_rechtslauf, 0);
    analogWrite(Pumpe2_linkslauf, 255);
    delay(1000);
    analogWrite(Pumpe2_rechtslauf, 0);
    analogWrite(Pumpe2_linkslauf, 0);
    delay(1000);
    analogWrite(Pumpe2_rechtslauf, 255);
    analogWrite(Pumpe2_linkslauf, 0);
    delay(1000);
    analogWrite(Pumpe2_rechtslauf, 0);
    analogWrite(Pumpe2_linkslauf, 0);
    delay(1000);
    stepper1.setMaxSpeed(5000.0);      // Set Max Speed of Stepper (Faster for regular movements)
    stepper1.runToNewPosition(Weg5);
    stepper1.setAcceleration(500.0);
    stepper1.run();
    stepper2.run();

}
}




  

Hallo, ohne jetzt großartig in den Sketch eingestiegen zu sein, vermute ich dein Problem liegt an den zahlreichen delays, die du verwendest.
Die solltest du durch eine Funktion mit millis() ersetzen.
Sieh dir dazu das Beispiel BlinkWithoutDelay in der IDE an.

1 Like

Und das ist in der loop auch ein NoGo.

Baue eine / mehrere richtige Statemaschienen.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.