RPLidar Daten Probleme!

Hallo! Wer mein vorherigen Beitrag gelesen hat weiß, dass ich Probleme mit der Kommunikation mit einem RPLidar hatte, nun diese habe ich so halbwegs hinbekommen und jetzt stellt sich bei mir eine neue Frage...
Ich benutze ein Arduino Uno und das ist der Code:

#include <RPLidar.h>
// You need to create an driver instance
RPLidar lidar;

// The PWM pin for control the speed of RPLIDAR's motor.
// This pin should connected with the RPLIDAR's MOTOCTRL signal
#define RPLIDAR_MOTOR 3

bool transmit = false;
byte incomingByte;
int x = 0;
int y = 0;

void setup()
{
  // bind the RPLIDAR driver to the arduino hardware serial
  Serial.begin(115200);
  lidar.begin(Serial);

  // initialize both serial ports:
  Serial.begin(115200);    // Initialize Native USB port

  // set pin modes
  pinMode(RPLIDAR_MOTOR, OUTPUT);
  analogWrite(RPLIDAR_MOTOR, 255);
}

void loop() {
  if (IS_OK(lidar.waitPoint()))
  {
    float distance = lidar.getCurrentPoint().distance; //distance value in mm unit
    float angle    = lidar.getCurrentPoint().angle; //anglue value in degree
    bool  startBit = lidar.getCurrentPoint().startBit; //whether this point is belong to a new scan
    byte  quality  = lidar.getCurrentPoint().quality; //quality of the current measurement

    if (Serial.available() > 0)
    {
      incomingByte = Serial.read();
      transmit = !transmit;
    }

    //Serial.print("dist: ");
    Serial.print(distance);
    Serial.print(";");
    //Serial.print("\tangle: ");
    Serial.print(angle);
    Serial.print(";");
    //Serial.print("\tsbit: ");
    //Serial.print(startBit);
    //Serial.print(";");
    //Serial.print("\tquality: ");
    Serial.print(quality);
    Serial.print("\n");

  }

  else
  {
    analogWrite(RPLIDAR_MOTOR, 0); //stop the rplidar motor

    // try to detect RPLIDAR...
    rplidar_response_device_info_t info;
    if (IS_OK(lidar.getDeviceInfo(info, 100)))
    {
      // detected...
      lidar.startScan();

      // start motor rotating at max allowed speed
      analogWrite(RPLIDAR_MOTOR, 255);
      delay(1000);
    }
  }
}

Nun spuckt mein serieller Monitor Werte aus aber auch viel zu viele 0.00 Werte zwischendurch, was ich nicht verstehe! Das sieht wie folgt aus:
Screenshot (2)

Und diesen Fehler muss ich dringend behoben kriegen, da es überhaupt nicht Hilfreich dafür ist dass später mein Staubsaugroboter bzw. die Motoren auf die Messungen reagieren soll und bei einer Bestimmten Distanz zu einem Hinderniss ein umfahren dafür geplant ist!

Vielen dank im vorraus für eure Hilfe!

Welcher MC, Wie ist die Schaltung?

Gruß Tommy

Wie ist die Schaltung?
RPLIDAR

Du benutzt immer noch nur EINE serielle Schnittstelle. Du musst Softwareserial benutzen!

Habe damit leider kein vertrauen, ich werde es mir anschauen! Bist du dir da denn sicher?

Und warum machst du für dein Problem einen zweiten Thread auf ?
Du hast doch im Ersten schon Antworten erhalten. Oder gefallen dir diese nicht.

ich sagte dass ich mein anderes problem so rellativ gelöst habe, nur das ein NEUES augetaucht ist unswar die vielen 0en

Du hast immer noch das Problem mit der seriellen Kommunikation und hast die Vorschläge im Ersten ignoriert.
Daher kann ich kein neues erkennen.

Ich habe es eben als neues gesehen da ich vorher überhaupt keine Zahlen hatte! Tut mir ja leid, aber so intensiv immer auf einen Fehler gleich einzugehen statt einfach höflich vielleicht wieder den selben Tipp zu geben und ein hinweis darauf geben ist auch nicht das beste! Ich habe ja immerhin oben gesagt das ich das als neues problem empfinde! Aber ist okey ich werde es ausprobieren!

#include <RPLidar.h> // https://github.com/robopeak/rplidar_arduino
#include "SoftwareSerial.h"
SoftwareSerial lidarSerial(4, 5); // RX, TX

// You need to create an driver instance
RPLidar lidar;

// The PWM pin for control the speed of RPLIDAR's motor.
// This pin should connected with the RPLIDAR's MOTOCTRL signal
constexpr byte RPLIDAR_MOTOR {3};

bool transmit = false;
byte incomingByte;
int x = 0;
int y = 0;

void setup()
{
  // bind the RPLIDAR driver to the arduino hardware serial
  lidarSerial.begin(115200);
  lidar.begin(lidarSerial);
  // initialize both serial ports:
  Serial.begin(115200);    // Initialize Native USB port
  // set pin modes
  pinMode(RPLIDAR_MOTOR, OUTPUT);
  analogWrite(RPLIDAR_MOTOR, 255);
}

void loop()
{
  if (IS_OK(lidar.waitPoint()))
  {
    float distance = lidar.getCurrentPoint().distance; //distance value in mm unit
    float angle    = lidar.getCurrentPoint().angle; //anglue value in degree
    bool  startBit = lidar.getCurrentPoint().startBit; //whether this point is belong to a new scan
    byte  quality  = lidar.getCurrentPoint().quality; //quality of the current measurement
    if (Serial.available() > 0)
    {
      incomingByte = Serial.read();
      transmit = !transmit;
    }
    //Serial.print("dist: ");
    Serial.print(distance);
    Serial.print(";");
    //Serial.print("\tangle: ");
    Serial.print(angle);
    Serial.print(";");
    //Serial.print("\tsbit: ");
    //Serial.print(startBit);
    //Serial.print(";");
    //Serial.print("\tquality: ");
    Serial.print(quality);
    Serial.print("\n");
  }
  else
  {
    analogWrite(RPLIDAR_MOTOR, 0); //stop the rplidar motor
    // try to detect RPLIDAR...
    rplidar_response_device_info_t info;
    if (IS_OK(lidar.getDeviceInfo(info, 100)))
    {
      // detected...
      lidar.startScan();
      // start motor rotating at max allowed speed
      analogWrite(RPLIDAR_MOTOR, 255);
      delay(1000);
    }
  }
}

Und jetzt zerfleischt Euch alle.

Bitte was ?
Du fragst doch nach Hilfe, also müssen wir doch auf deine Fehler eingehen.

danke dir, kann ich jeden Beliebigen Pin nutzen? Habe 4 nicht frei!

Für das nur 2 dazu😆

Theoretisch erstmal ja.
Ich würde vermeiden wollen: SDA/SCL für den I2C, und ggfls. die 13 für die Verwendung der internen LED zu Kontrollzwecken.
Ob Du SPI brauchst, weiss ich nicht, aber dann blieben ggfls. noch die anderen analogPins, die auch als digitale gehen.

ACHTUNG!
Der softwareserial ist jetzt mit 115200 initialisiert.
Das kann der zwar aber sehr unsicher.
Eigentlich spricht man in Kreisen davon, das 19200 die obere sichere Grenze ist.

Ich danke dir! Ich würde einfach 9, 10 dann nehmen! Diese Pins brauche ich nicht!

paasst.
[edit]
Noch ein Nachtrag.
Ich hab grad mal quer auf die Lidar-lib geschaut.
Die bricht Dir das Genick, wenn es die selbe ist, wie von mir im Code angegeben.
Die kann kein SW-Serial, weil die hart verdrahtet ist:

    bool begin(HardwareSerial &serialobj);

Das wird eine etwas größere Operation.
In einem ersten Schritt alles wieder zurück auf Anfang und den Seriellen Monitor raus.
Um die Distance == 0 zu zeigen, könntest die LEd an Pin 13 einsetzen.

#include <RPLidar.h> // https://github.com/robopeak/rplidar_arduino

// You need to create an driver instance
RPLidar lidar;

// The PWM pin for control the speed of RPLIDAR's motor.
// This pin should connected with the RPLIDAR's MOTOCTRL signal
constexpr byte RPLIDAR_MOTOR {3};

bool transmit = false;
byte incomingByte;
int x = 0;
int y = 0;
float distance;

void setup()
{
  // bind the RPLIDAR driver to the arduino hardware serial
  Serial.begin(115200);
  lidar.begin(Serial);
  // set pin modes
  pinMode(RPLIDAR_MOTOR, OUTPUT);
  analogWrite(RPLIDAR_MOTOR, 255);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
  if (IS_OK(lidar.waitPoint()))
  {
    distance = lidar.getCurrentPoint().distance; //distance value in mm unit
    float angle    = lidar.getCurrentPoint().angle; //anglue value in degree
    bool  startBit = lidar.getCurrentPoint().startBit; //whether this point is belong to a new scan
    byte  quality  = lidar.getCurrentPoint().quality; //quality of the current measurement
    if (Serial.available() > 0)
    {
      incomingByte = Serial.read();
      transmit = !transmit;
    }
  }
  else
  {
    analogWrite(RPLIDAR_MOTOR, 0); //stop the rplidar motor
    // try to detect RPLIDAR...
    rplidar_response_device_info_t info;
    if (IS_OK(lidar.getDeviceInfo(info, 100)))
    {
      // detected...
      lidar.startScan();
      // start motor rotating at max allowed speed
      analogWrite(RPLIDAR_MOTOR, 255);
      delay(1000);
    }
  }
  digitalWrite(LED_BUILTIN, distance < 0.1);
}

In einem zweiten Schritt dann entweder einen MEGA nehmen oder eine andere lidar-lib.
Na dann... Viel Spass!

Ein Mega wär natürlich perfekt gewesen, aber da haben ich und mein Partner überhaupt nicht dran gedacht gehabt weil wir uns das so nicht erwartet haben! Aber fürs nächste mal weiß ichs ja jetzt besser! Ich danke dir vielmals!

Wärest Du geneigt eine andere lib zu nehmen?
Dann könnte ich mal schaun, ich hatte ja auch schon mal damit zu tun...

Ja wäre lieb!