first commit
This commit is contained in:
139
DeautherX/led.cpp
Normal file
139
DeautherX/led.cpp
Normal file
@@ -0,0 +1,139 @@
|
||||
/* This software is licensed under the MIT License: https://github.com/BlackTechX011/DeautherX */
|
||||
|
||||
#include "led.h"
|
||||
#include "A_config.h"
|
||||
#include <Arduino.h>
|
||||
#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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user