/* This software is licensed under the MIT License: https://github.com/BlackTechX011/DeautherX */ #include "led.h" #include "A_config.h" #include #include "language.h" #include "settings.h" #include "Attack.h" #include "Scan.h" extern Attack attack; extern Scan scan; namespace led { // ===== PRIVATE ===== // LED_MODE mode = OFF; // Определяем пины для отдельных светодиодов const uint8_t ZLED_PIN_R = 15; // D8 - Красный const uint8_t ZLED_PIN_G = 16; // D0 - Зеленый const uint8_t ZLED_PIN_B = 13; // D7 - Синий // Яркость для каждого режима (0-255) const uint8_t BRIGHTNESS_HIGH = 255; const uint8_t BRIGHTNESS_MED = 128; const uint8_t BRIGHTNESS_LOW = 64; void setColor(uint8_t r, uint8_t g, uint8_t b) { // Для отдельных светодиодов используем digitalWrite // Если нужна яркость - можно использовать analogWrite с ШИМ пинами // Красный светодиод if (ZLED_PIN_R < 255) { digitalWrite(ZLED_PIN_R, r > 0 ? HIGH : LOW); } // Зеленый светодиод if (ZLED_PIN_G < 255) { digitalWrite(ZLED_PIN_G, g > 0 ? HIGH : LOW); } // Синий светодиод if (ZLED_PIN_B < 255) { digitalWrite(ZLED_PIN_B, b > 0 ? HIGH : LOW); } } // Функции для отдельных цветов (опционально) void setRed() { setColor(255, 0, 0); } void setGreen() { setColor(0, 255, 0); } void setBlue() { setColor(0, 0, 255); } void setYellow() { setColor(255, 255, 0); } void setPurple() { setColor(255, 0, 255); } void setCyan() { setColor(0, 255, 255); } void setWhite() { setColor(255, 255, 255); } // ===== PUBLIC ===== // void setup() { // Настраиваем пины как выходы if (ZLED_PIN_R < 255) pinMode(ZLED_PIN_R, OUTPUT); if (ZLED_PIN_G < 255) pinMode(ZLED_PIN_G, OUTPUT); if (ZLED_PIN_B < 255) pinMode(ZLED_PIN_B, OUTPUT); // Выключаем все светодиоды при старте setColor(0, 0, 0); } void update() { if (!settings::getLEDSettings().enabled) { setMode(OFF); } else if (scan.isScanning() && (scan.deauths < settings::getSnifferSettings().min_deauth_frames)) { setMode(SCAN); } else if (attack.isRunning()) { setMode(ATTACK); } else { setMode(IDLE); } } void setMode(LED_MODE new_mode, bool force) { if ((new_mode != mode) || force) { mode = new_mode; switch (mode) { case OFF: setColor(0, 0, 0); // Все выключено break; case SCAN: setColor(0, 255, 0); // Зеленый - сканирование break; case ATTACK: setColor(255, 0, 0); // Красный - атака break; case IDLE: setColor(0, 0, 255); // Синий - режим ожидания break; } } } // Дополнительные функции для более сложных индикаций void blinkRed(int times = 3, int delayMs = 200) { for (int i = 0; i < times; i++) { setRed(); delay(delayMs); setColor(0, 0, 0); delay(delayMs); } } void blinkGreen(int times = 3, int delayMs = 200) { for (int i = 0; i < times; i++) { setGreen(); delay(delayMs); setColor(0, 0, 0); delay(delayMs); } } }