Forum: Compiler & IDEs Arduino Code Fehler aber was ist falsch ?


von DAVID B. (bastler-david)


Lesenswert?

Hallo
Ich versuche seit Donnerstag dem arduino das laufen mit 2 verschindende 
Sensoren auf zudrucken.
Nur irgend wo ist noch ein Fehler der das auf spielen unterbindet.
Ich habe alle sensoren angeben.
Ich habe alle pins fest gelegt.
Habe es mit andern vorlagen verglichen nix.


#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
#define DHTPIN = 10; //Am2301
#define OneWire  ds(2); // ds18B20

DeviceAddress sensor1 = { 0x28, 0xFF, 0x86, 0x2E,  0x74, 0x16, 0x3, 0xAF 
};
DeviceAddress sensor2 = { 0x28, 0xFF, 0x5, 0x72, 0x74, 0x16, 0x3, 0xE0 
};
DeviceAddress sensor3 = { 0x28, 0xFF, 0x2B, 0x3F, 0x73, 0x16, 0x5, 0x60 
};
DeviceAddress sensor4 = { 0x28, 0xFF, 0xC5, 0x11, 0x73, 0x16, 0x5, 0x7D 
};
DeviceAddress sensor5 = { 0x28, 0xFF, 0xC, 0x68, 0x74, 0x16, 0x3, 0x30 
};


char sensor1Name[] = "Temp1: ";
char sensor2Name[] = "Temp2: ";
char sensor3Name[] = "Temp3: ";
char sensor4Name[] = "Temp4: ";
char sensor5Name[] = "Temp5: ";

void setup(void)
{
  Serial.begin(9600);
  dht.begin();
}

void writeTimeToScratchpad(byte* address)
{
   ds.reset();
   ds.select(address);
  scratchpad
  ds.write(0x44,1);
   delay(2500);
}

void readTimeFromScratchpad(byte* address, byte* data)
{
    ds.reset();
    ds.select(address);
    ds.write(0xBE);
  for (byte i=0;i<9;i++){
    data[i] = ds.read();
  }
}

float getTemperature(byte* address)
{
int tr;
byte data[12];

writeTimeToScratchpad(address);

readTimeFromScratchpad(address,data);

//put in temp all the 8 bits of LSB (least significant byte)
tr = data[0];

if (address[0] == 0x10) // DS18S20
{
//check for negative temperature
if (data[1] > 0x80)
{
tr = !tr + 1; //two’s complement adjustment
tr = tr * -1; //flip value negative.
}

//drop bit 0
tr = tr >> 1;

//COUNT PER Celsius degree (10h)
int cpc = data[7];
//COUNT REMAIN (0Ch)
int cr = data[6];

return tr - (float)0.25 + (cpc - cr)/(float)cpc;
}
else // DS18B20
{
return ((data[1] << 8) + tr) * (float)0.0625;
}
}

void loop(void)
{
  float temp1 = getTemperature(sensor1);
  float temp2 = getTemperature(sensor2);
  float temp3 = getTemperature(sensor3);
  float temp4 = getTemperature(sensor4);
  float temp5 = getTemperature(sensor5);

  Serial.print(sensor1Name);
  Serial.print(temp1);
  Serial.println(" C");
  Serial.print(sensor2Name);
  Serial.print(temp2);
  Serial.println(" C");
  Serial.print(sensor3Name);
  Serial.print(temp3);
  Serial.println(" C");
  Serial.print(sensor4Name);
  Serial.print(temp4);
  Serial.println(" C");
  Serial.print(sensor5Name);
  Serial.print(temp5);
  Serial.println(" C");
   delay(2000);

  float h = dht.readHumidity();

  float t = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }


  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
}

Fehlermeldung ist diesen hier:
ES läuft immer wieder auf das >ds< raus was ich aber mit Pin 2 oben 
verbunden habe.
------------------------------------------------------------------------ 
-
In function 'void setup()':

error: 'dht' was not declared in this scope

   dht.begin();

   ^

In function 'void writeTimeToScratchpad(byte*)':

 error: 'ds' was not declared in this scope

   ds.reset();

   ^

In function 'void readTimeFromScratchpad(byte*, byte*)':

error: 'ds' was not declared in this scope

   ds.reset();

   ^

In function 'void loop()':

error: 'dht' was not declared in this scope

   float h = dht.readHumidity();

             ^

error: 'f' was not declared in this scope

   if (isnan(h) || isnan(t) || isnan(f)) {

                                     ^

error: 'f' was not declared in this scope

   float hif = dht.computeHeatIndex(f, h);

                                    ^

exit status 1
'dht' was not declared in this scope


Ware SUPER wenn mir einer Hilfe Stellung geben kann.
Vielen DANK.

von nicht“Gast“ (Gast)


Lesenswert?

Moin.

Du legst nirgends eine Variable dht an.Deswegen kennt er die nicht.

Das da makro ist auch kein Highlight. Da solltest du sicherlich eine 
Variable anlegen.

von Thomas (Gast)


Lesenswert?

DAVID -. schrieb:
> In function 'void setup()':
>
> error: 'dht' was not declared in this scope
>
>    dht.begin();

Da steht doch, wo das Problem liegt:

Du sagst dem Compiler, er möge die Methode begin() des Objektes dht 
ausführen. Der Compiler weiss aber gar nicht, was für ein Objekt dht 
ist, da Du es nicht deklariert hast.

von G. H. (schufti)


Lesenswert?

ein Blick in das example (das wohl jeder arduino lib beiliegt) offenbart 
folgendes
1
// Initialize DHT sensor.
2
// Note that older versions of this library took an optional third parameter to
3
// tweak the timings for faster processors.  This parameter is no longer needed
4
// as the current DHT reading algorithm adjusts itself to work on faster procs.
5
DHT dht(DHTPIN, DHTTYPE);

von G. H. (schufti)


Lesenswert?

dht ist keine Veriable die du "hinterlegst", sondern ein Objekt das du 
instanzierst ... etwas Beschäftigung mit den Grundlagen des Systems, das 
du verwenden willst wäre angebracht.

: Bearbeitet durch User
von DAVID B. (bastler-david)


Lesenswert?

Meint ihr das so ?

#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
#define OneWire  ds(2);
#define DHT dht(10, Am2301);

Ändert auch nichts leider.
oder wo oder muss ich das setzten ?

von G. H. (schufti)


Lesenswert?

sag mal, wie wäre es tatsächlich mal mit einem Blick ins Beispiel???
"Menüleiste->Datei/Beispiele/DHT/DHT Tester" (oder so ähnlich)

Solche Aussagen wie
"Habe es mit andern vorlagen verglichen nix."
sind somit leicht als Lüge enttarnt...

von DAVID B. (bastler-david)


Lesenswert?

Ich habe die letzten tage damit zugebracht ist also NICHT gelogen ich 
habe beispiele vom Programm aber auch von Webseiten versucht.
Habe sogar in einer Verzweiflungstat alle verweise mal angefugt aber 
selbst damit gehts nicht.

#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
#include "dht.h"
#define OneWire  ds(10);
#define DHT.PIN (2):
#define DHTTYPE.DHT21;
#define DHT dht(DHTPIN, DHTTYPE);

Die beispiele einzeln laufen zusammen aber nicht mehr.

von G. H. (schufti)


Lesenswert?

ich habe dir einige Posts oberhalb sogar den relevanten Teil aus dem 
Beispiel rauskopiert. Siehst du dort irgendwo ein "#define" ???
Wo die/eine korrekte Stelle (es gibt keine eindeutige) dafür ist kannst 
du selber aus dem Beispiel eruieren.

von DAVID B. (bastler-david)


Lesenswert?

AHHH die Rätselslösung:

#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
OneWire  ds(10);
#define DHTPIN 2
#define DHTTYPE DHT21
DHT dht(DHTPIN, DHTTYPE);

Jetzt gehts! SUPER DANKE
Du weist nicht auch noch wie ich von ein Loop in den nächsten springen 
kann ?

von Daniel H. (Firma: keine) (commander)


Lesenswert?

DAVID -. schrieb:
> #include <OneWire.h>
> #include <DallasTemperature.h>
> #include "DHT.h"
> OneWire  ds(10);
> #define DHTPIN 2
> #define DHTTYPE DHT21
> DHT dht(DHTPIN, DHTTYPE);

Gruselig.

von PittyJ (Gast)


Lesenswert?

Es gibt doch jetzt sogar C++ Bücher frei im Internet.
Warum liest die keiner mehr?
Warum glaubt jeder er könne programmieren, indem er copy und paste von 
ein paar Codebeispielen macht.

von Na (Gast)


Lesenswert?

Because that is the arduino way....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.