108 lines
3.1 KiB
C++
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);
|
|
}
|
|
}
|