//Se voglio utilizzare il keyPad non posso usare la sua libreria altrimenti va in contrasto con la libreria UsbKeyboard #include "UsbKeyboard.h" //-------------------------------------------------------------------------------------------------------------------- // Settaggio LED #define redLed A5 #define greenLed A4 bool redStatus = true; // initial status: led OFF bool greenStatus = true; // initial status: led OFF //-------------------------------------------------------------------------------------------------------------------- // Settaggio Keypad const int numRows = 4; // numero di righe const int numCols = 4; // numero di colonne const int debounceTime = 20; // millisecondi necessari allo switch per diventare stabile // Mappa dei caratteri sul tastierino const char keymap[numRows][numCols] = { { '1', '2', '3', 'A' } , { '4', '5', '6', 'B' } , { '7', '8', '9', 'C' } , { '*', '0', '#', 'D' } }; // Definisco i pin connessi alle righe o alle colonne const int rowPins[numRows] = {6, 7, 8, 9}; // Pin di arduino connessi ai pin 1,2,3 e 4 delle righe del keypad const int colPins[numCols] = {10, 11, 12, 13}; // Pin di arduino connessi ai pin 5,6,7 e 8 delle colonne del keypad int key; //------------------------------------------------------------------------------------------------------------------ // Settaggio Remote #include "UsbKeyboard.h" #include const int RECV_PIN = 3; IRrecv irrecv(RECV_PIN); decode_results results; unsigned long key_value = 0; //----------------------------------------------------------------------------------------------------------------- // Settaggio push buttons #define BUTTON_X A3 #define BUTTON_Y A2 #define BUTTON_W A1 #define BUTTON_Z A0 //------------------------------------------------------------------------------------------------------------------ // Settaggio variabili intermedie //Variabile che definisce le applicazioni per il telecomando // 0 -> YouTube // 1 -> VLC // 2 -> Win Controller // 3 -> Linux Controller (da fare) int remoteChannel = 0; void setup() { // Setup LED pinMode(redLed, OUTPUT); pinMode(greenLed, OUTPUT); // Setup keypad for (int row = 0; row < numRows; row++) { pinMode(rowPins[row], INPUT); // Imposta i pun delle righe come input digitalWrite(rowPins[row], HIGH); // Imposta le righe a HIGH (inattiva) - abilita le resistenze di pull-ups } for (int column = 0; column < numCols; column++) { pinMode(colPins[column], OUTPUT); // Setta i pin delle colonne come input digitalWrite(colPins[column], HIGH); // Imposta le colonne a HIGH (inattiva) - abilita le resistenze di pull-ups } // Setup remote irrecv.enableIRIn(); // Setup push Button pinMode(BUTTON_X, INPUT_PULLUP); pinMode(BUTTON_Y, INPUT_PULLUP); pinMode(BUTTON_W, INPUT_PULLUP); pinMode(BUTTON_Z, INPUT_PULLUP); // Setup Virtual USB TIMSK0 &= !(1 << TOIE0); cli();// disabilita l'interrupt usbDeviceDisconnect(); delayMs(250); usbDeviceConnect(); sei();//riabilita l'interrupt } void loop() { UsbKeyboard.update(); pushButtonCheck(); key = getKey(); if (key != 0) keyButton(); if (irrecv.decode()) { if (irrecv.results.value == 0XFFFFFFFF) results.value = key_value; switch (remoteChannel){ case 0: {redStatus = true; greenStatus = true; remoteButtonPC();} break; case 1: {redStatus = false; greenStatus = true; remoteButtonYT();} break; case 2: {redStatus = true; greenStatus = false; remoteButtonVLC();} break; } key_value = results.value; irrecv.resume(); } digitalWrite(redLed, redStatus); digitalWrite(greenLed, greenStatus); } //BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB void pushButtonCheck(){ //Chiude finestra corrente/ Spegne PC if(digitalRead(BUTTON_X) == LOW) { UsbKeyboard.sendKeyStroke(KEY_F4, MOD_ALT_LEFT); delay(1000); UsbKeyboard.sendKeyStroke(KEY_ENTER); } if(digitalRead(BUTTON_Y) == LOW) { UsbKeyboard.sendKeyStroke(KEY_ENTER); delay(500); UsbKeyboard.sendKeyStroke(KEY_C); UsbKeyboard.sendKeyStroke(KEY_A); UsbKeyboard.sendKeyStroke(KEY_N); UsbKeyboard.sendKeyStroke(KEY_A); UsbKeyboard.sendKeyStroke(KEY_L); UsbKeyboard.sendKeyStroke(KEY_Y); UsbKeyboard.sendKeyStroke(KEY_T); UsbKeyboard.sendKeyStroke(KEY_ENTER); } if(digitalRead(BUTTON_W) == LOW) { UsbKeyboard.sendKeyStroke(KEY_S, MOD_GUI_LEFT); delay(500); UsbKeyboard.sendKeyStroke(KEY_C); UsbKeyboard.sendKeyStroke(KEY_A); UsbKeyboard.sendKeyStroke(KEY_R); UsbKeyboard.sendKeyStroke(KEY_T); UsbKeyboard.sendKeyStroke(KEY_E); UsbKeyboard.sendKeyStroke(KEY_L); UsbKeyboard.sendKeyStroke(KEY_L); UsbKeyboard.sendKeyStroke(KEY_O); UsbKeyboard.sendKeyStroke(KEY_X); UsbKeyboard.sendKeyStroke(KEY_ENTER); } //Mostra Desktop if(digitalRead(BUTTON_Z) == LOW) { UsbKeyboard.sendKeyStroke(KEY_D, MOD_GUI_LEFT); } } //KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK void keyButton() { switch (key) { //Apre finestra ESEGUI case '*': UsbKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); break; //Screenshot saved in image folder case '#': UsbKeyboard.sendKeyStroke(KEY_PRINT_SCREEN, MOD_GUI_LEFT); break; //Apre finestra Avvio Win case '0': UsbKeyboard.sendKeyStroke(KEY_ESCAPE, MOD_CONTROL_LEFT); break; case '1': UsbKeyboard.sendKeyStroke(KEY_1); break; // case '2': UsbKeyboard.sendKeyStroke(KEY_2); break; // case '3': UsbKeyboard.sendKeyStroke(KEY_3); break; case '4': UsbKeyboard.sendKeyStroke(KEY_4); break; case '5': UsbKeyboard.sendKeyStroke(KEY_5); break; case '6': UsbKeyboard.sendKeyStroke(KEY_6); break; case '7': UsbKeyboard.sendKeyStroke(KEY_7); break; case '8': UsbKeyboard.sendKeyStroke(KEY_8); break; case '9': UsbKeyboard.sendKeyStroke(KEY_9); break; case 'A': UsbKeyboard.sendKeyStroke(KEY_A); break; case 'B': UsbKeyboard.sendKeyStroke(KEY_B); break; case 'C': UsbKeyboard.sendKeyStroke(KEY_C); break; case 'D': UsbKeyboard.sendKeyStroke(KEY_D); break; } } //CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC void remoteButtonPC() { switch (irrecv.results.value) { //Serial.println("CH-"); //Open YouTube and then focus on Address Bar case 0xFFA25D: { UsbKeyboard.sendKeyStroke(KEY_S, MOD_GUI_LEFT); delay(500); UsbKeyboard.sendKeyStroke(KEY_F); UsbKeyboard.sendKeyStroke(KEY_I); UsbKeyboard.sendKeyStroke(KEY_R); UsbKeyboard.sendKeyStroke(KEY_E); UsbKeyboard.sendKeyStroke(KEY_F); UsbKeyboard.sendKeyStroke(KEY_O); UsbKeyboard.sendKeyStroke(KEY_X); UsbKeyboard.sendKeyStroke(KEY_ENTER); delay(1000); UsbKeyboard.sendKeyStroke(KEY_L, MOD_CONTROL_LEFT); } break; //Serial.println("CH"); //Cambia modalità case 0xFF629D: remoteChannel = 1; break; //Serial.println("CH+"); //Apre VLC and Focus open Folder case 0xFFE21D: { UsbKeyboard.sendKeyStroke(KEY_S, MOD_GUI_LEFT); delay(500); UsbKeyboard.sendKeyStroke(KEY_V); UsbKeyboard.sendKeyStroke(KEY_L); UsbKeyboard.sendKeyStroke(KEY_C); UsbKeyboard.sendKeyStroke(KEY_ENTER); delay(3000); UsbKeyboard.sendKeyStroke(KEY_F, MOD_CONTROL_LEFT); delay(500); UsbKeyboard.sendKeyStroke(KEY_ARROW_UP, MOD_ALT_LEFT); } break; //Serial.println(">>|"); case 0xFF22DD: UsbKeyboard.sendKeyStroke(KEY_ARROW_RIGHT); break; //Serial.println("|<<"); case 0xFF02FD: UsbKeyboard.sendKeyStroke(KEY_ARROW_LEFT); break ; //Serial.println(">|"); case 0xFFC23D: UsbKeyboard.sendKeyStroke(KEY_ENTER); break ; //Serial.println("-"); case 0xFFE01F: UsbKeyboard.sendKeyStroke(KEY_ARROW_DOWN); break ; //Serial.println("+"); case 0xFFA857: UsbKeyboard.sendKeyStroke(KEY_ARROW_UP); break ; //Serial.println("EQ"); case 0xFF906F: UsbKeyboard.sendKeyStroke(KEY_ESCAPE); break ; //Serial.println("200+"); //Task View Windows case 0xFFB04F: UsbKeyboard.sendKeyStroke(KEY_TAB, MOD_GUI_LEFT); break ; //Serial.println("100+"); //More than one window per screen case 0xFF9867: UsbKeyboard.sendKeyStroke(KEY_ARROW_LEFT, MOD_GUI_LEFT); break ; //Serial.println("0"); //Shows Desktop case 0xFF6897: UsbKeyboard.sendKeyStroke(KEY_D, MOD_GUI_LEFT); break ; //______________________________________________________________ //Serial.println("1"); //Open specific URL/Bookmark case 0xFF30CF:{ UsbKeyboard.sendKeyStroke(KEY_A); UsbKeyboard.sendKeyStroke(KEY_A); delay(100); UsbKeyboard.sendKeyStroke(KEY_ENTER); remoteChannel = 1; } break ; //Serial.println("2"); //Open specific URL/Bookmark case 0xFF18E7: { UsbKeyboard.sendKeyStroke(KEY_B); UsbKeyboard.sendKeyStroke(KEY_B); delay(100); UsbKeyboard.sendKeyStroke(KEY_ENTER); remoteChannel = 1; } break ; //Serial.println("3"); //Open specific URL/Bookmark case 0xFF7A85: { UsbKeyboard.sendKeyStroke(KEY_C); UsbKeyboard.sendKeyStroke(KEY_C); delay(100); UsbKeyboard.sendKeyStroke(KEY_ENTER); remoteChannel = 1; } break ; //Serial.println("4"); //Open specific VLC Video case 0xFF10EF:{ UsbKeyboard.sendKeyStroke(KEY_T); UsbKeyboard.sendKeyStroke(KEY_E); delay(100); UsbKeyboard.sendKeyStroke(KEY_ARROW_DOWN); UsbKeyboard.sendKeyStroke(KEY_ARROW_DOWN); UsbKeyboard.sendKeyStroke(KEY_ENTER); delay(100); UsbKeyboard.sendKeyStroke(KEY_ENTER); remoteChannel = 2; } break ; //Serial.println("5"); //Open specific VLC Video case 0xFF38C7: break ; //Serial.println("6"); //Open specific VLC Video case 0xFF5AA5: break ; //Serial.println("7"); //Open specific URL/Bookmark case 0xFF42BD: break ; //Serial.println("8"); //Open specific URL/Bookmark case 0xFF4AB5: break ; //Serial.println("9"); //Open specific URL/Bookmark case 0xFF52AD: break ; } } //YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY void remoteButtonYT() { switch (irrecv.results.value) { //Serial.println("CH-"); //Video precedente Playlist case 0xFFA25D: UsbKeyboard.sendKeyStroke(KEY_P, MOD_SHIFT_LEFT); break; //Serial.println("CH"); //Cambia modalità case 0xFF629D: remoteChannel = 2; break; //Serial.println("CH+"); //Prossimo video (playlist) case 0xFFE21D: UsbKeyboard.sendKeyStroke(KEY_N, MOD_SHIFT_LEFT); break; //Serial.println(">>|"); case 0xFF22DD: UsbKeyboard.sendKeyStroke(KEY_J); break; //Serial.println("|<<"); case 0xFF02FD: UsbKeyboard.sendKeyStroke(KEY_L); break ; //Serial.println(">|"); case 0xFFC23D: UsbKeyboard.sendKeyStroke(KEY_SPACE); break ; //Serial.println("-"); case 0xFFE01F: UsbKeyboard.sendKeyStroke(KEY_ARROW_DOWN); break ; //Serial.println("+"); case 0xFFA857: UsbKeyboard.sendKeyStroke(KEY_ARROW_UP); break ; //Serial.println("EQ"); case 0xFF906F: UsbKeyboard.sendKeyStroke(KEY_M); break ; //Serial.println("200+"); //Full screen ON/OFF case 0xFFB04F: UsbKeyboard.sendKeyStroke(KEY_F); break ; //Serial.println("100+"); //Captions ON/OFF case 0xFF9867: UsbKeyboard.sendKeyStroke(KEY_C); break ; //Serial.println("0"); ////Focus address bar case 0xFF6897: UsbKeyboard.sendKeyStroke(KEY_L, MOD_CONTROL_LEFT); break ; //Serial.println("1"); //Skip intro commercials case 0xFF30CF:{ delay(4500); UsbKeyboard.sendKeyStroke(KEY_SPACE); UsbKeyboard.sendKeyStroke(KEY_TAB); UsbKeyboard.sendKeyStroke(KEY_TAB); UsbKeyboard.sendKeyStroke(KEY_TAB); UsbKeyboard.sendKeyStroke(KEY_TAB); delay(500); UsbKeyboard.sendKeyStroke(KEY_ENTER); } break ; //Serial.println("2"); //Open specific URL/Bookmark case 0xFF18E7: break ; //Serial.println("3"); //Open specific URL/Bookmark case 0xFF7A85: break ; //Serial.println("4"); //Open specific URL/Bookmark case 0xFF10EF: break ; //Serial.println("5"); //Open specific URL/Bookmark case 0xFF38C7: break ; //Serial.println("6"); //Open specific URL/Bookmark case 0xFF5AA5: break ; //Serial.println("7"); //Open specific URL/Bookmark case 0xFF42BD: break ; //Serial.println("8"); //Open specific URL/Bookmark case 0xFF4AB5: UsbKeyboard.sendKeyStroke(KEY_TAB); break ; //Serial.println("9"); //Open specific URL/Bookmark case 0xFF52AD: UsbKeyboard.sendKeyStroke(KEY_ENTER); break ; } } //LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL void remoteButtonVLC() { switch (irrecv.results.value) { //Serial.println("CH-"); //Previous Track case 0xFFA25D: UsbKeyboard.sendKeyStroke(KEY_P); break; //Serial.println("CH"); // case 0xFF629D: remoteChannel = 0; break; //Serial.println("CH+"); //Next Track case 0xFFE21D: UsbKeyboard.sendKeyStroke(KEY_N); break; //Serial.println("|<<"); case 0xFF22DD: UsbKeyboard.sendKeyStroke(KEY_ARROW_LEFT, MOD_ALT_LEFT); break; //Serial.println(">>|"); case 0xFF02FD: UsbKeyboard.sendKeyStroke(KEY_ARROW_RIGHT, MOD_ALT_LEFT); break ; //Serial.println(">|"); case 0xFFC23D: UsbKeyboard.sendKeyStroke(KEY_SPACE); break ; //Serial.println("-"); case 0xFFE01F: UsbKeyboard.sendKeyStroke(KEY_ARROW_DOWN, MOD_CONTROL_LEFT); break ; //Serial.println("+"); case 0xFFA857: UsbKeyboard.sendKeyStroke(KEY_ARROW_UP, MOD_CONTROL_LEFT); break ; //Serial.println("EQ"); case 0xFF906F: UsbKeyboard.sendKeyStroke(KEY_M); break ; //Serial.println("200+"); case 0xFFB04F: UsbKeyboard.sendKeyStroke(KEY_F); break ; //Serial.println("100+"); //Video Time left case 0xFF9867: UsbKeyboard.sendKeyStroke(KEY_T); break ; //Serial.println("0"); case 0xFF6897:{ UsbKeyboard.sendKeyStroke(KEY_F4, MOD_ALT_LEFT); remoteChannel = 0; } break ; //Serial.println("1"); case 0xFF30CF: break ; case 0xFF18E7: //Serial.println("2"); break ; case 0xFF7A85: //Serial.println("3"); break ; case 0xFF10EF: //Serial.println("4"); break ; case 0xFF38C7: //Serial.println("5"); break ; case 0xFF5AA5: //Serial.println("6"); break ; case 0xFF42BD: //Serial.println("7"); break ; case 0xFF4AB5: //Serial.println("8"); break ; case 0xFF52AD: //Serial.println("9"); break ; } } void delayMs(unsigned int ms) { for (int i = 0; i < ms; i++) delayMicroseconds(1000); } // funzione che restituisce il tasto premuto o 0 se nessun tasto è digitato char getKey() { char key = 0; // 0 indica nessun tasto premuto for (int column = 0; column < numCols; column++) { digitalWrite(colPins[column], LOW); // Attiva la colonna corrente per la lettura. for (int row = 0; row < numRows; row++) // Scorro tutte le righe cercano un tasto premuto { if (digitalRead(rowPins[row]) == LOW) // E' premuto il tasto { delay(debounceTime); // attendo che il segnale si stabilizzi (vedi annotazione) while (digitalRead(rowPins[row]) == LOW); // attendo che il tasto sia rilasciato key = keymap[row][column]; // Memorizzo quale sia il tasto premuto } } digitalWrite(colPins[column], HIGH); // Rendo inattiva la colonna. } return key; // restituisce il tasto premuto 0 altrimenti }