我尝试用arduino开发w800时发现,板载的温湿度传感器cht8305c一直读取到的数都是0。尽管换过多种触发方式,但都没有效果,测量传感器的vcc也有3.27多。请问有什么解决方法或示例程序可以学习?
查看更多
例程可以在这个链接下载w800读数一直是0建议检查一下IIC的引脚地址/初始化是否正确
发布 问题
deepseek 客服
分享 好友
手机 浏览
回到 顶部
我照例程试了下,结果返回是“数据异常 (RAW_T: 0000)”,麻烦您给看下程序是不是有问题>>
include <Arduino.h>
define SCL_PIN 15
define SDA_PIN 14
define CHT8305_ADDR 0x40
// 基础 I2C 信号模拟
void i2c_delay() {
delayMicroseconds(50);
}
void i2c_start() {
pinMode(SDA_PIN, OUTPUT);
digitalWrite(SDA_PIN, HIGH);
digitalWrite(SCL_PIN, HIGH);
i2c_delay();
digitalWrite(SDA_PIN, LOW);
i2c_delay();
digitalWrite(SCL_PIN, LOW);
i2c_delay();
}
void i2c_stop() {
pinMode(SDA_PIN, OUTPUT);
digitalWrite(SDA_PIN, LOW);
i2c_delay();
digitalWrite(SCL_PIN, HIGH);
i2c_delay();
digitalWrite(SDA_PIN, HIGH);
i2c_delay();
}
bool i2c_write(uint8_t byte) {
pinMode(SDA_PIN, OUTPUT);
for (int i = 0; i < 8; i++) {
}
pinMode(SDA_PIN, INPUT_PULLUP);
digitalWrite(SCL_PIN, HIGH);
i2c_delay();
bool ack = (digitalRead(SDA_PIN) == LOW);
digitalWrite(SCL_PIN, LOW);
return ack;
}
uint8_t i2c_read(bool ack) {
uint8_t byte = 0;
pinMode(SDA_PIN, INPUT_PULLUP);
for (int i = 0; i < 8; i++) {
}
pinMode(SDA_PIN, OUTPUT);
digitalWrite(SDA_PIN, ack ? LOW : HIGH);
digitalWrite(SCL_PIN, HIGH);
i2c_delay();
digitalWrite(SCL_PIN, LOW);
return byte;
}
void setup() {
Serial.begin(115200);
// 官方建议:初始化引脚为高电平,稳定总线
pinMode(SCL_PIN, OUTPUT);
pinMode(SDA_PIN, OUTPUT);
digitalWrite(SCL_PIN, HIGH);
digitalWrite(SDA_PIN, HIGH);
delay(1000);
Serial.println("CHT8305C 启动中...");
}
void loop() {
// 1. 触发测量
i2c_start();
if (i2c_write(CHT8305_ADDR << 1)) {
}
delay(100); // 等待 ADC 转换
// 2. 读取数据
i2c_start();
if (i2c_write((CHT8305_ADDR << 1) | 1)) {
} else {
}
delay(2000);
}