c++ - 如何解决错误:DallasTemperature 库 (Arduino) 在此范围内未声明“yield”
问题描述
我正在尝试从我的温度传感器收集温度,但我遇到了这个错误:
/home/myuser/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp:在成员函数'void DallasTemperature::blockTillConversionComplete(uint8_t)'中:/home/myuser/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp:446:13:错误: 'yield' 没有在这个范围内声明 yield(); ^
/home/myuser/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp:在成员函数'bool DallasTemperature::recallScratchPad(const uint8_t*)'中:/home/myuser/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp:543:11:错误:>'yield' 未在此范围内声明 yield();
这是我的代码,基于https://www.instructables.com/id/How-to-use-DS18B20-Temperature-Sensor-Arduino-Tuto/:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature tempSensor(&oneWire);
void setup()
{
Serial.begin(9600);
}
void loop()
{
tempSensor.requestTemperatures();
float temperatureC = tempSensor.getTempCByIndex(0);
Serial.println(temperatureC);
}
库版本:
- OneWire-2.3.5
- DallasTemperature-3.9.0
(我当然尝试过重新导入它们)
DallasTemperature.cpp 中的代码似乎与错误有关:
// Sends command to one or more devices to recall values from EEPROM to scratchpad
// If optional argument deviceAddress is omitted the command is send to all devices
// Returns true if no errors were encountered, false indicates failure
bool DallasTemperature::recallScratchPad(const uint8_t* deviceAddress) {
if (_wire->reset() == 0)
return false;
if (deviceAddress == nullptr)
_wire->skip();
else
_wire->select(deviceAddress);
_wire->write(RECALLSCRATCH,parasite);
// Specification: Strong pullup only needed when writing to EEPROM (and temp conversion)
unsigned long start = millis();
while (_wire->read_bit() == 0) {
// Datasheet doesn't specify typical/max duration, testing reveals typically within 1ms
if (millis() - start > 20) return false;
yield();
}
return _wire->reset() == 1;
}
我在这里是因为我在 Google 上没有发现涉及“yield()”和 DallasTemperature 的错误...
解决方案
DallasTemperature-3.9.0 于 2020 年 9 月 2 日发布,我的项目有点老,我之前第一次创建它,后来我无法完成它。我使用的是 3.8.0 版本,我重新安装它并再次工作。
推荐阅读
- aws-lambda - 当 Amplifyjs React 应用程序向 VPC 后面的 Lambda 发出请求时出现 CORS 错误
- ruby-on-rails - Rspec - 如何关闭系统规范上的当前浏览器?
- javascript - 使用 gatsby-plugin-intl 调整 slug / 路由
- php - 如果键 [any][0] 是相同的数字,则合并/组合(不确定我需要哪个?)php数组
- android - 如何在http帖子正文中将图像作为“文件”发送
- flutter - 任务“:cloud_firestore:compileDebugJavaWithJavac”执行失败
- c++ - 如何通过指向成员数据的指针调用成员函数?
- firebase - 我必须向 Firebase 使用的 API 密钥授予哪些 Google Cloud API 权限?
- regex - 通过正则表达式从 img htmk 标签中提取图像源链接
- java - 如何创建kafka监听器并在spring上下文中动态添加它们