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