Arduino水泵控制程序编译报错求助:缺少Adafruit_I2CDevice.h
解决Arduino Uno编译错误:
Adafruit_I2CDevice.h缺失问题 你的编译错误根源很明确:代码开头引用了Adafruit_EEPROM_I2C.h和Adafruit_FRAM_I2C.h两个库,但整个程序完全没用到这两个库的任何功能,且这两个库依赖的Adafruit_I2CDevice.h文件未安装,导致编译失败。
方案1:删除多余库引用(最快捷解决)
你的水泵控制逻辑不需要EEPROM或FRAM存储功能,直接删掉代码开头的两行冗余引用即可:
#include <Adafruit_EEPROM_I2C.h> #include <Adafruit_FRAM_I2C.h>
删除后重新编译程序,错误会直接消失。
方案2:若后续需要使用EEPROM/FRAM功能
如果你之后要扩展存储相关功能,需通过Arduino库管理器安装完整依赖:
- 打开Arduino IDE,点击「项目」→「加载库」→「管理库」
- 在搜索框分别搜索并安装:
Adafruit I2C DeviceAdafruit EEPROM I2CAdafruit FRAM I2C
安装完成后重新编译即可。
额外优化建议
你当前的代码在整点(7点/12点)会重复执行水泵和伺服动作(整小时内每1秒触发一次),可以添加一个标记变量确保每小时只执行一次:
// 在全局变量区域添加 bool hasRunThisHour = false; void loop() { DateTime now = rtc.now(); if ((now.hour() == 7 || now.hour() == 12) && !hasRunThisHour) { // 移动伺服到开启位置 myservo.write(0); delay(2000); // 启动水泵 digitalWrite(pumpPin, HIGH); delay(10000); // 关闭水泵 digitalWrite(pumpPin, LOW); // 移动伺服到关闭位置 myservo.write(180); hasRunThisHour = true; } else if (now.minute() != 0) { // 分钟非0时重置标记,确保下一个整点可再次执行 hasRunThisHour = false; } delay(1000); }
内容的提问来源于stack exchange,提问作者copperton
相关产品推荐
相关产品推荐

