Temperatur & Feuchtigkeitssensor DHT11: digital vs. analog PIN

Servus zusammen,

ich blick da noch nicht durch: ich habe den o.g. digitalen Sensor DHT11.
Unter ladyada gibt es eine Class für das Auslesen am digitalen PIN.
Leider hat mein IBOARD Ethernet nur analoge PIN's zur Verfügung (bzw. bin ich noch auf der Suche im IBOARD-Forum, ob nicht doch digitale Pins zur Verfügung stehen).

Allerdings gibt es einen Sketch, der auch an analogen PIN's das Auslesen ermöglicht. Fkt. prima.
Leider ist dieser Sketch (für den analog PIN) noch nicht in einer CLASS und bevor ich diese jetzt erstellen würde kurz gefragt:
An welchen Stellen müßte ich an der Class für den digitalen PIN "schrauben", um an analogen PIN's einsetzen zu können.
Generell daher die Frage: Welche Themen (Programierbefehle, etc.) müssen hier berücksichtigt werden, damit ich evtl. weiter googeln kann.

Danke vorab (noch sehr frisch in der Arduino-Szene)

Hier die Class für den digitalen PIN: Sensor tutorials - DHT11/DHT21/DHT22 low cost temperature/humidity sensors
Hier der Sketch am analogen PIN: http://www.hotcar.de/tag/dht11/ (gibt diesbzgl. noch weitere Quellen)

Du kannst auch die analogen Pins als digitale verwenden, damit sollte das eigentlich kein Problem sein.

naja, evtl. stelle ich mir das zu trivial vor, aber ändere ich die Zeile im Hinblick auf meine PIN-Belegung, erhalte ich keine Werte.
Lass ich es es mit gleicher PIN-Belegung mit den Sketch für analogen Pins laufen, erhalte ich Ergebnisse.
#define DHTPIN 2 // what pin we're connected to

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11 


DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
 
  dht.begin();
}

Laut pinMode() - Arduino Reference

The analog input pins can be used as digital pins, referred to as A0, A1, etc.

solltest Du die Pins wiefolgt verwenden können:

#define DHTPIN A1

Das wäre dann der zweite analoge Pin (A0 ist der erste).
Mario.

Danke Mario für den Link & Infos. Habe ich jetzt nachgelesen.

Wie oben gesagt,ich hab ein IBOARD und das hat nur analoge Inputs (so habe ich es zumindest im DS und im Forum verstanden).
IBoard Ethernet http://iteadstudio.com/store/images/produce/Platform/ArduinoCom/IBoard/iBoard_DS.pdf

Hier im Nachbar-Thread Arduino Forum wird/wurde auch diskutiert, daß der DHT11 kein analoges Interface hat.
Um so mehr bin ich ja erstaunt, daß der Sketch unten sehr wohl läuft und explizit auf analogen PIN eingeht.
Ich würd gern den Lösungsansatz wissen / verstehen. Allein diese Zeile versteh ich nicht.
while(!(PINC & _BV(DHT11_PIN)))
Okay..gerade gegoogelt..PINC "bedeutet" bedeutet "direct port reading". Und hier würde mir der Hintergrund bzgl. PINC evtl. weiterhelfen, um diese Thematik digital vs. analog zu verstehen.

#define DHT11_PIN 0      // define anlog  port 0 
  
byte read_dht11_dat() 
{ 
  byte i = 0; 
  byte result=0; 
  for(i=0; i< 8; i++) 
  { 
    while(!(PINC & _BV(DHT11_PIN))) 
    {};  // wait  forever until anlog input port 0 is '1'   (NOTICE: PINC reads all the analog input ports  
    //and  _BV(X) is the macro operation which pull up positon 'X'to '1' and the rest positions to '0'. it is equivalent to 1<<X.)  
    delayMicroseconds(30); 
    if(PINC & _BV(DHT11_PIN))  //if analog input port 0 is still '1' after 30 us 
      result |=(1<<(7-i));     //this position is 1 
    while((PINC & _BV(DHT11_PIN)));  // wait '1' finish 
    } 
    return result; 
} 
  
  
void setup() 
{ 
  DDRC |= _BV(DHT11_PIN);   //let analog port 0 be output port  
  PORTC |= _BV(DHT11_PIN);  //let the initial value of this port be '1' 
  Serial.begin(9600); 
  Serial.println("Ready"); 
} 
      
void loop()      
{ 
  byte dht11_dat[5];     
  byte dht11_in; 
  byte i;// start condition 
       
  PORTC &= ~_BV(DHT11_PIN);    // 1. pull-down i/o pin for 18ms 
  delay(18); 
  PORTC |= _BV(DHT11_PIN);     // 2. pull-up i/o pin for 40us 
  delayMicroseconds(1); 
  DDRC &= ~_BV(DHT11_PIN);     //let analog port 0 be input port  
  delayMicroseconds(40);       
    
  dht11_in = PINC & _BV(DHT11_PIN);  // read only the input port 0 
  if(dht11_in) 
  { 
    Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW 
    delay(1000); 
    return; 
  } 
  delayMicroseconds(80); 
  dht11_in = PINC & _BV(DHT11_PIN); //   
  if(!dht11_in) 
  { 
    Serial.println("dht11 start condition 2 not met");  //wair for second response signal:HIGH 
    return; 
  } 
    
  delayMicroseconds(80);// now ready for data reception 
  for (i=0; i<5; i++) 
  {  dht11_dat[i] = read_dht11_dat();}  //recieved 40 bits data. Details are described in datasheet 
    
  DDRC |= _BV(DHT11_PIN);      //let analog port 0 be output port after all the data have been received 
  PORTC |= _BV(DHT11_PIN);     //let the  value of this port be '1' after all the data have been received 
  byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// check check_sum 
  if(dht11_dat[4]!= dht11_check_sum) 
  { 
    Serial.println("DHT11 checksum error"); 
  } 
  Serial.print("Current humdity = "); 
  Serial.print(dht11_dat[0], DEC); 
  Serial.print("."); 
  Serial.print(dht11_dat[1], DEC); 
  Serial.print("%  "); 
  Serial.print("temperature = "); 
  Serial.print(dht11_dat[2], DEC); 
  Serial.print("."); 
  Serial.print(dht11_dat[3], DEC); 
  Serial.println("C  "); 
  delay(2000);  //fresh time 
}

Wenn das Board Arduino kompatibel ist, wie Du sagst, dann sind die Ports A0 bis A5 auf der Stiftleiste nach außen geführt. A0 bis A5 sind die "normalen" analog-Pins, mit denen man analoge Signale 0-5V digitalisieren kann (ADC). Allerdings können diese 6 Pins auch als digitale IO-Pins verwendet werden und die Arduino-IDE, von der ich vermute das Du sie verwendest, denn von Deiner Programmierumgebung hast Du leider bisher noch nichts geschrieben, trägt auch Sorge dafür, das die Pins wenn Sie mit einem digitalWrite(), pinMode() und digitalRead() verwendet werden, richtig angesteuert werden.
Hast Du denn mal versucht das Pin "A1" (2. analoges Pin) mit dem Arduino-DHT11 Sketch zu verwenden? Also statt
#define DHTPIN 2
ein
#define DHTPIN A1
zu setzen?
@All: erinnere ich mich richtig, das man bei der Verwendung der analog-Pins als digitale IO-Pins einfach nach der "13" mit der Nummerierung weiter macht? Also "14" für A0, 15 für A1 usw.? Ich bin der Meinung das war so.

Sehr gut. Danke Mario. Ich bin jetzt einen Schritt weiter.
Mit #define DHTPIN A1 werden nun Daten angezeigt. Sind allerdings noch falsch; völlig zu hoch. Muss hier noch weitersuchen warum.
Also der entscheidene Tip war A1.

Genau, ich nutze die Arduino 1.0 IDE.