Soft i2c mit Sensirion SHT21 Sensoren auf Arduino Mega

Ich habe versucht, die analogen Pins mit einem Oszilloskop zu überprüfen, wenn der Sensor angeschlossen ist, und ich scheine nichts zu bekommen, wie ich es normalerweise tun würde.

Der Hardware-i2c-Kanal funktioniert auf dem Mega einwandfrei, die weichen, die ich zu verwenden versuche, scheinen nicht zu funktionieren

#include <Wire.h>
#include <Ports.h>
#include <PortsSHT21.h>
#include <SHT2x.h>

//Define soft i2c channels for 3 sensors
  SHT21 hsensor2 (2); // pins A1 and D5 - Sensor 2
  SHT21 hsensor3 (3); // pins A2 and D6 - Sensor 3
  SHT21 hsensor4 (4); // pins A3 and D7 - Sensor 4

//define variables for temp data
  float h, t;


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

void loop()
{
   // Get data from first sensor hard I2C channel
    float hum1 = (SHT2x.GetHumidity());
    float temp1 = (SHT2x.GetTemperature());
    Serial.println("temp1");
    Serial.println(temp1); 

  // Get data from second sensor soft I2C
  hsensor2.measure(SHT21::HUMI);
  hsensor2.measure(SHT21::TEMP);
  hsensor2.calculate(h, t);
    float hum2 = (h);
    float temp2 = (t);
    Serial.println("temp2");
    Serial.println(temp2);     

   // Get data from third sensor soft I2C
  hsensor3.measure(SHT21::HUMI);
  hsensor3.measure(SHT21::TEMP);
  hsensor3.calculate(h, t);
    float hum3 = (h);
    float temp3 = (t);
    Serial.println("temp3");
    Serial.println(temp3);     

 // Get data from fourth sensor soft I2C  
  hsensor4.measure(SHT21::HUMI);
  hsensor4.measure(SHT21::TEMP);
  hsensor4.calculate(h, t);  
    float hum4 = (h);
    float temp4 = (t);
    Serial.println("temp4");
    Serial.println(temp4);
    Serial.println("");
    Serial.println("");
    delay(500);
}
Derselbe Kommentar wie bei Ihrer Antwort von vor ein paar Minuten: Erwarten Sie nicht, dass die Leute wissen, was SHT21 ist. Geben Sie weitere Details an, wenn Sie eine richtige Antwort wünschen. (Besonders Olin ist da sehr empfindlich :-), und das zu Recht)
Ich sehe keinen relevanten Code, wie thouse für Software-I2C oder für die Porteinrichtung: I2C-Ports müssen Open-Drain sein.

Antworten (1)

Nur der Vollständigkeit halber glaube ich, dass Jonny Flowers die Lösung selbst gefunden hat: http://arduino.cc/forum/index.php?topic=99832.0

Er hat seinen Code auch online gestellt: https://github.com/mrjonny2/PortsSHT21

Seine Lösung besteht darin, die Ports.h-Datei zu bearbeiten

uint8_t portNum;

inline uint8_t digiPin() const
    { return portNum ? portNum + 3 : 18; }
inline uint8_t digiPin2() const
    { return portNum ? portNum + 13 : 19; }
inline uint8_t anaPin() const
    { return portNum - 1; }

Zu

uint8_t portNum;

inline uint8_t digiPin() const
    { return portNum ? portNum + 3 : 18; }
inline uint8_t digiPin2() const
    { return portNum ? portNum + 53 : 19; }
inline uint8_t anaPin() const
    { return portNum + 53; }
Hallo, ja, das habe ich ganz vergessen, danke, dass du es eingefügt hast. Hast du es in meinem Papierkorb gefunden?
Nein, ich habe gerade gegoogelt und bin auf das Arduino-Forum gestoßen, das ich in meiner Antwort verlinkt habe.
Ah, ich erinnere mich, es irgendwo gepostet zu haben.