Closed stosc closed 1 year ago
驱动DS18b20失败,无法正确读数。同样的程序在esp32c3中可以正常准确读数。
/********************************************************************* ——————1.开发环境:Arduino IDE—————————————————————————————————— ——————2.使用开发板型号:Arduino UNO—————————————————————— ——————3.传感器类型:DS18B20数字温度传感器——————————————————————— ----esp32 c3 验证通过———————————————————————————— *********************************************************************/ int DSPIN = 6; void setup() { // put your setup code here, to run once: Serial.begin(115200); } void loop() { // put your main code here, to run repeatedly: double temp = TempRead(); temp *= 0.0625;//转换精度为0.0625/LSB Serial.println(temp); delay(500); } boolean DS18B20_Init() { pinMode(DSPIN, OUTPUT); digitalWrite(DSPIN, HIGH); delayMicroseconds(5); digitalWrite(DSPIN, LOW); delayMicroseconds(750);//480-960 digitalWrite(DSPIN, HIGH); pinMode(DSPIN, INPUT); int t = 0; while(digitalRead(DSPIN)) { t++; if(t > 60) return false; delayMicroseconds(1); } t = 480 - t; pinMode(DSPIN, OUTPUT); delayMicroseconds(t); digitalWrite(DSPIN, HIGH); return true; } void DS18B20_Write(byte data) { pinMode(DSPIN, OUTPUT); for(int i=0; i<8; i++) { digitalWrite(DSPIN, LOW); delayMicroseconds(10); if(data & 1) digitalWrite(DSPIN, HIGH); else digitalWrite(DSPIN, LOW); data >>= 1; delayMicroseconds(50); digitalWrite(DSPIN, HIGH); } } byte DS18B20_Read() { pinMode(DSPIN, OUTPUT); digitalWrite(DSPIN, HIGH); delayMicroseconds(2); byte data = 0; for(int i=0; i<8; i++) { digitalWrite(DSPIN, LOW); delayMicroseconds(1); digitalWrite(DSPIN, HIGH); pinMode(DSPIN, INPUT); delayMicroseconds(5); data >>= 1; if(digitalRead(DSPIN)) data |= 0x80; delayMicroseconds(55); pinMode(DSPIN, OUTPUT); digitalWrite(DSPIN, HIGH); } return data; } int TempRead() { if(!DS18B20_Init()) return 0; DS18B20_Write(0xCC);//发跳过ROM命令 DS18B20_Write(0x44);//发读开始转换命令 if(!DS18B20_Init()) return 0; DS18B20_Write(0xCC);//发跳过ROM命令 DS18B20_Write(0xBE);//读寄存器,共九字节,前两字节为转换值 int temp = DS18B20_Read();//低字节 temp |= DS18B20_Read() << 8;//高字节 return temp; }
应该打印正确的温度
显示 4096 拔掉 数据线的连接后 显示 0
win10h2
1.0.1.1
建议检查硬件连接(如是否有上拉电阻,是否存在供电,IO口连接是否有误等)
如果硬件确定没问题,建议使用逻辑分析仪进行数据采集分析,并确定错误发生在什么地方。
自行编写的库文件不属于本仓库处理的问题,除非是具体的某个API或者用到的库的bug
我测试过了,你把主频改到48M,串口波特率改为9600,就可以正常获取到数据了
温度传感器 DS18B20
文档也已经更新
描述一下这个bug / Describe the bug
驱动DS18b20失败,无法正确读数。同样的程序在esp32c3中可以正常准确读数。
复现步骤 / To Reproduce
如果正常,应该是什么样 / Expected behavior
应该打印正确的温度
截图 / Screenshots
显示 4096 拔掉 数据线的连接后 显示 0
日志 / Logs
显示 4096 拔掉 数据线的连接后 显示 0
系统 / System
win10h2
PACK包版本 / Version
1.0.1.1
验证