Помогите кто может. Второй день бьюсь с ESP32. При использовании оператора if-else в месте с командами bleKeyboard.press и bleKeyboard.release выполняется цикличная перезагрузка ESP. Программа работает, но перезагружается примерно каждые 15 секунд. Если убрать bleKeyboard.releaseAll(); перезапуск прекращается. ПОМОГИТЕ!!!! например: Код (C++): #include <BleKeyboard.h> BleKeyboard bleKeyboard; #define BT1 34 // ПИН к которому подключена кнопка А #define BT2 35 // ПИН к которому подключена кнопка В void setup () { // запуск последовательного порта Serial.begin (115200); pinMode(BT1, INPUT_PULLUP); // ПИН кнопки как вход pinMode(BT2, INPUT_PULLUP); // ПИН кнопки как вход pinMode(LED_BUILTIN, OUTPUT); // встроеный светодиод bleKeyboard.begin(); } void loop () { digitalWrite (LED_BUILTIN, bleKeyboard.isConnected()); if (!digitalRead(BT1)) // если нажата кнока A { bleKeyboard.press('C'); // нажимаем клавишу C } else { bleKeyboard.releaseAll(); // отпускаем все клавиши } if (!digitalRead(BT2)) // если нажата кнока B { bleKeyboard.press('V'); // нажимаем клавишу V } else { bleKeyboard.releaseAll(); // отпускаем все клавиши } }
Там в примерах везде задержки натолканы.... А у вас программа, когда кнопки не нажаты постоянно долбит bleKeyboard.releaseAll(); // отпускаем все клавиши а это точно допустимо!? Возможно алгоритм должен быть типа кнопку нажали - вызвали bleKeyboard.press('C'); кнопку отпустили - вызвали bleKeyboard.releaseAll(); но только один раз!!! Я сам конечно не проверял - но попробовать наверное стоит.....
Всем спасибо! Действительно проблема в WD/ Вот рабочий вариант. Код (C++): #include <BleKeyboard.h> BleKeyboard bleKeyboard; #define VRX_PIN 32 // ESP32 pin GIOP36 (ADC0) connected to VRX pin #define VRY_PIN 33 // ESP32 pin GIOP39 (ADC0) connected to VRY pin int currStateY1; int prevStateY1; int currStateY2; int prevStateY2; int currStateX1; int prevStateX1; int currStateX2; int prevStateX2; void setup () { // запуск последовательного порта Serial.begin (115200); bleKeyboard.begin(); } void loop () { int sensorValueY = analogRead(VRX_PIN); int sensorValueX = analogRead(VRY_PIN); { // Y+ currStateY1 = sensorValueY > 1000; if (currStateY1 != prevStateY1) { if (currStateY1 == (sensorValueY < 10)) { bleKeyboard.press('w'); } else { bleKeyboard.release('w'); } } prevStateY1 = currStateY1; } { //Y- currStateY2 = sensorValueY < 3000; if (currStateY2 != prevStateY2) { if (currStateY2 == (sensorValueY > 4090)) { bleKeyboard.press('s'); } else { bleKeyboard.release('s'); } } prevStateY2 = currStateY2; } { //X currStateX1 = sensorValueX > 1000; if (currStateX1 != prevStateX1) { if (currStateX1 == (sensorValueX < 10)) { bleKeyboard.press('a'); } else { bleKeyboard.release('a'); } } prevStateX1 = currStateX1; } { //X- currStateX2 = sensorValueX < 3000; if (currStateX2 != prevStateX2) { if (currStateX2 == (sensorValueX > 4090)) { bleKeyboard.press('d'); } else { bleKeyboard.release('d'); } } prevStateX2 = currStateX2; } }