Soft i2c с датчиками Sensirion SHT21 на Arduino Mega

Я попытался проверить с помощью осциллографа аналоговые контакты, когда датчик подключен, и, похоже, ничего не получается, как обычно.

Аппаратный канал i2c отлично работает на мега, а программные, которые я пытаюсь использовать, похоже, не работают.

#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);
}
Тот же комментарий, что и к вашему ответу несколько минут назад: не ожидайте, что люди узнают, что такое SHT21. Дайте более подробную информацию, если вы хотите правильный ответ. (особенно Олин очень чувствителен к этому :-), и правильно делает)
Я не вижу никакого соответствующего кода, такого как thouse для программного обеспечения I2C или для настройки порта: порты I2C должны быть открытыми.

Ответы (1)

Для полноты картины я считаю, что Джонни Флауэрс сам нашел решение: http://arduino.cc/forum/index.php?topic=99832.0

Он также разместил свой код в Интернете: https://github.com/mrjonny2/PortsSHT21 .

Его решение состоит в том, чтобы отредактировать файл Ports.h

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; }

к

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; }
Привет, да, я совершенно забыл об этом, спасибо, что вставил его. Вы нашли его в моей корзине для пасты?
Нет, я просто погуглил и наткнулся на форум arduino, ссылку на который я дал в своем ответе.
А, помню, где-то выкладывал.