Как инициализировать сброс на цифровом термометре sht30?

У меня есть sht30, который выводит правильные показания температуры в течение примерно 5 минут, а затем отключается.

Поэтому я стараюсь нажимать кнопку сброса каждые несколько секунд, чтобы сохранить точность показаний.

Я нахожусь на nano, соединяющем d4 с выводом сброса sht30, но, похоже, я не сбрасываюсь. Моя температура все еще колеблется.

Как правильно нажать сброс на шт30?

код:

#include <Wire.h>

// SHT31 I2C адрес 0x44(68)
#define Addr 0x45

int reset_pin = 3; // вывод сброса на плате установлен в d4.
int counter = 0; //сброс счетчика

void setup()
{
  // Инициализация связи I2C в качестве ВЕДУЩЕГО
  Wire.begin();
  // Инициализировать последовательную связь, установить скорость передачи данных в бодах = 9600
  Serial.begin(115200);
  delay(300);
}
 
void loop()
{
  unsigned int data[6];
 
  // Начать передачу I2C
  Wire.beginTransmission(Addr);
  // Отправить 16-битный командный байт
  Wire.write(0x2C);
  Wire.write(0x06);
  // Остановить передачу I2C
  Wire.endTransmission();
  delay(300);
 
  // Начать передачу I2C
  Wire.beginTransmission(Addr);
  // Остановить передачу I2C
  Wire.endTransmission();
 
  // Запрос 6 байт данных
  Wire.requestFrom(Addr, 6);
 
  // Чтение 6 байт данных
  // temp msb, temp lsb, temp crc, hum msb, hum lsb, hum crc
  if (Wire.available() == 6)
  {
    data[0] = Wire.read();
    data[1] = Wire.read();
    data[2] = Wire.read();
    data[3] = Wire.read();
    data[4] = Wire.read();
    data[5] = Wire.read();
  }
  // Преобразование данных
  int temp = (data[0] * 256) + data[1];
  float cTemp = -45.0 + (175.0 * temp / 65535.0);
  float fTemp = (cTemp * 1.8) + 32.0;
  float humidity = (100.0 * ((data[3] * 256.0) + data[4])) / 65535.0;
 
  // Вывод данных на последовательный монитор
  Serial.print("Temperature in Celsius :");
  Serial.print(cTemp);
  Serial.println(" C");
  Serial.print("Temperature in Fahrenheit :");
  Serial.print(fTemp);
  Serial.println(" F");
  Serial.print("Relative Humidity :");
  Serial.print(humidity);
  Serial.println(" %RH");
  delay(500);
  if(counter == 25){
    digitalWrite(reset_pin, HIGH); // устанавливает задержку включения цифрового вывода 13
    delay(1000);            // ожидает второй
    digitalWrite(reset_pin, LOW);  // устанавливает задержку выключения цифрового вывода 13
    delay(1000);
    counter  = 0;

  }
  counter++;
  Serial.println(counter);
}

, 👍0

Обсуждение

Вывод СБРОСА активен низко, а не высоко., @Majenko

Я бью и то, и другое, так что он должен быть сброшен. Интересно., @brad

За исключением того, что вы заканчиваете на НИЗКОМ уровне, так что он остается застрявшим в сбросе. Тебе нужно оказаться на ВЫСОТЕ., @Majenko

Но вы действительно должны спросить себя, почему он дрейфует... согласно данным, он рассчитан на дрейф 0,03 C/год..., @Majenko

@Majenko Он будет дрейфовать на 10 градусов в течение 15 минут. Я махнул на это рукой и приказал собрать все отряды вместе. Это последняя попытка получить что-то полезное от устройства., @brad


1 ответ


Лучший ответ:

2

Вам нужно дать короткий НИЗКИЙ пульс, а не длинный ВЫСОКИЙ пульс:

В настройке:

pinMode(reset_pin, OUTPUT);
digitalWrite(reset_pin, HIGH);

Когда вы хотите сбросить:

digitalWrite(pin_reset, LOW);
delay(1);
digitalWrite(pin_reset, HIGH);
,