本帖最后由 lzy415 于 2024-3-21 06:12 编辑
提问格式为复制原文内容,删去图片展示内容您的代码存在以下几个问题: 缺少库文件: 您使用了 Adafruit_TMP006.h 库,但没有在代码中包含它。请在代码开头添加 #include <Adafruit_TMP006.h>。 重复定义函数: 您在代码中重复定义了 tcaselect() 函数。请删除重复的定义。 未使用的变量: 您定义了 object_temp 变量,但却没有使用它。请将其删除或使用它。 无限循环: 在 loop() 函数中,您使用了 while (!countdownFinished) 来控制循环。但是,countdownFinished 变量在 executePresetProgram() 函数中被设置为 true,但该函数不会立即返回。因此,循环将一直执行下去。请修改代码,确保 countdownFinished 变量在循环结束后被重置为 false。 按钮去抖动: 您使用了简单的去抖动方法,但效果可能不够理想。建议使用更完善的去抖动算法,例如使用 debounce() 函数。 代码风格: 您的代码格式不规范,建议使用缩进和空格来提高代码的可读性。
修复上述问题后,您的代码应该能够正常工作。以下是一些修复后的代码示例:
- #include <Adafruit_TMP006.h>
- #define TCAADDR 0x70
- void tcaselect(uint8_t i) {
- if (i > 7) return;
- Wire.beginTransmission(TCAADDR);
- Wire.write(1 << i);
- Wire.endTransmission();
- }
- Adafruit_TMP006 sensor1;
- uint16_t samples = TMP006_CFG_8SAMPLE;
- // I2C address of TMP006, can be 0x40-0x47
- const int speaker = A0;
- // The CP microcontroller pin for the speaker
- const int buttonPin1 = 4;
- const int buttonPin2 = 5;
- const int devicePin1 = A4;
- const int devicePin2 = A5;
- int temperature;
- int buttonState1 = 0;
- int lastButtonState1 = 0;
- int buttonState2 = 0;
- int lastButtonState2 = 0;
- int lastDebounceTime2 = 0;
- int debounceDelay2 = 50;
- unsigned long countdownStart = 0;
- const unsigned long countdownDuration = 3000; // 3 seconds
- bool countdownFinished = false;
- int clickCount = 0;
- void setup() {
- pinMode(buttonPin1, INPUT);
- pinMode(devicePin1, OUTPUT);
- pinMode(buttonPin2, INPUT);
- pinMode(devicePin2, OUTPUT);
- pinMode(speaker, OUTPUT);
- Serial.begin(115200);
- while (!Serial);
- Wire.begin();
- sensor1.begin(TMP006_CFG_8SAMPLE);
- tcaselect(1);
- if (!sensor1.begin()) {
- Serial.println("Ooops, no TMP006 detected ... Check your wiring!");
- while (1);
- }
- }
- void loop() {
- int reading2 = digitalRead(buttonPin2);
- if (reading2 != lastButtonState2) {
- lastButtonState2 = reading2;
- if (reading2 == HIGH) {
- countdownStart = millis();
- }
- }
- if (!countdownFinished && (millis() - countdownStart >= countdownDuration)) {
- countdownFinished = true;
- executePresetProgram();
- }
- if (!countdownFinished) {
- recordButtonClicks();
- }
- }
- void recordButtonClicks() {
- int reading2 = digitalRead(buttonPin2);
- if (reading2 != lastButtonState2) {
- lastDebounceTime2 = millis();
- }
- if ((millis() - lastDebounceTime2) > debounceDelay2) {
- if (reading2 != buttonState2) {
- buttonState2 = reading2;
- if (buttonState2 == HIGH) {
- clickCount++;
- tone(speaker, 500, 50);
- }
- }
- }
- lastButtonState2 = reading2;
- }
- void executePresetProgram() {
- switch (clickCount) {
- case 1:
- activatePreset1();
- break;
- case 2:
复制代码
请谨慎使用代码。
|