Arduino-Nextion-MPU Daten senden, während der Bedienung

Hallo Leute,
ich sende an des Nextion fortlaufend MPU Daten und betätige eine Schaltfläche, diese wirkt als Taster "HIGH" im GEDRÜCKTEN Zustand, ungedrückt "LOW" . Beide Funktionen laufen einzeln problemlos, in Kombination werden die MPU Daten übertragen, verhindern jedoch die Nutzung der Tastfläche. Sicher ganz einfach zu lösen, ich finde als Frischling aber keinen Ansatz. Ich habe die vermutlich relevanten Zeilen mal mit ?????????????? markiert.

[code]
#include "Wire.h"
#include <MPU6050_light.h>
#include <SoftwareSerial.h>

//Nextion
SoftwareSerial nextion(10, 11); // RX, TX
String daten_display = "";

//Taster
bool help1, help2, help3, help4;

// Gyroanbindung
double mpuX = 0; //Hilfsvariable
double mpuY = 0;
int X_offset = 32;  // X
int Y_offset = -61; //Y
int mapX ; //umgerechneter Ganzzahlenwert
int mapXX ; //umgerechneter Ganzzahlenwert zweites Fenster auf dem Nextion
int mapY ; //umgerechneter Ganzzahlenwert
int mapYY ; //umgerechneter Ganzzahlenwert zweites Fenster

MPU6050 mpu(Wire);
unsigned long timer = 0;

void setup() {
  Serial.begin(9600);
  nextion.begin(9600);
  Wire.begin();
  byte status = mpu.begin();

  pinMode( 43 , OUTPUT);//Kopfteil heben
  pinMode( 45 , OUTPUT);//Kopfteil senken

  pinMode(7, INPUT);//INPUT_PULLUP
  pinMode(8, INPUT);

}
void loop()
{
  //MPU_Sensor
  mpu.update();

  mpuX = mpu.getAngleX() * 100;
  mapX = map(mpuX, -9000.00, 9000.00, -900, 900);
  mapX = mapX + X_offset;

  mpuY = mpu.getAngleY() * 100;
  mapY = map(mpuY, -9000.00, 9000.00, -900, 900);
  mapY = mapY + Y_offset;

  mapXX = mapX;
  mapYY = mapY;

  if ((millis() - timer) > 10) { // print data every 10ms //??????????????
    nextion.print("mapX.val=");
    nextion.print(mapX);
    nextion.write(0xFF);
    nextion.write(0xFF);
    nextion.write(0xFF);
    //    delay(50);
    nextion.print("mapXX.val=") ;
    nextion.print(mapXX);
    nextion.write(0xFF);
    nextion.write(0xFF);
    nextion.write(0xFF);
    //   delay(50);
    nextion.print("mapY.val=");
    nextion.print(mapY);
    nextion.write(0xFF);
    nextion.write(0xFF);
    nextion.write(0xFF);
    //   delay(50);
    nextion.print("mapYY.val=") ;
    nextion.print(mapYY);
    nextion.write(0xFF);
    nextion.write(0xFF);
    nextion.write(0xFF);
    delay(50);
    timer = millis();
    //
    //        Serial.print("\tY : ");
    //        Serial.print(mpu.getAngleY());
    //        Serial.print("\tX : ");
    //        Serial.print(mpu.getAngleX());
    //        Serial.print("\tmpuY : "   );
    //        Serial.print(mpuY);
    //        Serial.print("\tmapX : "   );
    //        Serial.print(mapX);
    //        Serial.print("\tmapY : "   );
    //        Serial.println(mapY);
    //
  }
  delay(10);
  
  if (nextion.available() > 0 ) {          //??????????!!!!!!!!!!!!
    daten_display += char (nextion.read());//??????????!!!!!!!!!!!!
  }

  //  Kopfteil heben
  if (daten_display == "kopfauf1") {
    Serial.println("Kopfteil heben on");
    delay(10);
    help1 = HIGH;
    daten_display = "";
  }
  if (daten_display == "kopfauf0") {
    Serial.println("Kopfteil heben off");
    delay(10);
    help1 = LOW;
    daten_display = "";
  }
  help2 = digitalRead(7);

  if ( help1 | help2) {
    digitalWrite( 43 , HIGH );
  }
  else digitalWrite(43, LOW);

  //  Kopfteil senken
  if (daten_display == "kopfab1") {
    Serial.println("Kopfteil senken on");
    delay(10);
    help3 = HIGH;
    daten_display = "";
  }
  if (daten_display == "kopfab0") {
    Serial.println("Kopfteil senken off");
    delay(10);
    help3 = LOW;
    daten_display = "";
  }
  help4 = digitalRead(8);

  if ( help3 | help4) {
    digitalWrite( 45 , HIGH );
  }
  else digitalWrite(45, LOW);

  delay (10);

}
[/code]

Das wird auch nicht einfach sein, zumindest nicht mit SoftwareSerial.
Da musst du komplett auf HardwareSerial umsteigen und einen Mega dazu verwenden.

ok, das ist ev. kein Problem, ich nutze bereits einen Mega und der gewöhnlich RX(0) TX(1) ist frei (und die übrigen auch)

Sind sie nicht! Die sind für die Verbindung zum PC. Nimm eine der Anderen seriellen Schnittstellen.

Gruß Tommy

1 Like

Die übrigen sind Ok und sollten dann auch funktionieren.
Da das in Hardware implementiert ist, wird es vermutlich auch funktionieren.
Ich habe es allerdings bisher noch nicht getestet.

1 Like

ah, danke für die Info

gut, dann versuche ich das mal

Hallo Tommy, hallo Dieter,
ich danke Euch, es funktioniert.

Prima, danke für deine Rückmeldung.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.