Hallo,
also Ich habe irgendwie auch ein Verständnisproblem mit diesem Nextion… . Habe auch schon etwas zum laufen gebracht, allerdings nicht mein Projekt.
Es handelt sich um einen Dual Inkremental Decoder. Dieser funktioniert im Debug Modus einwandfrei. Habe jetzt einmal probiert diesen Code auf das Nextion umzuschreiben ---- ohne Erfolg.
Genutzt wird ein MEGA
Hier mal der Code ohne Nextion :
// HH191 MFD TX RS232 (2 Hz @ 57600)
int encoderPin1 = 2;
int encoderPin2 = 3;
int encoderPin3 = 5;
int encoderPin4 = 4;
int RESETLZ1=6;
int RESETLZ1WERT = 0;
int RESETLZ2=7;
int RESETLZ2WERT = 0;
volatile int lastEncoded = 0;
volatile long encoderValue = 0;
volatile int lastEncodedA = 0;
volatile long encoderValueA = 0;
long lastencoderValue = 0;
long lastencoderValueA = 0;
int lastMSB = 0;
int lastLSB = 0;
int lastMSBA = 0;
int lastLSBA = 0;
void setup() {
// 57600 Bps
Serial.begin (57600);
pinMode(encoderPin1, INPUT);
pinMode(encoderPin2, INPUT);
pinMode(encoderPin3, INPUT);
pinMode(encoderPin4, INPUT);
pinMode(RESETLZ1,INPUT);
pinMode(RESETLZ2,INPUT);
digitalWrite(encoderPin1, HIGH);
digitalWrite(encoderPin2, HIGH);
digitalWrite(RESETLZ1, HIGH);
digitalWrite(RESETLZ2, HIGH);
digitalWrite(encoderPin3, HIGH);
digitalWrite(encoderPin4, HIGH);
attachInterrupt(0, updateEncoder, CHANGE);
attachInterrupt(1, updateEncoder, CHANGE);
attachInterrupt(2, updateEncoder, CHANGE);
attachInterrupt(3, updateEncoder, CHANGE);
}
void loop(){
RESETLZ1WERT=digitalRead(RESETLZ1);
if (RESETLZ1WERT == LOW) encoderValue = 0; // Wenn Eingang 6 (RESETLZ1 auf “0”, dann Zähler rücksetzen)
RESETLZ2WERT=digitalRead(RESETLZ2);
if (RESETLZ2WERT == LOW) encoderValueA = 0; // Wenn Eingang 7 (RESETLZ2 auf “0”, dann Zähler rücksetzen)
Serial.print (“LZ1 (KW500) = “);
Serial.print (encoderValue*(1.0/40.0*40.0/40.0), 1.0);Serial.print (” m”);
Serial.print (" LZ2 (DPS) = “);
Serial.print (encoderValueA*(0.1/80.0*40.0), 1.0);Serial.print (” m");
delay(125); //500ms (2 Hz)
}
void updateEncoder(){
int MSB = digitalRead(encoderPin1);
int LSB = digitalRead(encoderPin2);
int encoded = (MSB << 1) |LSB;
int sum = (lastEncoded << 2) | encoded;
if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++;
if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue --;
lastEncoded = encoded;
int MSBA = digitalRead(encoderPin3);
int LSBA = digitalRead(encoderPin4);
int encodedA = (MSBA << 1) |LSBA;
int sumA = (lastEncodedA << 2) | encodedA;
if(sumA == 0b1101 || sumA == 0b0100 || sumA == 0b0010 || sumA == 0b1011) encoderValueA ++;
if(sumA == 0b1110 || sumA == 0b0111 || sumA == 0b0001 || sumA == 0b1000) encoderValueA --;
lastEncodedA = encodedA;
//store this value for next time
}
Funktioniert ohne Probleme. Anbei die Nextion Oberfläche. Ausgegeben soll Dezimal mit Komma (also wie bisher).
Vielleicht kann mir ja jemand helfen.
