nextion problem

Guten Tag allerseits,

ich habe ein Problem mit dem Nextion und der library, und zwar immer wenn ich Serial.print an das Nextion sende.

Ich habe 5 LEDs mittels millis(), demnach sollen nur die LEDs angehen welche ich am nextion ausgewählt habe, was auch super funktioniert, nun möchte ich aber ein Ladebalken hinzufügen. Was auch funktioniert, nur nicht so sehr wie ich es möchte. Wenn zb led 3 dann 4 und 5 angeht, soll nach einander für die Zeit der prozentstatus an das Nextion gesendet werden, dass ich auch gemacht habe, nur gibt es dann ein kleines Problem, die LEDs gehen für ca. 100ms ganz kurz aus und wieder an, wenn ich das ganze über die Serielle Schnittstelle zu Nextion sende. Ist in der Library irgendwo ein delay eingebaut? Wenn man über die Serielle Schnittstelle Daten sendet?

(deleted)

siehe PM :slight_smile:

Es wäre sinnvoll, wenn Du Deinen Sketch hier im Forum veröffentlichen würdest. Hilfe vom Forum willst Du ja auch. Der Sinn eines Forums ist die öffentliche Diskussion von Problemstellungen, nicht die Diskussion per PM.

Gruß Tommy

Ja versteh ich auch, nur, mein Code ist knapp 8000 Zeilen lang, da die gewünschte Funktionen herauszusuchen sollte Zeit in Anspruch nehmen.

deswegen war erstmal die Frage ob es in der Library irgendwo ein Delay gibt, dass die Serielle Kommunikation ausbremst.

Cazzz:
Ja versteh ich auch, nur, mein Code ist knapp 8000 Zeilen lang, da die gewünschte Funktionen herauszusuchen sollte Zeit in Anspruch nehmen.

Dann wäre es sinnvoll, den Code auf eine Minimalversion zu kürzen, die das Problem zeigt.
Mit der Nextion-Lib arbeitet hier fast keiner, da deren Qualität eher minimal ist.

Gruß Tommy

Ok ich versuche es, danke schonmal vorab für die hilfe

void STARTPopCallback(void *ptr)
{
  Millis = millis();
  led1 = 1;
  led2 = 1;
  led3 = 1;
  led4 = 1;
  led5 = 1;
  varGO = 0;
}

void StartGO()
{
  if (varGO == 0)
  {
    Aus1();
    Aus2();
    Aus3();
    Aus4();
    Aus5();
  }
}

void Aus1()
{
  if (millis() - Millis >= Intervall1 && stopp1 == true)
  {
    prozentvar = 20;
    prozent();
    led1 = 0;
    stopp1 = false;
  }
}

void Aus2()
{
  if (millis() - Millis >= Intervall2 && stopp2 == true)
  {
    prozentvar = 40;
    prozent();
    led2 = 0;
    stopp2 = false;
  }
}

void Aus3()
{
  if (millis() - Millis >= Intervall3 && stopp3 == true)
  {
    prozentvar = 60;
    prozent();
    led3 = 0;
    stopp3 = false;
  }
}

void Aus4()
{
  if (millis() - Millis >= Intervall4 && stopp4 == true)
  {
    prozentvar = 80;
    prozent();
    led4 = 0;
    stopp4 = false;
  }
}

void Aus5()
{
  if (millis() - Millis >= Intervall5 && stopp5 == true)
  {
    prozentvar = 100;
    prozent();
    led5 = 0;
    stopp5 = false;
  }
}

void prozent()                                        // Befehl zum senden an Touchscreen ueber nexSerial ( Fortschrittbalken )
{
  nexSerial.print("page0.j0.val=");
  nexSerial.print(prozentvar);
  nexSerial.write(0xff);
  nexSerial.write(0xff);
  nexSerial.write(0xff);
  nexSerial.print("page.n0.val=");
  nexSerial.print(prozentvar);
  nexSerial.write(0xff);
  nexSerial.write(0xff);
  nexSerial.write(0xff);
}

void leds()
{
  if (varGO == 0)
  {
    if (led1 == 1)
    {
      digitalWrite(8, HIGH);
    }
    if (led1 == 0)
    {
      digitalWrite(8, LOW);
    }
    if (led2 == 1)
    {
      digitalWrite(9, HIGH);
    }
    if (led2 == 0)
    {
      digitalWrite(9, LOW);
    }
    if (led3 == 1)
    {
      digitalWrite(10, HIGH);
    }
    if (led3 == 0)
    {
      digitalWrite(10, LOW);
    }
    if (led4 == 1)
    {
      digitalWrite(11, HIGH);
    }
    if (led4 == 0)
    {
      digitalWrite(11, LOW);
    }
    if (led5 == 1)
    {
      digitalWrite(12, HIGH);
    }
    if (led5 == 0)
    {
      digitalWrite(12, LOW);
    }
    if (stopp1 == false && stopp2 == false && stopp3 == false && stopp4 == false && stopp5 == false)
    {
      varGO = 1;
      sendCommand("page finish");
    }
  }
}


void setup()
{
  Serial.begin(9600);
  nexSerial.begin(512000);
  nexInit();
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
}

void loop()
{
  leds();
  StartGO();
}

die deklarationen der Variablen habe ich mal bei Seite gelassen vom Nextion und allgemein, es funktioniert alles bis auf dass mir die LED's kurz aufblinken also aus und an gehen, wenn ich die Funktion prozent(); ausführe, da hier Serial.print drin steckt.

ich hoffe ihr könnt mir dabei weiterhelfen

Also compilierbar sollte der Sketch schon sein. Wie sollen wir ohne Deklaration der Variablen wissen, von welchem Typ sie sind?

Gruß Tommy

unsigned long Millis;
unsigned long Intervall1;
unsigned long Intervall2;
unsigned long Intervall3;
unsigned long Intervall4;
unsigned long Intervall5;

bool stopp1 = false;
bool stopp2 = false;
bool stopp3 = false;
bool stopp4 = false;
bool stopp5 = false;

int prozentvar = 0;
int led1 = 0;
int led2 = 0;
int led3 = 0;
int led4 = 0;
int led5 = 0;

void STARTPopCallback(void *ptr)
{
  Millis = millis();
  led1 = 1;
  led2 = 1;
  led3 = 1;
  led4 = 1;
  led5 = 1;
  varGO = 0;
}

void StartGO()
{
  if (varGO == 0)
  {
    Aus1();
    Aus2();
    Aus3();
    Aus4();
    Aus5();
  }
}

void Aus1()
{
  if (millis() - Millis >= Intervall1 && stopp1 == true)
  {
    prozentvar = 20;
    prozent();
    led1 = 0;
    stopp1 = false;
  }
}

void Aus2()
{
  if (millis() - Millis >= Intervall2 && stopp2 == true)
  {
    prozentvar = 40;
    prozent();
    led2 = 0;
    stopp2 = false;
  }
}

void Aus3()
{
  if (millis() - Millis >= Intervall3 && stopp3 == true)
  {
    prozentvar = 60;
    prozent();
    led3 = 0;
    stopp3 = false;
  }
}

void Aus4()
{
  if (millis() - Millis >= Intervall4 && stopp4 == true)
  {
    prozentvar = 80;
    prozent();
    led4 = 0;
    stopp4 = false;
  }
}

void Aus5()
{
  if (millis() - Millis >= Intervall5 && stopp5 == true)
  {
    prozentvar = 100;
    prozent();
    led5 = 0;
    stopp5 = false;
  }
}

void prozent()                                        // Befehl zum senden an Touchscreen ueber nexSerial ( Fortschrittbalken )
{
  nexSerial.print("page0.j0.val=");
  nexSerial.print(prozentvar);
  nexSerial.write(0xff);
  nexSerial.write(0xff);
  nexSerial.write(0xff);
  nexSerial.print("page.n0.val=");
  nexSerial.print(prozentvar);
  nexSerial.write(0xff);
  nexSerial.write(0xff);
  nexSerial.write(0xff);
}

void leds()
{
  if (varGO == 0)
  {
    if (led1 == 1)
    {
      digitalWrite(8, HIGH);
    }
    if (led1 == 0)
    {
      digitalWrite(8, LOW);
    }
    if (led2 == 1)
    {
      digitalWrite(9, HIGH);
    }
    if (led2 == 0)
    {
      digitalWrite(9, LOW);
    }
    if (led3 == 1)
    {
      digitalWrite(10, HIGH);
    }
    if (led3 == 0)
    {
      digitalWrite(10, LOW);
    }
    if (led4 == 1)
    {
      digitalWrite(11, HIGH);
    }
    if (led4 == 0)
    {
      digitalWrite(11, LOW);
    }
    if (led5 == 1)
    {
      digitalWrite(12, HIGH);
    }
    if (led5 == 0)
    {
      digitalWrite(12, LOW);
    }
    if (stopp1 == false && stopp2 == false && stopp3 == false && stopp4 == false && stopp5 == false)
    {
      varGO = 1;
      sendCommand("page finish");
    }
  }
}


void setup()
{
  Serial.begin(9600);
  nexSerial.begin(512000);
  nexInit();
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
}

void loop()
{
  leds();
  StartGO();
}

hier nun aber wie gesagt compilierbar ist es auch, und funktioniert, nur habe ich das problem dass die LEDs kurz aus und wieder angehen, aber auch nur wenn ich die funktion prozent(); mit einbinde.

Deswegen habe ich mir gedacht dass für euch die Variablen Deklarationen eher unwichtig sei.

(deleted)

nexSerial.begin(512000);

Da nexSerial wohl ein SoftwareSerial sein dürfte, erscheint mir die Baudrate extrem zu hoch.
Wie bereits gesagt, ich arbeite nicht mit dieser Lib.

Gruß Tommy

Hallo Cazzz,
das mit dem delay in der Library kannst du doch einfach selbst herausfinden, indem du in der Library nachschaust.

Zudem ist es sehr schwer für außenstehende deinen Sketch zu lesen und zu verstehen, da du keine Kommentare im Sketch hast, die uns einigermaßen erklären, was da passieren soll. Dann noch die "nichtssagenden" Variablennamen, die erschweren ein Verstehen zusätzlich.

Da solltest du nochmal nachbessern, wenn wir helfen sollen.