Merge pull request #1492 from guardmedia/usermod-buzzer

Create "buzzer" WLED usermod
This commit is contained in:
Aircoookie 2020-12-15 10:36:27 +01:00 committed by GitHub
commit e348e66f14
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 87 additions and 0 deletions

View File

@ -0,0 +1,81 @@
#pragma once
#include "wled.h"
#include "Arduino.h"
#include <deque>
#define USERMOD_ID_BUZZER 900
#ifndef USERMOD_BUZZER_PIN
#define USERMOD_BUZZER_PIN GPIO_NUM_32
#endif
/*
* Usermods allow you to add own functionality to WLED more easily
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
*
* Using a usermod:
* 1. Copy the usermod into the sketch folder (same folder as wled00.ino)
* 2. Register the usermod by adding #include "usermod_filename.h" in the top and registerUsermod(new MyUsermodClass()) in the bottom of usermods_list.cpp
*/
class BuzzerUsermod : public Usermod {
private:
unsigned long lastTime_ = 0;
unsigned long delay_ = 0;
std::deque<std::pair<uint8_t, unsigned long>> sequence_ {};
public:
/*
* setup() is called once at boot. WiFi is not yet connected at this point.
* You can use it to initialize variables, sensors or similar.
*/
void setup() {
// Setup the pin, and default to LOW
pinMode(USERMOD_BUZZER_PIN, OUTPUT);
digitalWrite(USERMOD_BUZZER_PIN, LOW);
// Beep on startup
sequence_.push_back({ HIGH, 50 });
sequence_.push_back({ LOW, 0 });
}
/*
* connected() is called every time the WiFi is (re)connected
* Use it to initialize network interfaces
*/
void connected() {
// Double beep on WiFi
sequence_.push_back({ LOW, 100 });
sequence_.push_back({ HIGH, 50 });
sequence_.push_back({ LOW, 30 });
sequence_.push_back({ HIGH, 50 });
sequence_.push_back({ LOW, 0 });
}
/*
* loop() is called continuously. Here you can check for events, read sensors, etc.
*/
void loop() {
if (sequence_.size() < 1) return; // Wait until there is a sequence
if (millis() - lastTime_ <= delay_) return; // Wait until delay has elapsed
auto event = sequence_.front();
sequence_.pop_front();
digitalWrite(USERMOD_BUZZER_PIN, event.first);
delay_ = event.second;
lastTime_ = millis();
}
/*
* getId() allows you to optionally give your V2 usermod an unique ID (please define it in const.h!).
* This could be used in the future for the system to determine whether your usermod is installed.
*/
uint16_t getId()
{
return USERMOD_ID_BUZZER;
}
};

View File

@ -14,6 +14,9 @@
#include "../usermods/Temperature/usermod_temperature.h" #include "../usermods/Temperature/usermod_temperature.h"
#endif #endif
//#include "usermod_v2_empty.h" //#include "usermod_v2_empty.h"
#ifdef USERMOD_BUZZER
#include "../usermods/buzzer/usermod_v2_buzzer.h"
#endif
void registerUsermods() void registerUsermods()
{ {
@ -27,4 +30,7 @@ void registerUsermods()
usermods.add(new UsermodTemperature()); usermods.add(new UsermodTemperature());
#endif #endif
//usermods.add(new UsermodRenameMe()); //usermods.add(new UsermodRenameMe());
#ifdef USERMOD_BUZZER
usermods.add(new BuzzerUsermod());
#endif
} }