Разобраться в готовом коде

Пытаюсь скомпелировать готовый код ардуино. Выдает кучу ошибок.

   Проект простого хлопкового выключателя света.
   Использует амлитудный анализ сигнала с микрофонного модуля MAX8914.
   - Настраиваемое количество хлопков для включения / выключения.
   - Настраиваемое временное окно между хлопками (фильтрация постороронних резких звуков).
   - Можно управлять любой нагрузкой при помощи реле, mosfet и т.д.
*/

/* ---- Отладка и сторожевой таймер---- */
#define DEBUG_EN  0       // Отладка по Serial, 1 - вкл / 0 - выкл
#define WDT_EN    0       // Сторожевой таймер, 1 - вкл / 0 - выкл

/* ---- Настройка пинов ---- */
#define MIC_PIN   A1      // Аналоговый пин микрофона
#define REL_PIN   4       // Цифровой пин реле / mosfet

/* ---- Настройка распознавания (необходимо подобрать под себя!) ---- */
#define CLAP_WINDOW_H 600 // Макс. значение периода между хлопками (мс)
#define CLAP_WINDOW_L 250 // Мин. значение периода между хлопками (мс)
#define CLAP_TIMEOUT  600 // Таймаут распознования хлопков (мс)
#define CLAP_LVL      180 // Пороговый уровень относительной громкости хлопков
#define CLAP_NUM      2   // Количество хлопков (не менее 2х)

#include <VolAnalyzer.h>
#include <GyverWDT.h>

VolAnalyzer VA (MIC_PIN); // Объект анализатора громкости

#if (DEBUG_EN)
#define DBG_PRINT(x)    (Serial.print(x))
#define DBG_PRINTLN(x)  (Serial.println(x))
#else
#define DBG_PRINT(x)
#define DBG_PRINTLN(x)
#endif

void setup() {
#if (WDT_EN)                                       // Если WDT активен
  Watchdog.disable();                              // Всегда отключаем watchdog при старте
#endif

  pinMode(REL_PIN, OUTPUT);                        // Пин реле как выход
  digitalWrite(REL_PIN, LOW);                      // Выключаем реле

#if defined (INTERNAL2V56)                         // Если доступно опорное 2.56V
  analogReference(INTERNAL2V56);                   // Выбираем его
#endif

#if (DEBUG_EN)                                     // Если отладка активна
  Serial.begin(9600);                              // Подключаем Serial
#endif

#if (WDT_EN)                                       // Если WDT активен
  Watchdog.enable(RST_MODE, WDT_TIMEOUT_512MS);    // Режим сторжевого сброса , таймаут ~0.5 секунды
#endif
}

void loop() {
  static long timer = millis();                     // Переменная таймера
  static uint8_t count = 0;                         // Счетчик хлопков
  static bool enable = false;                       // Флаг состояния реле

  if (VA.tick()) {                                  // Опрос анализатора громкости
    if (VA.pulse() && (VA.getMax() >= CLAP_LVL)) {  // Если скачок громкости + пик выше порога = возможный хлопок
      if ((millis() - timer) >= CLAP_WINDOW_L && (millis() - timer) <= CLAP_WINDOW_H) {
        count++;                                    // Время между хлопками попало в интервал - увеличиваем счетчик
        DBG_PRINT("Clap detected: ");               // Выводим отладочную инфу
        DBG_PRINTLN(count);                         // И текущее значение счетчика
      } else count = 0;                             // Если интервал нарушен - все в топку
      timer = millis();                             // Обновляем таймер
    }
  }

  if (count and millis() - timer >= CLAP_TIMEOUT) {  // Если хлопки уже давно не происходят (таймаут)
    DBG_PRINTLN("Clap timeout");                     // Выводим сообщение
    if (count == (CLAP_NUM - 1)) {                   // Если нахлопали нужное количество раз
      enable = !enable;                              // Инвертируем флаг состояния реле
      digitalWrite(REL_PIN, enable);                 // Управляем пином реле
      DBG_PRINTLN(enable ? "ENABLE" : "DISABLE");    // Выводим состояние реле
    } count = 0;                                     // Сбрасываем счетчик
  }

#if (WDT_EN)                                         // Если WDT активен
  Watchdog.reset();                                  // Cброс watchdog - устройство не зависло
#endif
}```





```In file included from C:\Users\Алексей\Documents\Arduino\Simple-clap-switch\Simple-clap-switch.ino:25:0:

C:\Users\�������\Documents\Arduino\libraries\GyverWDT-main\src/GyverWDT.h: In member function 'void GyverWDT::disable()':

C:\Users\�������\Documents\Arduino\libraries\GyverWDT-main\src/GyverWDT.h:135:7: error: 'WDTCSR' was not declared in this scope

       WDTCSR = ((1 << WDCE) | (1 << WDE));  // Разблокировка доступа к watchdog, см. документацию на МК

       ^~~~~~

C:\Users\�������\Documents\Arduino\libraries\GyverWDT-main\src/GyverWDT.h:135:7: note: suggested alternative: 'WDTCR'

       WDTCSR = ((1 << WDCE) | (1 << WDE));  // Разблокировка доступа к watchdog, см. документацию на МК

       ^~~~~~

       WDTCR

C:\Users\�������\Documents\Arduino\libraries\GyverWDT-main\src/GyverWDT.h: In member function 'void GyverWDT::enable(uint8_t, uint8_t)':

C:\Users\�������\Documents\Arduino\libraries\GyverWDT-main\src/GyverWDT.h:152:7: error: 'WDTCSR' was not declared in this scope

       WDTCSR = ((1 << WDCE) | (1 << WDE));   // Разблокировка доступа к watchdog, см. документацию на МК

       ^~~~~~

C:\Users\�������\Documents\Arduino\libraries\GyverWDT-main\src/GyverWDT.h:152:7: note: suggested alternative: 'WDTCR'

       WDTCSR = ((1 << WDCE) | (1 << WDE));   // Разблокировка доступа к watchdog, см. документацию на МК

       ^~~~~~

       WDTCR

exit status 1
Ошибка компиляции для платы ATtiny25/45/85 (No bootloader).

Компилятор ругается на эту библиотеку. Видимо, нужно обращаться к ее автору

Странно. А под какую плату компилируете?

последняя строчка.

Вот вот)))

Совместимость
AVR ATmega328p/32U4/2560 & ATtiny85/84/167

Гайвер, видимо, забил на полное тестирование ))

что в этих тиньках нет этого регистра?
я просто не знаю.

#define WDTCSR WDTCR //компилятор открытым текстом предлагает)

1 лайк

Или нет поддержки 25/45ой

Бывет ,немного по другому называются

По идее 85/45/25 между собой совместимы

ATtiny85

Значит забил на полное тестирование ))

Обращайтесь к автору

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request’ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

полез в даташит

а вот 24/44/84

1 лайк

Нет. 24/ 44/ 84 - одно, а
25 /45/ 85 -другое
Screenshot_200png

А при чем здесь 24/44/84? Упс, увидел, очипятка ))

Гайвер накосячил

и во т еще

короче гайвер…

@Andromeda совет из #8 спасет ваше положение.

Pазве попробуйте дописать в шапке

#define WDCSR 0x21