Files
OBPkp61/src/led.cpp

108 lines
3.1 KiB
C++

#include "main.h"
#include "led.h"
// Logging
static const char* TAG = "LED";
int16_t led_brightness = 512; // analog pin with ledc: 0 .. 4095
int16_t rgb_brightness = 768;
void led_init() {
// internal user led (red)
digitalWrite(LED_USER, HIGH);
delay(1000);
digitalWrite(LED_USER, LOW);
// LEDC
ledcSetup(LEDC_BUZZER, LEDC_BASE_FREQ, LEDC_RES_BUZZER);
ledcSetup(LEDC_LED_A, LEDC_BASE_FREQ, LEDC_RES_LED);
ledcSetup(LEDC_LED_B, LEDC_BASE_FREQ, LEDC_RES_LED);
ledcSetup(LEDC_LED_C, LEDC_BASE_FREQ, LEDC_RES_LED);
ledcSetup(LEDC_RGBLED_R, LEDC_BASE_FREQ, LEDC_RES_LED);
ledcSetup(LEDC_RGBLED_G, LEDC_BASE_FREQ, LEDC_RES_LED);
ledcSetup(LEDC_RGBLED_B, LEDC_BASE_FREQ, LEDC_RES_LED);
ledcAttachPin(LED_A, LEDC_LED_A);
ledcAttachPin(LED_B, LEDC_LED_B);
ledcAttachPin(LED_C, LEDC_LED_C);
ledcAttachPin(RGBLED_R, LEDC_RGBLED_R);
ledcAttachPin(RGBLED_G, LEDC_RGBLED_G);
ledcAttachPin(RGBLED_B, LEDC_RGBLED_B);
}
void led_test() {
// all led one after another to test functionality
ESP_LOGI(TAG, "LED test started");
// Onbard RGB LED, inverted mode
digitalWrite(LED_IR, LOW);
digitalWrite(LED_IG, HIGH);
digitalWrite(LED_IB, HIGH);
delay(500);
digitalWrite(LED_IR, HIGH);
digitalWrite(LED_IG, LOW);
delay(500);
digitalWrite(LED_IG, HIGH);
digitalWrite(LED_IB, LOW);
delay(500);
digitalWrite(LED_IB, HIGH);
// destination leds
ledcWrite(LEDC_LED_A, 0);
delay(250);
// test every led
ledcWrite(LEDC_LED_A, led_brightness);
ledcWrite(LEDC_LED_B, 0);
ledcWrite(LEDC_LED_C, 0);
delay(500);
ledcWrite(LEDC_LED_A, 0);
ledcWrite(LEDC_LED_B, led_brightness);
delay(500);
ledcWrite(LEDC_LED_B, 0);
ledcWrite(LEDC_LED_C, led_brightness);
delay(500);
ledcWrite(LEDC_LED_C, 0);
// enclosure rgb led (common cathode, so low is off)
ledcWrite(LEDC_RGBLED_R, rgb_brightness);
ledcWrite(LEDC_RGBLED_G, 0);
ledcWrite(LEDC_RGBLED_B, 0);
delay(700);
ledcWrite(LEDC_RGBLED_R, 0);
ledcWrite(LEDC_RGBLED_G, rgb_brightness);
delay(700);
ledcWrite(LEDC_RGBLED_G, 0);
ledcWrite(LEDC_RGBLED_B, rgb_brightness);
delay(700);
ledcWrite(LEDC_RGBLED_B, 0);
ESP_LOGI(TAG, "LED test finished");
}
void led_blink(uint8_t channel, uint8_t count, int16_t brightness, uint32_t interval_ms) {
ledcWrite(channel, 0);
for (uint16_t i = 0; i < count; i++) {
delay(interval_ms);
ledcWrite(channel, brightness);
delay(interval_ms);
ledcWrite(channel, 0);
}
delay(interval_ms);
}
void led_set_mode() {
if (mode == 'C') {
ledcWrite(LEDC_LED_A, ledmode == 'N' ? led_brightness : 0); // Nightmode
ledcWrite(LEDC_LED_B, audiomode == 'D' ? led_brightness : 0); // Silence
ledcWrite(LEDC_LED_C, ap_enabled ? led_brightness : 0); // Accesspoint
} else {
ledcWrite(LEDC_LED_A, destination == 'A' ? led_brightness : 0);
ledcWrite(LEDC_LED_B, destination == 'B' ? led_brightness : 0);
ledcWrite(LEDC_LED_C, destination == 'C' ? led_brightness : 0);
}
}