首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决错误: DallasTemperature库(Arduino)没有在此范围内声明“产”

如何解决错误: DallasTemperature库(Arduino)没有在此范围内声明“产”
EN

Stack Overflow用户
提问于 2020-09-29 15:35:36
回答 2查看 1.4K关注 0票数 1

我正试图从我的温度传感器上采集温度,我正面临着这样的错误:

成员函数‘void /home/myuser/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp:’中的DallasTemperature::blockTillConversionComplete(uint8_t)’:/home/myuser/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp:446:13:错误:在此作用域中未声明“DallasTemperature::blockTillConversionComplete(uint8_t)’:/home/myuser/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp:446:13:”;^ 成员函数‘bool DallasTemperature::recallScratchPad(const uint8_t*)中的/home/myuser/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp::/home/myuser/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp:543:11:错误:>’收益率‘没有在这个作用域()中声明;

这是我的代码,基于https://www.instructables.com/id/How-to-use-DS18B20-Temperature-Sensor-Arduino-Tuto/

代码语言:javascript
复制
    #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);
    }

Librairies版本:

  • OneWire-2.3.5
  • DallasTemperature-3.9.0 (当然,我尝试过再进口)

在DallasTemperature.cpp中,错误似乎引用了以下代码:

代码语言:javascript
复制
// 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;
  
}

我在这里是因为我在谷歌上没有发现一个涉及“收益率()”和DallasTemperature的错误.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-01 07:28:59

达拉斯温度-3.9.0是在2020年-09-02年推出的,我的项目有点老了,我是第一次创建它,从那以后我就没能完成它。我使用3.8.0版本,我重新安装它,它再次工作。

票数 0
EN

Stack Overflow用户

发布于 2020-09-29 18:21:47

有些平台不实现yield,因此您可以从库的代码中删除对它的调用。调用yield将控制权传递给其他任务,如果您没有其他任务,则无论如何它都是多余的。

删除它可以通过在文件顶部提供一个空的实现来完成。

如果你确信你的董事会应该支持它。你可能使用了一个错误的软件栈。尝试下载官场 Arduino IDE。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64122915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档