HILFE: expected primary-expression before 'float'



  • Hallo ich versuche den Code in Arduino laufen zu lassen und wollte fragen wie ich den Fehler " expected primary-expression before 'float' " beheben kann?😥

    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27,16,2);

    //Kombi Sensor
    /************************( Importieren der genutzten Bibliotheken )************************/
    #include "DHT.h"
    #define DHTPIN 2 // Hier die Pin Nummer eintragen wo der Sensor angeschlossen ist
    #define DHTTYPE DHT11 // Hier wird definiert was für ein Sensor ausgelesen wird. In
    // unserem Beispiel möchten wir einen DHT11 auslesen, falls du
    // ein DHT22 hast einfach DHT22 eintragen

    /( Definieren der Objekte )/
    DHT dht(DHTPIN, DHTTYPE);

    //Herzschlag-Sensor

    int rawValue;

    bool heartbeatDetected(int IRSensorPin, int delay)
    {
    static int maxValue = 0;
    static bool isPeak = false;

    bool result = false;

    rawValue = analogRead(IRSensorPin);
    // Hier wird der aktuelle Spannungswert am Fototransistor ausgelesen und in der rawValueVariable zwischengespeichert
    rawValue *= (1000/delay);

    // Sollte der aktuelle Wert vom letzten maximalen Wert zu weit abweichen
    // (z.B. da der Finger neu aufgesetzt oder weggenommen wurde)
    // So wird der MaxValue resetiert, um eine neue Basis zu erhalten.
    if (rawValue * 4L < maxValue) { maxValue = rawValue * 0.8; } // Detect new peak
    if (rawValue > maxValue - (1000/delay)) {
    // Hier wird der eigentliche Peak detektiert. Sollte ein neuer RawValue groeßer sein
    // als der letzte maximale Wert, so wird das als Spitze der aufgezeichnten Daten erkannt.
    if (rawValue > maxValue) {
    maxValue = rawValue;
    }
    // Zum erkannten Peak soll nur ein Herzschlag zugewiesen werden
    if (isPeak == false) {
    result = true;
    }
    isPeak = true;
    } else if (rawValue < maxValue - (3000/delay)) {
    isPeak = false;
    // Hierbei wird der maximale Wert bei jeden Durchlauf
    // etwas wieder herabgesetzt. Dies hat den Grund, dass
    // nicht nur der Wert sonst immer stabil bei jedem Schlag
    // gleich oder kleiner werden wuerde, sondern auch,
    // falls der Finger sich minimal bewegen sollte und somit
    // das Signal generell schwaecher werden wuerde.
    maxValue-=(1000/delay);
    }
    return result;
    }
    int ledPin=13;
    int analogPin=0;
    int Dht=11;

    void setup() {

    //Herzschlag
    // Die eingebaute Arduino LED (Digital 13), wird hier zur Ausgabe genutzt
    pinMode(ledPin,OUTPUT);

    // Serielle Ausgabe Initialisierung
    Serial.begin(9600);
    Serial.println("Heartbeat Detektion Beispielcode.");

    lcd.init();

    //Kombi-Sensor Temperatur Feuchtigkeit Setup

    Serial.println("DHT11 Testprogramm");

    dht.begin();

    lcd.backlight();
    }

    const int delayMsec = 60; // 100msec per sample

    void loop() {

    ////Kombi-Sensor Temperatur Feuchtigkeit
    // Wait a few seconds between measurements.
    delay(2000); // Hier definieren wir die Verweilzeit die gewartet wird
    // bis der Sensor wieder ausgelesen wird. Da der DHT11
    // auch ca. 2 Sekunden hat um seine Werte zuaktualisieren
    // macht es keinen sinn ihn schneller auszulesen!

    float h = dht.readHumidity(); // Lesen der Luftfeuchtigkeit und speichern in die Variable h
    float t = dht.readTemperature(); // Lesen der Temperatur in °C und speichern in die Variable t

    /*********************( Überprüfen ob alles richtig Ausgelesen wurde )*********************/
    if (isnan(h) || isnan(t)) {
    Serial.println("Fehler beim auslesen des Sensors!");
    return;
    }

    // Nun senden wir die gemessenen Werte an den PC dise werden wir im Seriellem Monitor sehen
    Serial.print("Luftfeuchtigkeit: ");
    Serial.print(h); // Ausgeben der Luftfeuchtigkeit
    Serial.print("%\t"); // Tabulator
    Serial.print("Temperatur: ");
    Serial.print(t); // Ausgeben der Temperatur
    Serial.write("°");
    Serial.println("C");

    lcd.backlight();

    lcd.setCursor(0,0);
    lcd.print("Temp: ");
    lcd.print(float)h = dht.readTemperature(); //wichtig füt entnahme der Werte
    // hier Gradzeichen einfügen und auf LCD prüfen
    lcd.print("C");

    //Herzschlag-Sensor
    static int beatMsec = 0;
    int heartRateBPM = 0;
    if (heartbeatDetected(analogPin, delayMsec)) {
    heartRateBPM = 60000 / beatMsec;
    // LED-Ausgabe bei Herzschlag
    digitalWrite(ledPin,3);

    // Serielle Datenausgabe
    Serial.print("Puls erkannt: ");
    Serial.println(heartRateBPM);

    beatMsec = 0;
    } else {
    digitalWrite(ledPin,0);
    }
    delay(delayMsec);
    beatMsec += delayMsec;

    lcd.setCursor(0,1);
    lcd.print("BPM: ");
    lcd.print(" xyz"); // hier Gradzeichen einfügen und auf LCD prüfen
    lcd.print(" xyz"); // hier für herzrate !

    }



  • Du bekamst den Hinweis

    Formatiere Deinen Code! Verwende dazu den Code-Knopf::

    Halte dich daran.

    Der Compiler gibt immer eine Zeile mit an. Warum lässt du die weg.

    vollständige Fehlermeldung: Copy&Paste



  • @manni66 Erst einmal vielen Dank für Ihre Hilfe. Ich habe es bereits mit dieser Zeile, die vorgegeben ist ausprobiert, allerdings steht dann, dass setup doppelt definiert ist..
    Die vollständige Fehlermeldung ist folgende:

    Arduino: 1.8.15 (Windows 10), Board: "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

    C:\Users\x\OneDrive\Dokumente\Arduino\dht11\sketch_jul02a\sketch_jul02a.ino: In function 'void loop()':

    sketch_jul02a:136:11: error: expected primary-expression before 'float'

    lcd.print(float)h = dht.readTemperature(); //wichtig füt entnahme der Werte

           ^~~~~
    

    exit status 1

    expected primary-expression before 'float'

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

    Tut mir leid, falls es Ihnen zu umständlich ist. Ich arbeite das erste Mal an Arduino...



  • @student00 sagte in HILFE: expected primary-expression before 'float':

    lcd.print(float)h = dht.readTemperature(); //wichtig füt entnahme der Werte

    Und was soll das float da machen?
    Was soll die Zeile insgesamt bedeuten?



  • @manni66 ich möchte den gemessenen wert der temperatur dort ausgeben lassen, den der dht11 misst



  • Du hast doch vorher schon mittels

    float t = dht.readTemperature(); // Lesen der Temperatur in °C und speichern in die Variable t
    

    die Temperatur in die Variable t eingelesen und gibst sie dann ein paar Zeilen darunter mit

    Serial.print(t); // Ausgeben der Temperatur
    

    auf die serielle Schnittstelle wieder aus.
    Genauso kannst du diesen Wert dann auf dem LCD ausgeben.


Log in to reply