(08-12-2022, 22:34)kaczakat napisał(a): W załączonym fragmencie nie ma powodu by nie działał. Gdzie masz zmienną key, gdzie nadajesz jej wartości?
oto caly kod:
// Encoder obrotowy
#include "ESPRotary.h";
#define ROTARY_PIN_1 4
#define ROTARY_PIN_2 3
int moves_per_click = 2;
ESPRotary r = ESPRotary(ROTARY_PIN_1, ROTARY_PIN_2, moves_per_click) ;
int old_pos = 0;
int new_pos = 0;
// Biblioteka klawiatury
#include "HID-Project.h"
// Klawisze
int keypadPins[13] = {2, 5, 6, 7, 8, 9, 10, 16, 14, 15, 18, 19};
int keypadStatus; // Służy do monitorowania, które przyciski są wciśnięte.
int timeout; // Zmienna timeout używana w pętli
int UpDownArr, SideArr = 0;
int MainVol = 1;
void setup() {
Serial.begin(115200);
// Obrót encodera
r.setChangedHandler(rotate);
for (int i = 0; i < 9; i++) {
pinMode(keypadPins[i], INPUT); // Ustaw wszystkie piny klawiatury jako wejścia
digitalWrite(keypadPins[i], HIGH); // Pociągnij wszystkie styki klawiatury do góry
}
Consumer.begin();
}
void loop() {
r.loop();
keypadStatus = getKeypadStatus(); // Przeczytaj, które przyciski są wciśnięte
if (keypadStatus != 0) {
sendKeyPress(keypadStatus); // Wyślij przycisk przez USB
timeout = 2000; // Opóźnienia powtarzan
while ((keypadStatus == getKeypadStatus()) && (--timeout)) // Zmniejsz limit czasu i sprawdź, czy klawisz jest wciśnięty
delayMicroseconds(400);
while (getKeypadStatus() == keypadStatus) // Podczas gdy ten sam przycisk jest wciśnięty
{
sendKeyPress(keypadStatus); // Kontynuuj wysyłanie przycisku przez USB
delay(250);
}
}
}
void rotate(ESPRotary & r) {
new_pos = r.getPosition();
if ( old_pos < new_pos) {
old_pos = new_pos ;
if ( MainVol == 1) {
Serial.println("MEDIA_VOLUME_UP");
Consumer.write(MEDIA_VOLUME_UP);
}
} else {
old_pos = new_pos ;
if ( MainVol == 1) {
Serial.println("MEDIA_VOLUME_DOWN");
Consumer.write(MEDIA_VOLUME_DOWN);
}
}
}
void sendKeyPress(int key) {
switch (key) {
case 1: // 0x001
Serial.println("MEDIA_VOLUME_MUTE");
Consumer.write(MEDIA_VOLUME_MUTE);
delay(10);
break;
case 2: // 0x002
Serial.println("Widok z PRZODU");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_1);
Keyboard.releaseAll();
delay(75);
break;
case 4: // 0x004
Serial.println("Widok normalny do ");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_8);
Keyboard.releaseAll();
delay(75);
break;
case 8: // 0x008
Serial.println("ORIENTACJA");
Keyboard.press(KEY_SPACE);
Keyboard.releaseAll();
delay(75);
break;
case 16: // 0x010
Serial.println("Wpasuj w ekran");
Keyboard.press(KEY_F);
Keyboard.releaseAll();
delay(75);
break;
case 32: // 0x020
Serial.println("1 wolny");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_C);
Keyboard.releaseAll();
delay(75);
break;
case 64: // 0x040
Serial.println("2 wolny");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_C);
Keyboard.releaseAll();
delay(75);
break;
case 128: // 0x080
Serial.println("3 wolny");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_C);
Keyboard.releaseAll();
delay(75);
break;
case 256: // 0x0100
Serial.println("4 wolny");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_C);
Keyboard.releaseAll();
delay(75);
break;
case 512 : // 0x000
Serial.println("KEY_LEFT_CTRL+C");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_C);
Keyboard.releaseAll();
delay(75);
break;
case 1024 : // 0x000
Serial.println("Kopiowanie");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_C);
Keyboard.releaseAll();
delay(75);
break;
case 1280: // 0x000
Serial.println("Wklejania");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_V);
Keyboard.releaseAll();
delay(75);
break;
case 2560: // 0x000
Serial.println("Escape");
Keyboard.press(KEY_ESC );
Keyboard.releaseAll();
delay(75);
break;
}
}
int getKeypadStatus() {
int keypadStatus = 0; // To będzie to, co zostanie zwrócone
/* zainicjuj wszystkie piny, wejścia z podciągnięciami */
for (int i = 0; i < 9; i++) {
if (!digitalRead(keypadPins[i])) {
keypadStatus |= 1 << i; // Ustawić bit stanu wartości zwracanej przez klawiaturę
}
}
return keypadStatus;
}
Jak pisalem dzialaja tyllo do ":case 256" - to nie ma cos wspolnego z zapisem decymalnym, juz zglupialem.