Show Posts
Pages: [1]
1  International / Deutsch / Re: Problem mit DHT-22 via I2C und I2C_Anything on: February 03, 2013, 12:31:27 pm
So... nachdem ich einige Tage die Schnauze voll hatte hab ich mich nochmal dran gesetzt... und siehe da... es funktioniert zumindest schonmal mit einem Wert!!!
GOTT SEI DANK!

Zum einen war folgendes zu tun:

I2C ist eigentlich die ideale Lösung für die Kommunikation zwischen zwei oder mehr Arduinos.
Und die I2C_Anything (kannte ich bisher noch nicht) macht auch einen guten Eindruck.
Aber anscheinend gibt es Probleme, wenn I2C_writeAnything() im onRequest Handler verwendet wird. Hier gibt es einen Thread dazu nebst Lösung: http://arduino.cc/forum/index.php?action=printpage;topic=104732.0
Laut dem Thread soll es mit dieser Erweiterung funktionieren (nicht getestet):
Code:
template <typename T> int I2C_singleWriteAnything (const T& value) {
  int size = sizeof value;
  byte vals[size];
  const byte* p = (const byte*) &value;
  unsigned int i;
  for (i = 0; i < sizeof value; i++) {
    vals[i] = *p++;
  }
  
  Wire.write(vals, size);
  return i;
}

DANKE DAFÜR MAFU!

Zum anderen durfte ich bei I2C_singleWriteAnything() nicht das "tdht" benutzen sondern musste "dht.readTemperature()" übersenden!
Ich hoffe das ist verständlich so ^^

Jetzt muss ich nur noch herausfinden wie ich dem Arduino sage das noch ein 2. Wert ankommt und wie er den 1. vom 2. unterscheidet.
Denn wenn ich einfach I2C_singleWriteAnything 2 mal hintereinander (einmal für Temp und einmal für die RLF) einfach so übertrage kommt 2x 0.00 an.

Manchmal kommt auch noch "ovf" an (Overflow?) Gibt es eine Möglichkeit das in den Griff zu kriegen? bzw. ihm zu sagen wenn etwas anderes als ne reelle
Zahl kommt ihm zu er soll das einfach ignorieren und dann doch nicht den Wert tdht setzen? Kann er ja dann beim nächsten durchgang tun wenn der Wert richtig ankam.
---> DONE!

Grüße
2  International / Deutsch / Re: Problem mit DHT-22 via I2C und I2C_Anything on: January 30, 2013, 08:51:49 am
Nun Jurs... gute Frage...
Hier die Antwort:
Mir war bis dato nicht bekannt das es noch eine andere Möglichkeit gibt sowas zu übertragen bzw. das SoftwareSerial existiert.

Es läuft sowieso darauf hinaus das die Daten irgendwann via XBee/WifiBee/Wie auch immer drahtlos übertragen werden nur
würde ich es gerne vorher via Kabel auf die Reihe bekommen! smiley

@Michael
Ich hatte schon eine Möglichkeit OHNE I2C_Anything!
Und zwar indem ich die float Werte mittels dtostrf umgewandelt habe

dtostrf(tdht, 4, 2, tdht_str);
dtostrf(hdht, 4, 2, hdht_str);

Die Werte die dabei rauskamen waren zwar richtig aber auch diese wurden nicht richtig übertragen! smiley-grin
Aber gut das ich nun weiss das irgendwas mit meiner Übertragung nicht stimmt!
Nun weiss ich zumindest wo ich suchen muss!


Grüße

Edit: Ich hab aber auch schon versucht nur eine Zeichenfolge oder Zahl zu übertragen!
Das hat auch nicht funktioniert! bzw. kam auch nur Murks bei raus.
3  International / Deutsch / Re: Problem mit DHT-22 via I2C und I2C_Anything on: January 30, 2013, 06:50:34 am
Das   while(Wire.available()) hab ich nun rausschmeissen!
Das hatte ich so aus nem Beispielcode entnommen!


Und du hast Recht!
Nehme ich "float" statt "char" habe ich NaN.
Nehme ich "char" kommt folgendes:

DHT Temperatur:          *C
DHT Luftfeuchtigkeit:  ÿ %

Also auch nur Müll! :-/

Pardon, ich hab die Nacht so viel rum probiert... ich hab den Wald vor lauter Bäumen nicht mehr gesehen!

Grüße

Edit: Das ist aber nicht das erste mal das mir dieses "ÿ" begegnet... es stand auch schonmal bei Temperatur und RLF als ich gestern Nacht verzweifelt versucht hab es ans laufen zu kriegen smiley
4  International / Deutsch / Problem mit DHT-22 via I2C und I2C_Anything on: January 29, 2013, 10:52:04 pm
Heyho,

hab hier 2 Arduino's und möchte das der eine Arduino die Temperatur und RLF-Daten des DHT-22
via I2C an den anderen Arduino sendet.

Leider kriege ich das nicht ganz so hin. Habe schon I2C_Anything versucht und auch damit die Daten manuell
via dtostrf in char umzuwandeln um diese zu übertragen. Leider ergebnislos.

Vllt. könnt ihr euch meinen Code mal ansehen und entdeckt einen Fehler?
Ich bin hier fast am verzweifeln.

Hier Code Nummer 1 smiley
Code:
#include <DHT.h>
#include <Wire.h>
#include <I2C_Anything.h>

//DEKLARATION DER PINS
#define DHTPIN 13

float tdht;
float hdht;

//#define DHTTYPE DHT11  
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);


//SETUP
void setup()
{
  //EINGAENGE/AUSGAENGE SETZEN
  pinMode(DHTPIN, INPUT);

  //I2C ADRESSE
  Wire.begin(5);
  
  //SERIELLE AUSGABE BEGINNEN
  Serial.begin(115200);
  dht.begin();
}


//BEGINN DER LOOP

void loop() {
  
  //Sensor(en) Auslesen
  
  float tdht = dht.readTemperature();
  float hdht = dht.readHumidity();
  
  
  //SERIELLE AUSGABE DER SENSORWERTE
              
  Serial.println("-----------------------------------");
  Serial.print("DHT Temperatur:        ");
  Serial.print(tdht);
  Serial.println(" *C");
  Serial.print("DHT Luftfeuchtigkeit:  ");
  Serial.print(hdht);
  Serial.println(" %\t");
  Serial.println("-----------------------------------");
    
  delay(2000);
    
}

//I2C DATEN SENDEN
  
  void requestEvent()
    {
    Wire.beginTransmission(4);
    I2C_writeAnything(tdht);
    delay(10);
    I2C_writeAnything(hdht);
    }


Und hier Code Nr. 2 smiley
Code:
#include <Wire.h>
#include <I2C_Anything.h>

char tdht;
char hdht;

//SETUP
void setup()
{
  //I2C ADRESSE
  Wire.begin(4);

  //SERIELLE AUSGABE BEGINNEN
  Serial.begin(115200);
}


void loop()

{
  
      //I2C DATEN EMPFANGEN

      Wire.requestFrom(5,11);
      while(Wire.available())
        {
        I2C_readAnything(tdht);
        delay(10);
        I2C_readAnything(hdht);

}
        
  //SERIELLE AUSGABE DER SENSORWERTE
              
  Serial.println("-----------------------------------");
  Serial.print("DHT Temperatur:        ");
  Serial.print(tdht);
  Serial.println(" *C");
  Serial.print("DHT Luftfeuchtigkeit:  ");
  Serial.print(hdht);
  Serial.println(" %\t");
  Serial.println("-----------------------------------");
  
  delay(2000);
}


So kriege ich jedenfalls nur "NaN" zugesendet!

Grüße und Danke schonmal im Voraus.


EDIT: Hab schon mit den Werten von Wire.requestFrom rumgespielt! Bzw. mit dem 2. der ja angibt wievile Byte kommen sollen!
Pages: [1]