Unbekannte Fehlermeldung beim Sketch

Hi zusammen,

ich habe mir für ein Roboterauto mit dem Arduino NANO zusammengebaut und folgenden Sketch verwendet:
#define MR_A 4
#define MR_B 9
#define MR_PWM 5
#define ML_A 11
#define ML_B 12
#define ML_PWM 10
#define IR_PIN 2 // Pin des IR-Empfängers
#define ECHOPIN 7 // Pins des Ultraschallmoduls
#define TRIGPIN 8

#define ML 0 // symbolisiert linken Motor
#define MR 1 // symbolisiert rechten Motor
#define VOR 0
#define RUECK 1
#define STUFE1 128 // Leistungsstufen
#define STUFE2 255

#include "IRremote.h"
#include "HCSR04.h"

IRrecv Empfaenger(IR_PIN);
decode_results Daten;
UltraSonicDistanceSensor Abstandssensor(TRIGPIN, ECHOPIN);

float Abstand = 0.0;
int letzterInfrarotbefehl = 0;
int Eingabebefehl = 0;
byte aktuelleBetriebsart = 5;
byte aktuelleLeistungR = 0;
byte ZielleistungR = 0;
byte aktuelleLeistungL = 0;
byte ZielleistungL = 0;
long AusweichTimer = 0;

void setup() {
pinMode(MR_A, OUTPUT); pinMode(MR_B, OUTPUT); pinMode(MR_PWM, OUTPUT);
pinMode(ML_A, OUTPUT); pinMode(ML_B, OUTPUT); pinMode(ML_PWM, OUTPUT);
Empfaenger.enableIRIn();
Serial.begin(9600);
}

void loop() {

// Wenn

if (Empfaenger.decode(&Daten))
{
if(Daten.value != letzterInfrarotbefehl)
{
Eingabebefehl = Daten.value % 0x800;
letzterInfrarotbefehl = Daten.value;
}
Empfaenger.resume();
}

switch(Eingabebefehl) // Eingabe verarbeiten
{
case 1:
aktuelleLeistungR = aktuelleLeistungL = 255;
ZielleistungR = STUFE2;
ZielleistungL = STUFE1;
aktuelleBetriebsart = 1;
break;

case 2:
  if(aktuelleBetriebsart == 2)
    ZielleistungR = ZielleistungL = STUFE2;
  else
  {
    aktuelleLeistungR = aktuelleLeistungL = 255;
    ZielleistungR = ZielleistungL = STUFE1;
  }
  aktuelleBetriebsart = 2;
break;

case 3:
  aktuelleLeistungR = aktuelleLeistungL = 255;
  ZielleistungR = STUFE1;
  ZielleistungL = STUFE2;
  aktuelleBetriebsart = 3;
break;

case 4: 
  aktuelleLeistungR = aktuelleLeistungL = 255;
  ZielleistungR = ZielleistungL = STUFE1;      
  aktuelleBetriebsart = 4;
break;

case 5:
  aktuelleBetriebsart = 5;
break;

case 6: 
  aktuelleLeistungR = aktuelleLeistungL = 255;
  ZielleistungR = ZielleistungL = STUFE1;
  aktuelleBetriebsart = 6;
break;

case 7: 
  aktuelleLeistungR = aktuelleLeistungL = 255;
  ZielleistungR = STUFE2;
  ZielleistungL = STUFE1;
  aktuelleBetriebsart = 7;
break;

case 8:
  if(aktuelleBetriebsart == 8)
    ZielleistungR = ZielleistungL = STUFE2;
  else
  {
    ZielleistungR = ZielleistungL = STUFE1;
    aktuelleLeistungR = aktuelleLeistungL = 255;
  }
  aktuelleBetriebsart = 8;
break;

case 9: 
  aktuelleLeistungR = aktuelleLeistungL = 255;
  ZielleistungR = STUFE1;
  ZielleistungL = STUFE2;
  aktuelleBetriebsart = 9;
break;

}

Eingabebefehl = 0;

// abhängig von der aktuellen Betriebsart
// werden nun die Motoren angesteuert:

switch(aktuelleBetriebsart) // Fahren
{
case 1: case 2: case 3:
Richtung(MR, VOR);
Richtung(ML, VOR);
analogWrite(MR_PWM, aktuelleLeistungR);
analogWrite(ML_PWM, aktuelleLeistungL);
Abstand = Abstandssensor.measureDistanceCm();
if(Abstand < 5.0)
{
if(random(2))
{
aktuelleBetriebsart = 7;
ZielleistungR = STUFE2;
ZielleistungL = STUFE1;
}
else
{
aktuelleBetriebsart = 9;
ZielleistungR = STUFE1;
ZielleistungL = STUFE2;
}

    aktuelleLeistungR = aktuelleLeistungL = 255;
    AusweichTimer = millis() + 2000;
  }
break;
case 4:
  Richtung(MR, VOR);
  Richtung(ML, RUECK);
  analogWrite(MR_PWM, aktuelleLeistungR);
  analogWrite(ML_PWM, aktuelleLeistungL);
break;
case 5:
  ZielleistungR = ZielleistungL = 0;
  analogWrite(MR_PWM, aktuelleLeistungR);
  analogWrite(ML_PWM, aktuelleLeistungL);
break;
case 6:
  Richtung(MR, RUECK);
  Richtung(ML, VOR);
  analogWrite(MR_PWM, aktuelleLeistungR);
  analogWrite(ML_PWM, aktuelleLeistungL);
break;  
case 7: case 8: case 9:
  Richtung(MR, RUECK);
  Richtung(ML, RUECK);
  analogWrite(MR_PWM, aktuelleLeistungR);
  analogWrite(ML_PWM, aktuelleLeistungL);
break;

}

if(aktuelleLeistungL < ZielleistungL)
aktuelleLeistungL++;
if(aktuelleLeistungL > ZielleistungL)
aktuelleLeistungL--;

if(aktuelleLeistungR < ZielleistungR)
aktuelleLeistungR++;
if(aktuelleLeistungR > ZielleistungR)
aktuelleLeistungR--;

if(millis() > AusweichTimer && AusweichTimer != 0)
{
aktuelleBetriebsart = 2;
ZielleistungR = ZielleistungL = STUFE1;
aktuelleLeistungR = aktuelleLeistungL = 255;
AusweichTimer = 0;
}

delay(1);
}

void Richtung(byte Motor, byte Richtung)
{
byte Pin_a = (Motor == ML) ? ML_A : MR_A;
byte Pin_b = (Motor == ML) ? ML_B : MR_B;

if(Richtung == VOR)
{
digitalWrite(Pin_a, HIGH);
digitalWrite(Pin_b, LOW);
}
else
{
digitalWrite(Pin_a, LOW);
digitalWrite(Pin_b, HIGH);
}
}

Leider wurde mir eine Fehlermeldung angezeigt:

Arduino: 1.8.15 (Windows Store 1.8.49.0) (Windows 10), Board: "Arduino Nano, ATmega328P"

TPZ_FUCHS_ARDUINO:23:1: error: 'UltraSonicDistanceSensor' does not name a type

UltraSonicDistanceSensor Abstandssensor(TRIGPIN, ECHOPIN);

^~~~~~~~~~~~~~~~~~~~~~~~

C:\Users\maxim\Desktop\TPZ_FUCHS_ARDUINO\TPZ_FUCHS_ARDUINO.ino: In function 'void loop()':

C:\Users\maxim\Desktop\TPZ_FUCHS_ARDUINO\TPZ_FUCHS_ARDUINO.ino:46:31: warning: 'bool IRrecv::decode(decode_results*)' is deprecated: Please use IrReceiver.decode() without a parameter and IrReceiver.decodedIRData. . [-Wdeprecated-declarations]

if (Empfaenger.decode(&Daten))

                           ^

In file included from C:\Users\maxim\Documents\Arduino\libraries\IRremote\src/IRremote.h:188:0,

             from C:\Users\maxim\Desktop\TPZ_FUCHS_ARDUINO\TPZ_FUCHS_ARDUINO.ino:18:

C:\Users\maxim\Documents\Arduino\libraries\IRremote\src/IRReceive.cpp.h:1373:6: note: declared here

bool IRrecv::decode(decode_results *aResults) {

  ^~~~~~

TPZ_FUCHS_ARDUINO:139:17: error: 'Abstandssensor' was not declared in this scope

   Abstand = Abstandssensor.measureDistanceCm();

             ^~~~~~~~~~~~~~

C:\Users\maxim\Desktop\TPZ_FUCHS_ARDUINO\TPZ_FUCHS_ARDUINO.ino:139:17: note: suggested alternative: 'Abstand'

   Abstand = Abstandssensor.measureDistanceCm();

             ^~~~~~~~~~~~~~

             Abstand

exit status 1

'UltraSonicDistanceSensor' does not name a type

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Könnt Ihr mir bitte helfen?

Vielen Dank!!

Max

Bitte lies deinen Beitrag nochmal durch und korrigiere den Sketch.
Dieser ist nicht zu lesen, da die Code-Tags nicht vernünftig eingesetzt sind.
Wie das geht, fndest du hier. Bitte genaustens lesen.

Was meinst du damit genau?

Also was ich im Sketch korrigieren soll.

Hatte ich doch geschrieben.
Du sollst die Code-Tags so einsetzen, dass der Sketch richtig formatiert gezeigt wird.
Lies einfach mal den verlinkten Beitrag richtig durch.

Leider nicht, da diese Beiträge veraltet sind, weil sie sich auf die alte Oberfläche beziehen.

@bearduino2: Wenn Du Dein Programm so
[code]
Dein Programmtext
[/code]
in Codetags einfaßt, wird es gut formatiert angezeigt:

Dein Programmtext

Alternativ geht es auch so:
```
Dein Programmtext
```

Innerhalb von Text geht auch meinFeld[i], weil es besser aussieht wie meinFeld[i] .

Du kannst Deinen Beitrag ändern.

"UltraSonicDistanceSensor" ist kein frei wählbarer Name, sondern richtet sich nach der verwendeten Bibliothek und der dort verwendeten Struktur. Versuche mal stattdessen "HCSR04".

Die Klasse findest Du in src/HCSR04.h als "class HCSR04"

Ich finde da doch die Beschreibung zur Verwendung der Schaltfläche </>. Und diese ist weiterhin gültig.

Dann siehst Du mehr als ich.

Wo steht hier etwas von Code-Tags:

Bitte schenke mir eine Brille :sunglasses:

Klicke oben auf den Link "how to use this forum " und scroll etwas runter.

Nach mehreren Klicks lande ich dann bei Posting code and common code problems. Wenn Du das meinst, fände ich einen zielgerichteteren Link besser.

@bearduino2: Da steht im Grunde, was ich Dir geschrieben habe.

Stimmt.....ich wollte aber dem TO die Arbeit nicht wegnehmen. :wink:

Edit:
Und wie du siehst, interessiert den TO unsere Hilfe eh nicht mehr.

Menschen sind merkwürdig, aber manchmal wird das doch deutlicher, als ich es erwarten würde.