diff --git a/platformio.ini b/platformio.ini index 49d7584766..630035817e 100644 --- a/platformio.ini +++ b/platformio.ini @@ -11,8 +11,8 @@ [platformio] default_envs = m5stack-cardputer - ;m5stack-sticks3 - ;m5stack-cplus2 + m5stack-sticks3 + m5stack-cplus2 ;m5stack-cplus1_1 ;LAUNCHER_m5stack-cplus1_1 ;m5stack-core2 @@ -129,7 +129,7 @@ build_flags = -DEEPROMSIZE=128 -DLH=8 -DLW=6 - -flto + ;-flto -ffunction-sections -fdata-sections -Os @@ -202,7 +202,7 @@ lib_deps = bitbank2/AnimatedGIF bitbank2/PNGdec @ ^1.1.2 ESP32Async/ESPAsyncWebServer - fastled/FastLED @^3.10.3 + https://github.com/bmorcelli/FastLED jgromes/RadioLib @ ^7.4.0 ; Pinned to fixed commits so upstream changes never break our patches ; (applied by patch_library_conflicts.py): IRQ-less I2C polling for diff --git a/src/core/display.cpp b/src/core/display.cpp index 3b4f210baa..8c20a8a1e8 100644 --- a/src/core/display.cpp +++ b/src/core/display.cpp @@ -927,19 +927,11 @@ void drawStatusBar() { tft.drawLine(5, 25, tftWidth - 6, 25, bruceConfig.priColor); } - if (clock_set) { - setTftDisplay(12, 12, bruceConfig.priColor, 1, bruceConfig.bgColor); - tft.fillRect(12, 12, 60, LH, bruceConfig.bgColor); -#if defined(HAS_RTC) - updateTimeStr(_rtc.getTimeStruct()); -#else - updateTimeStr(rtc.getTimeStruct()); -#endif - tft.print(timeStr); - } else { - setTftDisplay(12, 12, bruceConfig.priColor, 1, bruceConfig.bgColor); - tft.print("BRUCE " + String(BRUCE_VERSION)); - } + // === УБРАЛИ ЧАСЫ === + setTftDisplay(12, 12, bruceConfig.priColor, 1, bruceConfig.bgColor); + tft.fillRect(12, 12, 60, LH, bruceConfig.bgColor); + tft.print("BRUCE"); + // =================== int iconCount = 0; bool showSD = sdcardMounted; diff --git a/src/core/menu_items/IRMenu.cpp b/src/core/menu_items/IRMenu.cpp index 987881e0fc..0e1183f2bf 100644 --- a/src/core/menu_items/IRMenu.cpp +++ b/src/core/menu_items/IRMenu.cpp @@ -6,16 +6,19 @@ #include "modules/ir/custom_ir.h" #include "modules/ir/ir_jammer.h" #include "modules/ir/ir_read.h" +#include "modules/ir/conditioners.h" // <--- ДОБАВЛЕНО ДЛЯ AC void IRMenu::optionsMenu() { #if defined(ARDUINO_M5STICK_S3) bool prevPower = M5.Power.getExtOutput(); M5.Power.setExtOutput(true); // ENABLE 5V OUTPUT #endif + options = { - {"TV-B-Gone", StartTvBGone }, - {"Custom IR", otherIRcodes }, - {"IR Read", [=]() { IrRead(); } }, + {"TV-B-gone", StartTvBGone }, // Переименовано + {"Custom IR", otherIRcodes }, // Переименовано + {"Ir read", [=]() { IrRead(); } }, // Переименовано + {"AC", [=]() { conditionersMenu(); } }, // <--- НОВЫЙ ПУНКТ #if !defined(LITE_VERSION) {"IR Jammer", startIrJammer }, // Simple frequency-adjustable jammer #endif diff --git a/src/modules/ir/conditioners.cpp b/src/modules/ir/conditioners.cpp new file mode 100644 index 0000000000..000a0670d2 --- /dev/null +++ b/src/modules/ir/conditioners.cpp @@ -0,0 +1,27 @@ +#include "conditioners.h" +#include "core/display.h" +#include "core/mykeyboard.h" +#include "custom_ir.h" +#include +#include + +void sendGreeAC(bool power, int temp, int mode) { + IRGreeAC ac(bruceConfigPins.irTx); + ac.begin(); + ac.setPower(power); + ac.setTemp(temp); + ac.setMode(mode); // 0=Auto, 1=Cool, 2=Dry, 3=Fan, 4=Heat + ac.setFan(0); // 0=Auto + ac.send(); + delay(200); +} + +void conditionersMenu() { + options = { + {"ON (Cool 22)", [=]() { displayRedStripe("Sending ON..."); sendGreeAC(true, 22, 1); displaySuccess("Done!"); }}, + {"ON (Heat 24)", [=]() { displayRedStripe("Sending HEAT..."); sendGreeAC(true, 24, 4); displaySuccess("Done!"); }}, + {"OFF", [=]() { displayRedStripe("Sending OFF..."); sendGreeAC(false, 22, 1); displaySuccess("Done!"); }}, + {"Back", yield} + }; + loopOptions(options); +} diff --git a/src/modules/ir/conditioners.h b/src/modules/ir/conditioners.h new file mode 100644 index 0000000000..3bae656c42 --- /dev/null +++ b/src/modules/ir/conditioners.h @@ -0,0 +1,8 @@ +#ifndef __CONDITIONERS_H__ +#define __CONDITIONERS_H__ + +#include + +void conditionersMenu(); + +#endif diff --git a/src/modules/ir/ir_read.cpp b/src/modules/ir/ir_read.cpp index 2f9cc95680..85b15a9ab1 100644 --- a/src/modules/ir/ir_read.cpp +++ b/src/modules/ir/ir_read.cpp @@ -77,11 +77,13 @@ static String getParsedProtocolName(const decode_results &r) { } void IrRead::setup() { + // === КАК В 1.11.1 === irrecv.enableIRIn(); #ifdef USE_BOOST PPM.enableOTG(); #endif + // Проверяем, что пин приёмника есть в списке IR_RX_PINS const std::vector> pins = IR_RX_PINS; int count = 0; for (auto pin : pins) { @@ -89,9 +91,12 @@ void IrRead::setup() { } if (count == 0) gsetIrRxPin(true); - setup_ir_pin(bruceConfigPins.irRx, INPUT); + // КАК В 1.11.1: обычный INPUT, без setup_ir_pin (он и был источником шума). + pinMode(bruceConfigPins.irRx, INPUT); + if (headless) return; returnToMenu = true; + std::vector