Start a new topic

no changing of pages...

My Problem:


I have a sensor tray driven by a stepper.

After turning it on, there is a time to pass to show an intro on the display after this there is a second page, which shows information, that the tray is doing a reference drive. Then another page is shown with two empty text-fields: one for the input and one for the calculated and driven distance.

The input from the keypad is calculated/ processed from single digits being entered one after the other to a 4-digit number, it shows the travelling distance in 1/10ths of a mm. This number is displayed in the first the two text fields. After calculating the steps for the stepper and waiting the time for the stepper to move, the number is displayed in the second text field and the first field is emptied. The program waits for the next input.

As you can see in the code below, I deactivated the code itself (it is the code working with the Nokia LCD), but left my first tries to show the different pages just after short time. I tried all three serials of my Mega, but nothing happens on the screen. Compiling runs through with no errors and the uploading is the same.


Someone out there to help me?



 

 

#include <Nextion.h>
#include <NexPage.h>

/*
#include <Keypad.h> //Keypad Library
#include <AccelStepper.h> // AccelStepper Library
#include <U8glib.h> // Nokia 5110 LCD Display Library//
*/

#define at_serial Serial3

NexPage page0 = NexPage(0, 0, "page0");
NexPage page1 = NexPage(0, 0, "page1");
NexPage page2 = NexPage(0, 0, "page2");



/*
volatile int ersteziffer=99;
volatile int zweiteziffer=99;
volatile int dritteziffer=99;
volatile int vierteziffer=99;

int eingabe=0; //speichert die berechnete Eingabe
String baer = ""; //Position Baer


const byte ROWS = 4; //4 Reihen
const byte COLS = 4; // 4 Spalten
char keys[ROWS][COLS] = {
  {'1','2','3','F'},
  {'4','5','6','E'},
  {'7','8','9','D'},
  {'A','0','B','C'}
};
byte rowPins[ROWS] = {22, 24, 26, 28};
byte colPins[COLS] = {31, 33, 35, 37};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );



//U8glib Setup für  Nokia 5110 LCD Display
#define backlight_pin 11
U8GLIB_PCD8544 u8g(3, 4, 6, 5, 7);  // Arduino Pins verbunden mit Nokia Pins, CLK=3, DIN=4, CE=6, DC=5, RST=7
                                   
                                    
// AccelStepper Treiber Setup
AccelStepper stepper(1, A0, A1); // 1 = Easy Driver Interface, Arduino A0 verbunden mit STEP Pin von Easy Driver, Arduino A1 verbunden mit DIR Pin von Easy Driver
*/
void setup() {
  // put your setup code here, to run once:
  
NexPage page0 = NexPage (0, 0, "page0");

delay(500);

}


/*  
  Serial.begin(9600);
  
//analogWrite(backlight_pin, 0);  // Dimmen der Hintergrundbeleuchtung  (0=Hell, 255=Dunkel)
  
  u8g.firstPage();
  do {
  u8g.drawHLine(0, 0, 84);
  u8g.drawHLine(0, 47, 84); 
  u8g.setFont(u8g_font_profont10);
  u8g.drawStr(5, 10, "Sensorsteuerung");
  u8g.setFont(u8g_font_profont11);
  u8g.drawStr(10, 21, "HSP Mod. IV");
  u8g.setFont(u8g_font_profont10);
  u8g.drawStr(21, 33, "(C) 2016");  
  u8g.drawStr(0, 44, "Frithjof Guettler");
  }
  while( u8g.nextPage() );

  delay(5000);
  
u8g.firstPage();
  do {
  u8g.drawHLine(0, 15, 84);
  u8g.drawVLine(50, 16, 38);
  u8g.drawHLine(0, 32, 84); 
  u8g.setFont(u8g_font_profont10);
  u8g.drawStr(2, 10, "Eingabe Distanz");
  u8g.drawStr(62, 27, "MM");
  u8g.drawStr(0, 44, "Baer-Pos.");
  }
  while( u8g.nextPage() );
  
}

*/
void loop() {
  // put your main code here, to run repeatedly:



NexPage page1 = NexPage (1, 0, "page1");

delay(500);

NexPage page2 = NexPage (1, 0, "page2");

delay(500);

}

/*
  char keypressed = keypad.getKey();  // Get value of keypad button if pressed
  if (keypressed != NO_KEY){  // If keypad button pressed check which key it was
    switch (keypressed) {
      
      case '1':
        checknumber(1);
      break;
        
      case '2':
        checknumber(2);
      break;
 
      case '3':
        checknumber(3);
      break;
 
      case 'F':
        checknumber(780);
      break;
      
      case '4':
        checknumber(4);
      break;
      
      case '5':
        checknumber(5);
      break;
 
      case '6':
        checknumber(6);
      break;
 
      case 'E':
        checknumber(850);
      break;

      case '7':
        checknumber(7);
      break;
       
      case '8':
        checknumber(8);
      break;
 
      case '9':
        checknumber(9);
      break;
 
      case 'D':
        checknumber(1000);
      break;
 
      case 'A':
        deletenumber();
      break;

      case '0':
        checknumber(0);
      break;      

      case 'B':
        calculatedistance();
      break;      
 
      case 'C':
        checknumber(1250);
      break;
    }
  }
}

void checknumber(int x){
  if (ersteziffer == 99) { // Prüfen ob erste Ziffer eingegeben wurde
    ersteziffer=x;
    String displayvalue = String(ersteziffer);  //  Wandelt die Eingabe in einen String um
    drawnokiascreen(displayvalue); // Wiederaufbau Nokia 5110 LCD Display
    
  } else {
  if (zweiteziffer == 99) { // Prüfen ob zweite Ziffer eingegeben wurde
    zweiteziffer=x;    String displayvalue = String (ersteziffer) + String(zweiteziffer);  //  Wandelt die Eingabe in einen String um
    drawnokiascreen(displayvalue); // Wiederaufbau Nokia 5110 LCD Display 

  } else {
  if (dritteziffer == 99) { // Prüfen ob dritte Ziffer eingegeben wurde
    dritteziffer=x;
    String displayvalue = String (ersteziffer) + String(zweiteziffer) + String(dritteziffer);  //  Wandelt die Eingabe in einen String um
    drawnokiascreen(displayvalue); // Wiederaufbau Nokia 5110 LCD Display 

    
  } else {  // Prüfen ob vierte Ziffer eingegeben wurde
      vierteziffer=x;
      String displayvalue = (String(ersteziffer) + String(zweiteziffer) + String(dritteziffer) + String(vierteziffer));
      drawnokiascreen(displayvalue);

      }
    }
  }
}

void deletenumber() {  // löscht die letzte eingegebene Ziffer
  if (vierteziffer !=99) {
      String displayvalue = String(ersteziffer) + String(zweiteziffer) + String(dritteziffer);
      drawnokiascreen(displayvalue);
 
      vierteziffer=99;
  } 
  else {
    if (dritteziffer !=99) {
      String displayvalue = String(ersteziffer) + String(zweiteziffer);
      drawnokiascreen(displayvalue);
 
      dritteziffer=99;
   } 
  else {
    if (zweiteziffer !=99) {
      String displayvalue = String(ersteziffer);
      drawnokiascreen(displayvalue);
 
      zweiteziffer=99;
   }  
  else {
     if (ersteziffer !=99) {
       String displayvalue = "";
       drawnokiascreen(displayvalue);
 
       ersteziffer=99;
        }
      }
    }
  }
}

void calculatedistance() {  // Berechnet aus den eingegebenen Ziffern eine bis zu 4-stellige Zahl
 
    if (vierteziffer == 99 && dritteziffer == 99 && zweiteziffer == 99 && ersteziffer != 99) {
      eingabe=ersteziffer;
      movestepper(eingabe);
    }

     if (zweiteziffer != 99 && dritteziffer == 99) {
      eingabe=(ersteziffer*10)+zweiteziffer;
      movestepper(eingabe);
    }

     if (dritteziffer != 99 && vierteziffer == 99) {
      eingabe=(ersteziffer*100)+(zweiteziffer*10)+dritteziffer;
      movestepper(eingabe);
    }

     if (vierteziffer != 99) {
      eingabe=(ersteziffer*1000)+(zweiteziffer*100)+(dritteziffer*10)+vierteziffer;
      movestepper(eingabe);
    }
    
    resetnumbers(); // Löscht die letzte Eingabe
  }

void movestepper(int z) {  //  Startet Schrittmotor
 
  int calculatedmove=((z*1600)/80);  //  Berechnet die Schrittzahl für die neue Eingabe
  stepper.runToNewPosition(calculatedmove);
  baer = String(z);
  u8g.firstPage();
    do {
      u8g.drawHLine(0, 15, 84);
      u8g.drawVLine(50, 16, 38);
      u8g.drawHLine(0, 32, 84); 
      u8g.setFont(u8g_font_profont10);
      u8g.drawStr(2, 10, "Eingabe Distanz");
      u8g.drawStr(62, 27, "MM");
      u8g.drawStr(0, 44, "Baer-Pos.");
      u8g.setPrintPos(54,46);
      u8g.print(baer); // Zeigt die aktuelle Position des Bärs an      
  }
  while( u8g.nextPage() ); 
}

void resetnumbers() {  // Löschen der letzten Zahl
  ersteziffer=99;
  zweiteziffer=99;
  dritteziffer=99;
  vierteziffer=99;
}


 void drawnokiascreen(String y) {
 
    u8g.firstPage();
    do {
      u8g.drawHLine(0, 15, 84);
      u8g.drawVLine(50, 16, 38);
      u8g.drawHLine(0, 32, 84); 
      u8g.setFont(u8g_font_profont10);
      u8g.drawStr(2, 10, "Eingabe Distanz");
      u8g.setPrintPos(0,27);
      u8g.print(y); //Zeigt eingegebene Distanz an     
      u8g.drawStr(62, 27, "MM");
      u8g.drawStr(0, 44, "Baer-Pos.");
      u8g.setPrintPos(54,46);
      u8g.print(baer); // Zeigt die aktuelle Position des Bärs an
    }
      while( u8g.nextPage() );
  
}

*/

 

 

 

 


tft
(1.03 MB)
HMI
(991 KB)
ino
(7.37 KB)

Sorry for the triple input of the code...
must have pressed the button a several times...

 

PS: I removed 2nd copy of code for you.


   NexPage page2 = NexPage (1, 0, "page2");


This defines MCU side variable page2 for Nextion side "page2" of type NexPage

   but you have errors in parameters to constructor, these need match HMI values


Format of declaration:

  Type variablename = type_contructor(pageno, compid, "objname");

 

#include Nextion

NexPage page0 = NexPage (0, 0, "page0");
NexPage page1 = NexPage (1, 0, "page1");
NexPage page2 = NexPage (2, 0, "page2");

NexTouch * nex_listen_list[] = {
   NULL
};

void setup(void) {
  nexInit();
}

void loop(void) {
  nexLoop(nex_listen_list);
  page0.show();
  delay(2000);
  page1.show();
  delay(2000);
  page2.show();
  delay(2000);
}

 


Hi Patrick,

Thank you for the help!
Inbetween the posts I was studying the code once more and came to the script posted below...
Now it does exactely what I want, what I have to solve now, ist to show the variables "y" and"baer" to the text fields implemented on page2.
Hope I find my way to the solution...
I´m freaking happy that I came so far, sure, with a little help, but I´m really happy!!!

 

// Definieren der Libraries

#include "Nextion.h"




NexPage page0    = NexPage(0, 0, "page0");  // Startseite mit Hinweis auf Verwendung
NexPage page1    = NexPage(1, 0, "page1");  // Hinweis auf die Verzögerung des Starts wegen Referenzfahrt und Nullpunktabgleich
NexPage page2    = NexPage(2, 0, "page2");  // Eingabeseite der Bärposition

// Hinweisseite für Test, in der endgültigen Fassung löschen!
NexPage page3    = NexPage(3, 0, "page3");


NexTouch *nex_listen_list[] = 
{
    NULL
};


void setup(void)
{   
    nexInit();
    
    page0.show();
    delay(2500);
    page1.show();
    delay(2500);
    
}

void loop(void)
{

    page2.show();

}

 Thx so far


Freddie

 

Note: setup will only run once at startup, loop() runs continuously.

So for understanding your code above tells the MCU to

// do setup

- go to page 0

- go to page 1

// do loop

- go to page 2

- go to page 2

- go to page 2

- go to page 2

- go to page 2

- go to page 2

 ...


Hi Patrick,

I´m working on the code right now...
The old script with the Nokia Display needed a continously recall of drawing the screen, to take effect of the changes of the variables.
How does the Nextion HMI react? Is it ok, if I only call the page2 in the 'void setup' as last page and in the 'void loop', where I had to call the redrawing of the screen, only change the calculated content of the two text-fields like:
y.txt=("eingabe")
baer.txt=("baer")

Freddie

 

Probably better tio understand:

old script with Nokia LCD


// do setup

- go to page 0

- go to page 1

// do loop

- go to page 2

- input

- redraw page2

- input

- redraw page2

....

New script with Nextion:

// do setup

- go to page 0

- go to page 1

- go to page 2

// do loop

- input

- write variables to text-fields

- input

- write variables to text-fields

 ...

 

What will be the right way?


Freddie

Setup a NexText variable similar to how NexPage is set

 - you need page number and component .id  of Nextion side Text Component.

for example t0 on page 1 with .id of 2 and t1 on page 1 with .id of 4


NexText y = NexText(1, 2, "t0");

NexText baer = NexText(1, 4, "t1");


Then

  y.setText("eingabe");

  baer.setText("baer");


Nextion auto refreshes component space (x,y) to (x+w-1,y+h-1) each change


I will try to implement this in my script later, my granddaughter just wants me to enjoy dinner with her...
As soon as I tried I will let you knaow!

Thank you very much helping me on my problem!!!

Freddie

 

Hmm, jjust before I will forget...
the code:

NexText y = NexText(1, 2, "t0");

NexText baer = NexText(1, 4, "t1");

will be put right under the NexPage stuff


and the code:

  y.setText("eingabe");

  baer.setText("baer");

will be put there, where the step for redrawing the Screen and changing the variables was?


Freddie

 

It sounds like it should work well

Well,
dinner is over, I started another try...
...and tried to put both codes together, step by step, using the "try and error method".
I
  • inserted the definition of the libraries, compiled, no errors => good
  • defined the 'NexText' as
    NexText t0 = NexText(2, 1, "t0"); // page2, id1, t0
    NexText t1 = NexText(2, 2, "t1"); // page2, id2, t1; compiled, no errors => good
  • left all other code in the script for not loosing the path; compiled, no errors => good
  • inserted all the way at the end of the script the 'setText' as
    t0.setText("Eingabe");
    t1.setText("Distanz"); compiled, no errors => good
  • already thought that the part witth the setText is at the wrong place, but I wnted to give it a try..

After this, I uploaded the code and tried...

...the screens appeared as they should, but on the display it showed right after the first keystroke


in the text-field t0: "Eingabe"; just the word...

in the text-field t1: "Distanz"; just the word...

and no other keystroke was displayed: bad...

...sad... because it started pretty good.


Well for sitting at this problem for at least 6 hours now I quit for today and try again tomorrow...

...I might miss the wood for the trees...


By the way Patrick is english your native tongue? I changed the german parts of the script into english, it´s probably a better understanding of what´s going on in my script...


 

// Definieren der Libraries

#include "Nextion.h"
#include <Keypad.h> //Keypad Library
#include <AccelStepper.h> // AccelStepper Library
#include <U8glib.h> // Nokia 5110 LCD Display Library//


// Definieren der Seiten für Nextion 3.5"

NexPage page0    = NexPage(0, 0, "page0");  // Startseite mit Hinweis auf Verwendung
NexPage page1    = NexPage(1, 0, "page1");  // Hinweis auf die Verzögerung des Starts wegen Referenzfahrt und Nullpunktabgleich
NexPage page2    = NexPage(2, 0, "page2");  // Eingabeseite der Bärposition

// Hinweisseite für Test, in der endgültigen Fassung löschen!
NexPage page3    = NexPage(3, 0, "page3");


NexText t0 = NexText(2, 1, "t0");
NexText t1 = NexText(2, 2, "t1");


NexTouch *nex_listen_list[] = 
{
    NULL
};


// Definieren der Variablen für die Berechnung

int keyfullnumber=0;  //speichert die berechnete Eingabe
String currentposition = "";  //Position Baer


// Definieren der Eingabeverarbeitung

volatile int firstnumber=99;
volatile int secondnumber=99;
volatile int thirdnumber=99;
volatile int fourthnumber=99;


// Setup der Keypadbelegung und definieren der Pin-Beschaltung

const byte ROWS = 4;  //4 Reihen
const byte COLS = 4;  // 4 Spalten
char keys[ROWS][COLS] = {
  {'1','2','3','F'},
  {'4','5','6','E'},
  {'7','8','9','D'},
  {'A','0','B','C'}
};
byte rowPins[ROWS] = {22, 24, 26, 28};
byte colPins[COLS] = {31, 33, 35, 37};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


// U8glib Setup für  Nokia 5110 LCD Display

#define backlight_pin 11
U8GLIB_PCD8544 u8g(3, 4, 6, 5, 7);  // Arduino Pins verbunden mit Nokia Pins, CLK=3, DIN=4, CE=6, DC=5, RST=7
                                   
                                    
// Setup für den AccelStepper Treiber

AccelStepper stepper(1, A0, A1);  // 1 = Easy Driver Interface, Arduino A0 verbunden mit STEP Pin von Easy Driver, Arduino A1 verbunden mit DIR Pin von Easy Driver


void setup(void)
{   
    Serial.begin(9600);
    nexInit();


// Die Zeiten bei den zwei folgenden Delays sind für die Anzeigeverzögerung auf einen passenden Wert zu ändern!   
 
    page0.show();  // Startseite nach dem Einschalten
    delay(2500);
    
    page1.show();  // Hinweisseite für Referenzfahrt und Nullpunktabgleich
    delay(2500);

    page2.show();
}

void loop(void)
{
  char keypressed = keypad.getKey();  // Get value of keypad button if pressed
  if (keypressed != NO_KEY){  // If keypad button pressed check which key it was
    switch (keypressed) {
      
      case '1':
        checknumber(1);
      break;
        
      case '2':
        checknumber(2);
      break;
 
      case '3':
        checknumber(3);
      break;
 
      case 'F':
        checknumber(780);
      break;
      
      case '4':
        checknumber(4);
      break;
      
      case '5':
        checknumber(5);
      break;
 
      case '6':
        checknumber(6);
      break;
 
      case 'E':
        checknumber(850);
      break;

      case '7':
        checknumber(7);
      break;
       
      case '8':
        checknumber(8);
      break;
 
      case '9':
        checknumber(9);
      break;
 
      case 'D':
        checknumber(1000);
      break;
 
      case 'A':
        deletenumber();
      break;

      case '0':
        checknumber(0);
      break;      

      case 'B':
        calculatedistance();
      break;      
 
      case 'C':
        checknumber(1250);
      break;
    }
  }
}

void checknumber(int x){
  if (firstnumber == 99) { // Prüfen ob erste Ziffer eingegeben wurde
    firstnumber=x;
    String displayvalue = String(firstnumber);  //  Wandelt die Eingabe in einen String um
    drawnokiascreen(displayvalue); // Wiederaufbau Nokia 5110 LCD Display
    
  } else {
  if (secondnumber == 99) { // Prüfen ob zweite Ziffer eingegeben wurde
    secondnumber=x;    String displayvalue = String (firstnumber) + String(secondnumber);  //  Wandelt die Eingabe in einen String um
    drawnokiascreen(displayvalue); // Wiederaufbau Nokia 5110 LCD Display 

  } else {
  if (thirdnumber == 99) { // Prüfen ob dritte Ziffer eingegeben wurde
    thirdnumber=x;
    String displayvalue = String (firstnumber) + String(secondnumber) + String(thirdnumber);  //  Wandelt die Eingabe in einen String um
    drawnokiascreen(displayvalue); // Wiederaufbau Nokia 5110 LCD Display 

    
  } else {  // Prüfen ob vierte Ziffer eingegeben wurde
      fourthnumber=x;
      String displayvalue = (String(firstnumber) + String(secondnumber) + String(thirdnumber) + String(fourthnumber));
      drawnokiascreen(displayvalue);

      }
    }
  }
}

void deletenumber() {  // löscht die letzte eingegebene Ziffer
  if (fourthnumber !=99) {
      String displayvalue = String(firstnumber) + String(secondnumber) + String(thirdnumber);
      drawnokiascreen(displayvalue);
 
      fourthnumber=99;
  } 
  else {
    if (thirdnumber !=99) {
      String displayvalue = String(firstnumber) + String(secondnumber);
      drawnokiascreen(displayvalue);
 
      thirdnumber=99;
   } 
  else {
    if (secondnumber !=99) {
      String displayvalue = String(firstnumber);
      drawnokiascreen(displayvalue);
 
      secondnumber=99;
   }  
  else {
     if (firstnumber !=99) {
       String displayvalue = "";
       drawnokiascreen(displayvalue);
 
       firstnumber=99;
        }
      }
    }
  }
}

void calculatedistance() {  // Berechnet aus den eingegebenen Ziffern eine bis zu 4-stellige Zahl
 
    if (fourthnumber == 99 && thirdnumber == 99 && secondnumber == 99 && fourthnumber != 99) {
      keyfullnumber=firstnumber;
      movestepper(keyfullnumber);
    }

     if (secondnumber != 99 && thirdnumber == 99) {
      keyfullnumber=(firstnumber*10)+secondnumber;
      movestepper(keyfullnumber);
    }

     if (thirdnumber != 99 && fourthnumber == 99) {
      keyfullnumber=(firstnumber*100)+(secondnumber*10)+thirdnumber;
      movestepper(keyfullnumber);
    }

     if (fourthnumber != 99) {
      keyfullnumber=(firstnumber*1000)+(secondnumber*100)+(thirdnumber*10)+fourthnumber;
      movestepper(keyfullnumber);
    }
    
    resetnumbers(); // Löscht die letzte Eingabe
  }

void movestepper(int z) {  //  Startet Schrittmotor
 
  int calculatedmove=((z*1600)/80);  //  Berechnet die Schrittzahl für die neue Eingabe
  stepper.runToNewPosition(calculatedmove);
  currentposition = String(z);

  u8g.firstPage();
    do {
      u8g.drawHLine(0, 15, 84);
      u8g.drawVLine(50, 16, 38);
      u8g.drawHLine(0, 32, 84); 
      u8g.setFont(u8g_font_profont10);
      u8g.drawStr(2, 10, "enter distance");
      u8g.drawStr(62, 27, "mm");
      u8g.drawStr(0, 44, "cur-pos");
      u8g.setPrintPos(54,46);
      u8g.print(currentposition); // Zeigt die aktuelle Position des Bärs an      
  }
  while( u8g.nextPage() ); 


  t1.setText("baer");
}

void resetnumbers() {  // Löschen der letzten Zahl
  firstnumber=99;
  secondnumber=99;
  thirdnumber=99;
  fourthnumber=99;
}


 void drawnokiascreen(String y) {
 
    u8g.firstPage();
    do {
      u8g.drawHLine(0, 15, 84);
      u8g.drawVLine(50, 16, 38);
      u8g.drawHLine(0, 32, 84); 
      u8g.setFont(u8g_font_profont10);
      u8g.drawStr(2, 10, "enter distance");
      u8g.setPrintPos(0,27);
      
      u8g.print(y); //Zeigt eingegebene Distanz an  
         
      u8g.drawStr(62, 27, "mm");
      u8g.drawStr(0, 44, "cur-pos");
      u8g.setPrintPos(54,46);
      
      u8g.print(currentposition); // Zeigt die aktuelle Position des Bärs an
      
    }
      while( u8g.nextPage() );


    t0.setText("enter distance");
    t1.setText("currentposition");    

 }

 I didn´t change the comments though, as they are just comments.


Good night from Germany...


Freddie

Just one thing before I turn the machine off:

When I type in a number eg. "150" every single keytroke shows up at the position "enter distance" what will be for the Nextion (page2, id1, t0). After the key "B" being pressed, the script will calculate the steps, send it to the stepper and as the stepper moved to the new position, the value from "enter distance" will be sent to the "currentposition" what will be for the Nextion (page2, id2, t1) and the field "enter distance" will be cleared.
A stroke on the key a will erase the last number entered, a stroke again will erase the next number ...


That´s it for tonight


Freddie

 

Well, yesterday during trying I set a bug in my script which bothered me quiet a while. I took care of it this morning and checked the script working togehter with the electronic. Now I have it the way that it moves the stepper to the desired position, the only thing missing is showing the input at the t0 text field and the calculated distance in t1.
...I´m working on it...

Freddie

 

OK, got the Nextion as far that it will show text sas formatted in the brackets, if I change it to the variables name I receive errors...
the code looks right now:

 

// Laden der Baugruppenbibliotheken
#include <Nextion.h>
#include <NexText.h>
#include <Keypad.h> //Keypad Library
#include "U8glib.h" // Nokia 5110 LCD Display Library
#include <AccelStepper.h> // AccelStepper Library


// Definieren der Seiten für Nextion 3.5"

NexPage page0    = NexPage(0, 0, "page0");  // Startseite mit Hinweis auf Verwendung
NexPage page1    = NexPage(1, 0, "page1");  // Hinweis auf die Verzögerung des Starts wegen Referenzfahrt und Nullpunktabgleich
NexPage page2    = NexPage(2, 0, "page2");  // Eingabeseite der Bärposition

// Hinweisseite für Test, in der endgültigen Fassung löschen!
//NexPage page3    = NexPage(3, 0, "page3");


NexText t0 = NexText(2, 1, "t0");
NexText t1 = NexText(2, 2, "t1");


NexTouch *nex_listen_list[] = 
{
    NULL
};


// Festlegen der Variablen
// Tastatur
volatile int ersteziffer=99;
volatile int zweiteziffer=99;
volatile int dritteziffer=99;
volatile int vierteziffer=99;

// Berechnung
long eingabe=0; //speichert die berechnete Eingabe
String baer = ""; //Position Baer

// Tastatur
const byte ROWS = 4; //4 Reihen
const byte COLS = 4; // 4 Spalten
char keys[ROWS][COLS] = {
  {'1','2','3','F'},
  {'4','5','6','E'},
  {'7','8','9','D'},
  {'A','0','B','C'}
};
byte rowPins[ROWS] = {22, 24, 26, 28};
byte colPins[COLS] = {31, 33, 35, 37};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );



// U8glib Setup für  Nokia 5110 LCD Display
#define backlight_pin 11
U8GLIB_PCD8544 u8g(3, 4, 6, 5, 7);  // Arduino Pins verbunden mit Nokia Pins, CLK=3, DIN=4, CE=6, DC=5, RST=7
                                    
                                    
// AccelStepper Treiber Setup
AccelStepper stepper(1, A0, A1); // 1 = Easy Driver Interface, Arduino A0 verbunden mit STEP Pin von Easy Driver, Arduino A1 verbunden mit DIR Pin von Easy Driver


// Programmvorbereitung
void setup() {

Serial.begin(9600);
   
    nexInit();

// Die Zeiten bei den zwei folgenden Delays sind für die Anzeigeverzögerung auf einen passenden Wert zu ändern!   
 
    page0.show();  // Startseite nach dem Einschalten
    delay(2500);
    
    page1.show();  // Hinweisseite für Referenzfahrt und Nullpunktabgleich
    delay(2500);

    page2.show();


//    t0.setText("enter distance");
//    t1.setText("currentposition");

  
//analogWrite(backlight_pin, 0);  // Dimmen der Hintergrundbeleuchtung  (0=Hell, 255=Dunkel)

  stepper.setMaxSpeed(4800);  // Setzt die Geschwindigkeit des Schrittmotors
  stepper.setAcceleration(2400);  //  Setzt die Beschleunigung des Schrittmotors  
}

// Programmabschnitt
void loop() {
  char keypressed = keypad.getKey();  // Welche Taste wurde gedrückt
  if (keypressed != NO_KEY){  // Übernahme des der gedrückten Taste hinterlegten Wertes
    switch (keypressed) {
      
      case '1':
        checknumber(1);
      break;
        
      case '2':
        checknumber(2);
      break;
 
      case '3':
        checknumber(3);
      break;
 
      case 'F':
        checknumber(780);
      break;
      
      case '4':
        checknumber(4);
      break;
      
      case '5':
        checknumber(5);
      break;
 
      case '6':
        checknumber(6);
      break;
 
      case 'E':
        checknumber(850);
      break;

      case '7':
        checknumber(7);
      break;
       
      case '8':
        checknumber(8);
      break;
 
      case '9':
        checknumber(9);
      break;
 
      case 'D':
        checknumber(1000);
      break;
 
      case 'A':
        deletenumber();
      break;

      case '0':
        checknumber(0);
      break;      

      case 'B':
        calculatedistance();
      break;      
 
      case 'C':
        checknumber(1250);
      break;
      }
    }
  }


// Aufbereiten der eingegebenen Ziffern zu einer 1-4 - stelligen Zahl
void checknumber(int x){
  if (ersteziffer == 99) { // Prüfen ob erste Ziffer eingegeben wurde
    ersteziffer=x;
    String displayvalue = String(ersteziffer);  //  Wandelt die Eingabe in einen String um

//    drawnokiascreen(displayvalue); // Wiederaufbau Nokia 5110 LCD Display

    t0.setText("1. Ziffer"); // Darstellen der Eingabe der ersten Ziffer
    
  } else {
  if (zweiteziffer == 99) { // Prüfen ob zweite Ziffer eingegeben wurde
    zweiteziffer=x;    String displayvalue = String (ersteziffer) + String(zweiteziffer);  //  Wandelt die Eingabe in einen String um
    
//    drawnokiascreen(displayvalue); // Wiederaufbau Nokia 5110 LCD Display 

    t0.setText("2. Ziffer"); // Darstellen der Eingabe der zweiten Ziffer    

  } else {
  if (dritteziffer == 99) { // Prüfen ob dritte Ziffer eingegeben wurde
    dritteziffer=x;
    String displayvalue = String (ersteziffer) + String(zweiteziffer) + String(dritteziffer);  //  Wandelt die Eingabe in einen String um
    
//    drawnokiascreen(displayvalue); // Wiederaufbau Nokia 5110 LCD Display 

    t0.setText("3. Ziffer"); // Darstellen der Eingabe der dritten Ziffer    

    
  } else {  // Prüfen ob vierte Ziffer eingegeben wurde
      vierteziffer=x;
      String displayvalue = (String(ersteziffer) + String(zweiteziffer) + String(dritteziffer) + String(vierteziffer));  //  Wandelt die Eingabe in einen String um
      
//      drawnokiascreen(displayvalue);

    t0.setText("4. Ziffer"); // Darstellen der Eingabe der vierten Ziffer      

      }
    }
  }
}

void deletenumber() {  // löscht die letzte eingegebene Ziffer
  if (vierteziffer !=99) {
      String displayvalue = String(ersteziffer) + String(zweiteziffer) + String(dritteziffer);
      
//      drawnokiascreen(displayvalue);

      t0.setText("del 4"); // Löschen der Eingabe der vierten Ziffer       
 
      vierteziffer=99;
  } 
  else {
    if (dritteziffer !=99) {
      String displayvalue = String(ersteziffer) + String(zweiteziffer);
      
//      drawnokiascreen(displayvalue);

      t0.setText("del 3"); // Löschen der Eingabe der dritten Ziffer      
 
      dritteziffer=99;
   } 
  else {
    if (zweiteziffer !=99) {
      String displayvalue = String(ersteziffer);
      
//      drawnokiascreen(displayvalue);

      t0.setText("del 2"); // Löschen der Eingabe der zweiten Ziffer      
 
      zweiteziffer=99;
   }  
  else {
     if (ersteziffer !=99) {
       String displayvalue = "";

//       drawnokiascreen(displayvalue);

       t0.setText("t0"); // Löschen der Eingabe der ersten Ziffer       
 
       ersteziffer=99;
        }
      }
    }
  }
}

void calculatedistance() {  // Berechnet aus den eingegebenen Ziffern eine bis zu 4-stellige Zahl
 
    if (vierteziffer == 99 && dritteziffer == 99 && zweiteziffer == 99 && ersteziffer != 99) {
      eingabe=ersteziffer;
      movestepper(eingabe);
    }

     if (zweiteziffer != 99 && dritteziffer == 99) {
      eingabe=(ersteziffer*10)+zweiteziffer;
      movestepper(eingabe);
    }

     if (dritteziffer != 99 && vierteziffer == 99) {
      eingabe=(ersteziffer*100)+(zweiteziffer*10)+dritteziffer;
      movestepper(eingabe);
    }

     if (vierteziffer != 99) {
      eingabe=(ersteziffer*1000)+(zweiteziffer*100)+(dritteziffer*10)+vierteziffer;
      movestepper(eingabe);
    }
    
//    resetnumbers(); // Löscht die letzte Eingabe

       t0.setText("t0");    
  }

void movestepper(long z) {  //  Startet Schrittmotor
 
  long calculatedmove=((z*1600)/40);  //  Berechnet die Schrittzahl anhand der neuen Eingabe
  stepper.runToNewPosition(calculatedmove);
  baer = String(z);
      
      t1.setText("POSITION"); // Zeigt die aktuelle Position des Bärs auf dem Nextion an  
  }


void resetnumbers() {  // Löschen der letzten Zahl
  ersteziffer=99;
  zweiteziffer=99;
  dritteziffer=99;
  vierteziffer=99;
  
}

// Anzeige der aktuellen Position des Baers
 void drawnokiascreen(String y) {
 
      t0.setText("t0");
      t1.setText("POSITION");

   
}

I´m lost again...

It´s working but I dont get the display to show the calculated numbers...


Freddie

 

Login or Signup to post a comment