Hi Andreas,
nett dass Du nicht aufgibst und mir weiter helfen willst...
...ein großes DANKE dafür!
Also,
das Script hab ich jetzt von allem befreit, was fürs Nokia gedacht war und im seriellen Monitor zeigt das Teil auch alles so an wie es sein soll.
Zum Verständnis hab ich da noch im Script Marker mit eingefügt, damit ich sehe ob das Ergebnis aus so passt wie es soll.
/* Arduino Mega 2560
* Schrittmotor - Steuerung für Sensorpositionierung
*/
// Laden der Baugruppenbibliotheken
#include <Keypad.h> // Keypad Library
#include <AccelStepper.h> // AccelStepper Library
// 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 );
// 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);
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
drawnextionscreen(displayvalue); // Wiederaufbau Nextion LCD Display
Serial.println(displayvalue);
} 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
drawnextionscreen(displayvalue); // Wiederaufbau Nextion LCD Display
Serial.println(displayvalue);
} 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
drawnextionscreen(displayvalue); // Wiederaufbau Nextion LCD Display
Serial.println(displayvalue);
} else { // Prüfen ob vierte Ziffer eingegeben wurde
vierteziffer=x;
String displayvalue = (String(ersteziffer) + String(zweiteziffer) + String(dritteziffer) + String(vierteziffer));
drawnextionscreen(displayvalue);
Serial.println(displayvalue);
}
}
}
}
void deletenumber() { // löscht die letzte eingegebene Ziffer
if (vierteziffer !=99) {
String displayvalue = String(ersteziffer) + String(zweiteziffer) + String(dritteziffer);
drawnextionscreen(displayvalue); // Wiederaufbau Nextion LCD Display
Serial.println(displayvalue);
vierteziffer=99;
}
else {
if (dritteziffer !=99) {
String displayvalue = String(ersteziffer) + String(zweiteziffer);
drawnextionscreen(displayvalue); // Wiederaufbau Nextion LCD Display
Serial.println(displayvalue);
dritteziffer=99;
}
else {
if (zweiteziffer !=99) {
String displayvalue = String(ersteziffer);
drawnextionscreen(displayvalue); // Wiederaufbau Nextion LCD Display
Serial.println(displayvalue);
zweiteziffer=99;
}
else {
if (ersteziffer !=99) {
String displayvalue = "";
drawnextionscreen(displayvalue); // Wiederaufbau Nextion LCD Display
Serial.println(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(long z) { // Startet Schrittmotor
long calculatedmove=((z*1600)/40); // Berechnet die Schrittzahl anhand der neuen Eingabe
stepper.runToNewPosition(calculatedmove);
baer = String(z);
Serial.print("IST - Position ");
Serial.print(baer);
Serial.print(" /");
}
void resetnumbers() { // Löschen der letzten Zahl
ersteziffer=99;
zweiteziffer=99;
dritteziffer=99;
vierteziffer=99;
}
// Anzeige der aktuellen Position des Baers
void drawnextionscreen(String y) {
Serial.print("Eingabe ");
Serial.print(y);
Serial.print(" /");
Serial.print("SOLL - Position ");
Serial.print(baer);
Serial.print(" /");
}
Wenn ich nun mit dem Keypad Werte eingebe, Zeigt mir der Serial Monitor:
Eingabe 8 /SOLL - Position /8
Eingabe 80 /SOLL - Position /80
IST - Position 80 /Eingabe 4 /SOLL - Position 80 /4
Eingabe 40 /SOLL - Position 80 /40
Eingabe 400 /SOLL - Position 80 /400
IST - Position 400 /Eingabe 0 /SOLL - Position 400 /0
IST - Position 0 /Eingabe 5 /SOLL - Position 0 /5
Eingabe 50 /SOLL - Position 0 /50
IST - Position 50 /Eingabe 4 /SOLL - Position 50 /4
Eingabe 40 /SOLL - Position 50 /40
Eingabe 400 /SOLL - Position 50 /400
Eingabe 40 /SOLL - Position 50 /40
Eingabe 4 /SOLL - Position 50 /4
Eingabe /SOLL - Position 50 /
Eingabe 8 /SOLL - Position 50 /8
Eingabe 80 /SOLL - Position 50 /80
Eingabe 800 /SOLL - Position 50 /800
IST - Position 800 /Eingabe 6 /SOLL - Position 800 /6
Eingabe 60 /SOLL - Position 800 /60
IST - Position 60 /Eingabe 5 /SOLL - Position 60 /5
IST - Position 5 /Eingabe 6 /SOLL - Position 5 /6
Eingabe 60 /SOLL - Position 5 /60
IST - Position 60 /Eingabe 0 /SOLL - Position 60 /0
IST - Position 0 /
In der ersten Zeile hab ich als 1. Ziffer "8", als 2. Ziffer "0" eingegeben (siehe "Eingabe ", der Wert "80" wird korrekt berechnet und angezeigt, nach der Zeit für das Verfahren des Schrittmotors wird die "80" in der "IST - Position" angezeigt. Alle weiteren Eingaben wurden ebenfalls korrekt berechnet und angezeigt.
Wie schon weiter oben erwähnt, hab ich die Anzeigeseite für das Nextion mit zwei Textfeldern "t0" und "t1" versehen, die lassen sich aber auch schnell in etwas anderes ändern...
Wie krieg ich nun die Werte aufs Nextion?
Schonmal im Voraus ein wiederholtes großes DANKE!
Freddie,
der jetzt nicht mehr ganz hoffnungslos ist...