// Interfață pentru programul DaVinci Resolve - © Chiru Ioan Alexandru - fotomagica.ro #include // Definirea pinilor pentru encoderul rotativ const int pinCLK = 2; const int pinDT = 3; // Variabile pentru encoder int lastCLKState; int currentCLKState; // Definirea pinilor pentru butoane const int button1Pin = 4; // Buton pentru scurtătura 1 const int button2Pin = 5; // Buton pentru scurtătura 2 const int button3Pin = 6; // Buton pentru scurtătura 3 const int button4Pin = 7; // Buton pentru scurtătura 4 const int button5Pin = 8; // Buton pentru scurtătura 5 const int button6Pin = 9; // Buton pentru scurtătura 6 const int button7Pin = 10; // Buton pentru scurtătura 7 const int button8Pin = 11; // Buton pentru scurtătura 8 const int button9Pin = 12; // Buton pentru scurtătura 9 const int button10Pin = 13; // Buton pentru scurtătura 10 // Variabile pentru debounce unsigned long lastDebounceTime = 0; unsigned long debounceDelay = 50; // 50ms pentru debounce void setup() { // Configurare pini encoder pinMode(pinCLK, INPUT); pinMode(pinDT, INPUT); lastCLKState = digitalRead(pinCLK); // Configurare pini butoane ca intrări cu rezistență de pull-up pinMode(button1Pin, INPUT_PULLUP); pinMode(button2Pin, INPUT_PULLUP); pinMode(button3Pin, INPUT_PULLUP); pinMode(button4Pin, INPUT_PULLUP); pinMode(button5Pin, INPUT_PULLUP); pinMode(button6Pin, INPUT_PULLUP); pinMode(button7Pin, INPUT_PULLUP); pinMode(button8Pin, INPUT_PULLUP); pinMode(button9Pin, INPUT_PULLUP); pinMode(button10Pin, INPUT_PULLUP); // Pornire emulare tastatură Keyboard.begin(); } void loop() { // Verificare rotire encoder currentCLKState = digitalRead(pinCLK); if (currentCLKState != lastCLKState) { if (digitalRead(pinDT) != currentCLKState) { // Rotire în sensul acelor de ceasornic (săgeată dreapta) Keyboard.press(KEY_RIGHT_ARROW); delay(0); Keyboard.release(KEY_RIGHT_ARROW); } else { // Rotire în sens invers acelor de ceasornic (săgeată stânga) Keyboard.press(KEY_LEFT_ARROW); delay(0); Keyboard.release(KEY_LEFT_ARROW); } } lastCLKState = currentCLKState; // Verificare și debounce pentru butoane unsigned long currentTime = millis(); // Verifică starea butoanelor și debouncing if ((currentTime - lastDebounceTime) > debounceDelay) { // Verifică fiecare buton if (digitalRead(button1Pin) == LOW) { // Tasta 1 - Split = SHIFT + TAB Keyboard.press(KEY_LEFT_SHIFT); // Apasă SHIFT Keyboard.press(KEY_TAB); // Apasă tasta 'TAB delay(100); // Așteaptă 100 ms Keyboard.release(KEY_LEFT_SHIFT); // Eliberează SHIFT Keyboard.release(KEY_TAB); // Eliberează TAB lastDebounceTime = currentTime; } if (digitalRead(button2Pin) == LOW) { // Tasta 2 - Undo = CTRL + Z Keyboard.press(KEY_LEFT_CTRL); // Apasă CTRL Keyboard.press('z'); // Apasă tasta Z delay(100); Keyboard.release('z'); // Eliberează tasta Z Keyboard.release(KEY_LEFT_CTRL); // Eliberează tasta CTRL lastDebounceTime = currentTime; } if (digitalRead(button3Pin) == LOW) { // Tasta 3 - Import Media = CTRL + I Keyboard.press(KEY_LEFT_CTRL); // Apasă CTRL Keyboard.press('i'); // Apasă tasta I delay(100); Keyboard.release('i'); // Eliberează tasta I Keyboard.release(KEY_LEFT_CTRL); // Eliberează tasta CTRL lastDebounceTime = currentTime; } if (digitalRead(button4Pin) == LOW) { // Tasta 4 - Fusion = SHIFT + SPACE Keyboard.press(KEY_LEFT_SHIFT); // Apasă SHIFT Keyboard.press(' '); // Apasă tasta SPACE delay(100); Keyboard.release(' '); // Eliberează tasta SPACE Keyboard.release(KEY_LEFT_SHIFT); // Eliberează SHIFT lastDebounceTime = currentTime; } if (digitalRead(button5Pin) == LOW) { // Tasta 5 - Redo = CTRL + SHIFT + Z Keyboard.press(KEY_LEFT_CTRL); // Apasă CTRL Keyboard.press(KEY_LEFT_SHIFT); // Apasă SHIFT Keyboard.press('z'); // Apasă tasta Z delay(100); Keyboard.release('z'); // Eliberează tasta Z Keyboard.release(KEY_LEFT_SHIFT); // Eliberează SHIFT Keyboard.release(KEY_LEFT_CTRL); // Eliberează CTRL lastDebounceTime = currentTime; } if (digitalRead(button6Pin) == LOW) { // Tasta 6 - Uneste Split = CTRL + TAB Keyboard.press(KEY_LEFT_CTRL); // Apasă CTRL Keyboard.press(KEY_TAB); // Apasă tasta 'TAB delay(100); Keyboard.release(KEY_LEFT_CTRL); // Eliberează CTRL Keyboard.release(KEY_TAB); // Eliberează TAB lastDebounceTime = currentTime; } if (digitalRead(button7Pin) == LOW) { // Tasta 7 - Delete = DELETE Keyboard.press(KEY_DELETE); // Apasă tasta DELETE delay(100); Keyboard.release(KEY_DELETE); // Eliberează tasta DELETE lastDebounceTime = currentTime; } if (digitalRead(button8Pin) == LOW) { // Tasta 8 - Select All = CTRL + A Keyboard.press(KEY_LEFT_CTRL); // Apasă CTRL Keyboard.press('a'); // Apasă tasta A delay(100); Keyboard.release('a'); // Eliberează tasta A Keyboard.release(KEY_LEFT_CTRL); // Eliberează tasta CTRL lastDebounceTime = currentTime; } if (digitalRead(button9Pin) == LOW) { // Tasta 9 - Split Selectii unite - CTRL + SHIFT + TAB Keyboard.press(KEY_LEFT_CTRL); // Apasă CTRL Keyboard.press(KEY_LEFT_SHIFT); // Apasă SHIFT Keyboard.press(KEY_TAB); // Apasă tasta TAB delay(100); Keyboard.release(KEY_TAB); // Eliberează tasta TAB Keyboard.release(KEY_LEFT_SHIFT); // Eliberează SHIFT Keyboard.release(KEY_LEFT_CTRL); // Eliberează CTRL lastDebounceTime = currentTime; } if (digitalRead(button10Pin) == LOW) { // Tasta 10 - Apasare Encoder - Enter = RETURN Keyboard.press(KEY_RETURN); // Apasă tasta ENTER delay(100); Keyboard.release(KEY_RETURN); // Eliberează tasta ENTER lastDebounceTime = currentTime; } } }