Arduino Nextion was mache ich falsch ???

Hallo

also ich habe jetzt folgendes Problem

#include <Nextion.h>

const int led = 13;

// Deklarieren Sie Ihre Nextion-Objekte, die Seiten-ID, die Komponenten-ID und den Komponentennamen
NexButton b0 = NexButton(0,2,"b0");
NexButton b1 = NexButton(0,3,"b1");
NexButton b2 = NexButton(0,6,"b2"); // von mir hinzugefügt 
NexButton b3 = NexButton(0,7,"b3"); // von mir hinzugefügt 
NexText t0 = NexText(0,4,"t0");


//Registrieren Sie ein Schaltflächenobjekt in der Kontaktereignisliste
NexTouch *nex_listen_list[] = {
  &b0,
  &b1,
  &b2,  // von mir hinzugefügt 
  &b3,  // von mir hinzugefügt 
  NULL
};




// Taste b0 Popcallback-Funktion der Komponente
// Wenn die EIN-Taste losgelassen wird, leuchtet die LED und der Zustandstext ändert sich



void b0PopCallback(void *ptr){
  t0.setText ("State:ON");
  digitalWrite(led,HIGH);
}

void b2PopCallback(void *ptr){  // von mir hinzugefügt 
  t0.setText ("State:ON1");        // von mir hinzugefügt 
  digitalWrite(led,HIGH);            // von mir hinzugefügt 
}

//Popcallback-Funktion der Taste b1
//Wenn die AUS-Taste losgelassen wird, erlischt die LED und der Zustandstext ändert sich

void b1PopCallback(void *ptr){
  t0.setText ("State:OFF");
  digitalWrite(led,LOW);
}

void b3PopCallback(void *ptr){     // von mir hinzugefügt 
  t0.setText ("State:OFF1");          // von mir hinzugefügt 
  digitalWrite(led,LOW);                // von mir hinzugefügt 
}   




void setup(void) {
  Serial.begin(9600);
  nexInit();
  
//Registrieren Sie die Pop-Event-Callback-Funktion der Komponenten
  b0.attachPop(b0PopCallback,&b0);
  b1.attachPop(b1PopCallback,&b1);
  b2.attachPop(b1PopCallback,&b2);     // von mir hinzugefügt 
  b3.attachPop(b1PopCallback,&b3);     // von mir hinzugefügt 
  pinMode(led,OUTPUT);
  digitalWrite(led,LOW);

}

void loop() {
  nexLoop(nex_listen_list); 

}

so nun funktionieren die nicht von mir hinzugefügten Buttons
aber die zwei Buttons von mir funktionieren nicht
was mache ich falsch
ich sehe da kein unterschied

kann mir einer sagen warum die einen gehen und die zwei die ich dazu geschrieben habe nicht

LG
Max

b0.attachPop(b0PopCallback,&b0);
  b1.attachPop(b1PopCallback,&b1);
  b2.attachPop(b1PopCallback,&b2);     // von mir hinzugefügt
  b3.attachPop(b1PopCallback,&b3);

Du hast 3 mal "b1PopCallback"

Grüße Uwe

AHA ok das habe ich also übersehen

Super Danke schön !!
jetzt funktioniert es

LG
Max

OK und wider ein neues Problem o man

soweit geht jetzt alles

aber wie bekomme ich das hin das wen ich Button bt4 auf HIGH stelle das dann automatisch der Button bt5 deaktiviert wird so das der ohne Funktion ist bis ich bt4 wider auf LOW habe

hab das mit digitalWrite LOW versucht aber das funktioniert so nicht wie ich das meine

#include <Nextion.h>



const int Relay1 = 7;  
const int Relay2 = 8;
const int Relay3 = 9;
const int Relay4 = 10;
const int co2A = 11;
const int co2M = 12;



  NexDSButton bt0 = NexDSButton(4, 5, "bt0");  // Dual state button added
  NexDSButton bt1 = NexDSButton(4, 1, "bt1");  // Dual state button added
  NexDSButton bt2 = NexDSButton(4, 2, "bt2");  // Dual state button added
  NexDSButton bt3 = NexDSButton(4, 3, "bt3");  // Dual state button added
  NexDSButton bt4 = NexDSButton(2, 1, "bt4");  // Dual state button added
  NexDSButton bt5 = NexDSButton(2, 2, "bt5");  // Dual state button added



  NexTouch *nex_listen_list[] = {
  &bt0,  // Dual state button added
  &bt1,  // Dual state button added
  &bt2,  // Dual state button added
  &bt3,  // Dual state button added
  &bt4,  // Dual state button added
  &bt5,  // Dual state button added
  NULL
};


void bt0PopCallback(void *ptr)  // Release event for dual state button bt0
{
  uint32_t number5 = 0;  // Create variable to store value we are going to get
  bt0.getValue(&number5);  // Read value of dual state button to know the state (0 or 1)

  if(number5 == 1){  // If dual state button is equal to 1 (meaning is ON)...
    digitalWrite(7, LOW);  // Turn ON internal LED
  }else{  // Since the dual state button is OFF...
    digitalWrite(7, HIGH);  // Turn OFF internal LED
  }
}  // End of release event

void bt1PopCallback(void *ptr)  // Release event for dual state button bt0
{
  uint32_t number5 = 0;  // Create variable to store value we are going to get
  bt1.getValue(&number5);  // Read value of dual state button to know the state (0 or 1)

  if(number5 == 1){  // If dual state button is equal to 1 (meaning is ON)...
    digitalWrite(8, LOW);  // Turn ON internal LED
  }else{  // Since the dual state button is OFF...
    digitalWrite(8, HIGH);  // Turn OFF internal LED
  }
}  // End of release event

void bt2PopCallback(void *ptr)  // Release event for dual state button bt0
{
  uint32_t number5 = 0;  // Create variable to store value we are going to get
  bt2.getValue(&number5);  // Read value of dual state button to know the state (0 or 1)

  if(number5 == 1){  // If dual state button is equal to 1 (meaning is ON)...
    digitalWrite(9, LOW);  // Turn ON internal LED
  }else{  // Since the dual state button is OFF...
    digitalWrite(9, HIGH);  // Turn OFF internal LED
  }
}  // End of release event

  
  void bt3PopCallback(void *ptr)  // Release event for dual state button bt0
{
  uint32_t number5 = 0;  // Create variable to store value we are going to get
  bt3.getValue(&number5);  // Read value of dual state button to know the state (0 or 1)

  if(number5 == 1){  // If dual state button is equal to 1 (meaning is ON)...
    digitalWrite(10, LOW);  // Turn ON internal LED
  }else{  // Since the dual state button is OFF...
    digitalWrite(10, HIGH);  // Turn OFF internal LED
  }
}  // End of release event



void bt4PopCallback(void *ptr)  // Release event for dual state button bt0
{
  uint32_t number5 = 0;  // Create variable to store value we are going to get
  bt4.getValue(&number5);  // Read value of dual state button to know the state (0 or 1)

  if(number5 == 1){  // If dual state button is equal to 1 (meaning is ON)...
    digitalWrite(12, LOW);
    digitalWrite(11, HIGH);
  }else{  // Since the dual state button is OFF...
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);  // Turn OFF internal LED
  }
}  // End of release event


void bt5PopCallback(void *ptr)  // Release event for dual state button bt0
{
  uint32_t number5 = 0;  // Create variable to store value we are going to get
  bt5.getValue(&number5);  // Read value of dual state button to know the state (0 or 1)

  if(number5 == 1){  // If dual state button is equal to 1 (meaning is ON)...
    digitalWrite(12, HIGH);  // Turn ON internal LED
  }else{  // Since the dual state button is OFF...
    digitalWrite(12, LOW);  // Turn OFF internal LED
  }
}  // End of release event


void setup() {



  bt0.attachPop(bt0PopCallback);  // Dual state button bt0 release
  bt1.attachPop(bt1PopCallback);  // Dual state button bt0 release
  bt2.attachPop(bt2PopCallback);  // Dual state button bt0 release
  bt3.attachPop(bt3PopCallback);  // Dual state button bt0 release
  bt4.attachPop(bt4PopCallback);  // Dual state button bt0 release
  bt5.attachPop(bt5PopCallback);  // Dual state button bt0 release
 
  Serial.begin(9600);  
  pinMode(Relay1,OUTPUT);                      
  pinMode(Relay2,OUTPUT);
  pinMode(Relay3,OUTPUT);                      
  pinMode(Relay4,OUTPUT);
  pinMode(co2A,OUTPUT);
  pinMode(co2M,OUTPUT);
  
 

}
void loop(){      
  nexLoop(nex_listen_list); 
}

Du musst mit einer if-Abfrage die Auswertung des Button bt5 unterbinden, wenn bt4 auf High ist.

Schade das du dich wieder auf die Nextion-Lib versteift hast. Das zeigt mir, dass du unsere Vorschläge und Hilfen ignorierst und wieder nach dem alten Schema weitermachst.

"Schade das du dich wieder auf die Nextion-Lib verstreift hast. Das zeigt mir, dass du unsere Vorschläge und Hilfen ignorierst und wieder nach dem alten Schema weitermachst."

ich versuche nur jeden weg zu gehen um mein Projekt umzusetzen
z,B. habe ich es nicht geschafft ohne Nextion-Lib den Dual Button so einzustellen das der als an und aus schalter funktioniert
und so habe ich das wenigstens geschafft.

LG
Max

Warum fragst du dann nicht im alten Thread? Ich hatte dir die 2 wichtigsten Möglichkeiten gezeigt, anhand dessen hätte wir weiter aufbauen können. Hast du dir eigentlich mal den Nextion Editor genauer angeschaut, oder die Nextion instructions?

Wenn du im Editor das jeweilige Element anklickst, siehst du rechts alle verfügbaren Attribute und meisten Werte kannst du dazu per Serial.print() ändern, so wie ich es dir mit .txt und .val gezeigt hatte.

Mit anderen Worten:

 Serial.print("page0.bt0.val=1"); //Button aktiviert
  Serial.print("page0.bt0.val=0"); //Button deaktiviert

bt0 musst du nur an deine Bezeichnung anpassen.

Nur zur Bestätigung:
Falsch ist, dass du eine schlecht dokumentierte und selten verwendete Library einsetzt.

Die meisten User hier setzen das Nextion ohne die Nextion Library ein.
Und sind glücklich damit.

echt ich kapiere das nicht
und überall wo ich nach Anleitungen suche überall wird die Nextion Lib verwendet

ohne Lib geht irgenwie Garnichts so richtig

na ja

eine frage habe ich noch :slight_smile:
wie bekomme ich das hin, das beim start des Arduinos
die Pins alle ausgeschaltet sind und ich erst durch drucken auf dem Nextion die einzelnen pins einschalte

wen ich einfach pinMode(mein pin,LOW);
setze kann ich dann nichts mehr schalten

und so sind alle an

LG
Max

Alle Pins sind beim Start Input. Das kannst Du auch nicht für alle Pins bvon außerhalb ändern. Mindestens die seriellen Pins müssen schon funktionieren, um Infos vom Nextion zu bekommen.

Gruß Tommy

Du kennst den Unterschied zwischen pinMode(mein pin,LOW); und digitalWrite(mein pin,LOW); ?

ShadowMJ:
echt ich kapiere das nicht
und überall wo ich nach Anleitungen suche überall wird die Nextion Lib verwendet

ohne Lib geht irgenwie Garnichts so richtig

Dann suchst du falsch. Hier im Forum wurde dieses Thema schon oft behandelt.
Suche einfach mal mit der Lupe, oben rechts.

eine frage habe ich noch :slight_smile:
wie bekomme ich das hin, das beim start des Arduinos
die Pins alle ausgeschaltet sind und ich erst durch drucken auf dem Nextion die einzelnen pins einschalte

wen ich einfach pinMode(mein pin,LOW);
setze kann ich dann nichts mehr schalten

und so sind alle an

Was genau haben die Pins mit dem Nextion zu tun ?
Das Nextion wird doch über die serielle Schnittstelle bedient.
Also die Hardware Serial1 bis Serial3 beim Mega oder beim Uno/Nano/Pro mini per SoftwareSerial.

Da musst du dann die Pins bestimmen, die du verwenden möchtest, aber ohne die irgend wie vorzubelegen.

AHA ok also wen ich oben rechts mit der Lupe suche kommen nur Google Ergebnis raus

Und bitte auch die Fragen beachten.

ShadowMJ:
AHA ok also wen ich oben rechts mit der Lupe suche kommen nur Google Ergebnis raus

Das Forum nutzt Google für die Suche, aber nur auf der eigenen Seite (site:https://forum.arduino.cc).

HotSystems:
Was genau haben die Pins mit dem Nextion zu tun ?
Das Nextion wird doch über die serielle Schnittstelle bedient.
Also die Hardware Serial1 bis Serial3 beim Mega oder beim Uno/Nano/Pro mini per SoftwareSerial.

Da musst du dann die Pins bestimmen, die du verwenden möchtest, aber ohne die irgend wie vorzubelegen.

ja an sich ja nichts nur die pins sind beim start sofort alle an und ich möchte das die zu erst aus sind und ich die dann mit dem Nextion erst einschalte

LG
Max

Wie oft willst du den µC den aus- und einschalten? Ich verstehe den Sinn dahinter auch nicht wirklich. Was verleitet sich denn zu dem Wunsch?

Hi

Die Pins sind 'AN'??
Wie äußert sich Das?

Die Pins sind beim Start INPUT, also 'hängen in der Luft' - Da kann Alles mögliche drauf sein - sowohl Deutschland-Funk, wie Deine Wetterstation spielen hier mit rein.

Erst Dein setup() stellt die Pins ein - vorher helfen Dir nur externe Pull-Widerstände, ein definierten Pegel zu erhalten.
Spätestens nach dem setup() sollten alle Pins (offene INPUTs sind bäh) einen festen Pegel haben, also entweder OUTPUT, INPUT_PULLUP oder durch die Beschaltung selber.

Da ist nix 'AN' - denke, Die schaltet irgend ein LOW-aktives Relais, wenn Du im setup() den Pin auf OUTPUT stellst - wenn -> Erst digitalWrite(x,HIGH); dann pinMode(x,OUTPUT); - dann klappert auch nix, weil der Pin HIGH geht (PullUP) und dann erst auf OUT umgeschaltet wird - Das erkennt das externe Relais vor dem Umschalten NICHT als LOW und zuckt dann auch nicht.

MfG

ShadowMJ:
ja an sich ja nichts nur die pins sind beim start sofort alle an und ich möchte das die zu erst aus sind und ich die dann mit dem Nextion erst einschalte

LG
Max

Das wurde dir doch auch schon geschrieben. Im Setup auf LOW setzen.
Danach kannst du die dann weiter bearbeiten.