Как инициализировать сброс на цифровом термометре 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);
}
@brad, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 2
Вам нужно дать короткий НИЗКИЙ пульс, а не длинный ВЫСОКИЙ пульс:
В настройке:
pinMode(reset_pin, OUTPUT);
digitalWrite(reset_pin, HIGH);
Когда вы хотите сбросить:
digitalWrite(pin_reset, LOW);
delay(1);
digitalWrite(pin_reset, HIGH);
,
@Majenko
Смотрите также:
- DS18B20 работает ненадежно.
- Проблемы с подключением I2C на ESP8266 — 12F, какие контакты использовать?
- Как перевести Arduino Nano в спящий режим с низким энергопотреблением (<0,05 мА)
- MAX30100 не работает
- Колебания показаний датчика температуры LM35 (+- 5°C) с Arduino UNO
- Ведомое устройство Arduino с двумя мастерами, использующими одну и ту же шину I2C?
- Библиотека I2C MIFARE RC522
- Не удалось выделить SSD1306 при добавлении константы
Вывод СБРОСА активен низко, а не высоко., @Majenko
Я бью и то, и другое, так что он должен быть сброшен. Интересно., @brad
За исключением того, что вы заканчиваете на НИЗКОМ уровне, так что он остается застрявшим в сбросе. Тебе нужно оказаться на ВЫСОТЕ., @Majenko
Но вы действительно должны спросить себя, почему он дрейфует... согласно данным, он рассчитан на дрейф 0,03 C/год..., @Majenko
@Majenko Он будет дрейфовать на 10 градусов в течение 15 минут. Я махнул на это рукой и приказал собрать все отряды вместе. Это последняя попытка получить что-то полезное от устройства., @brad