11-03-2017, 15:30
Witam, Mógłbym prosić o przerobienie tych dwóch bibliotek tak aby przerwania nie kolidowały że sobą?
Problem polega na tym że jak wyłączę :
Komputer rozpoznaje Arduino jako "Urządzenie klawiatury HID" aczkolwiek po włączeniu IR komputer wyświetla komunikat "Nie rozpoznano urządzenia USB"
Uwaga! biblioteka USBKeyboard działa na arduino ide do 1.0.6
Arduino IDE 1.0.6
Problem polega na tym że jak wyłączę :
Kod:
irrecv.enableIRIn();
Kod:
//-------------------------------Inicjowanie Biblotek----------------------------------------------------------
#include "UsbKeyboard.h"
#include <IRremote.h>
//-----------------------------------Deklarowanie Zmiennych----------------------------------------------------
//----------------------Pilot----------------------------------
IRrecv irrecv(11);
decode_results results;
//-------------------Klawiatura--------------------------------
#define PLAY 6
#define SSTOP 7
#define PAUSE 8
#define FORWARD 9
#define REVERSE 10
#define BYPASS_TIMER_ISR 1
int pushF = 0;
int pushR = 0;
//-------------------------------------------------------------------------------------------------------------
void setup() {
//--------------------------Pilot------------------------------------
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(12, OUTPUT); // PC ON/OFF
pinMode(13, OUTPUT); // DIODA LED
pinMode(14, OUTPUT); // PC DVD EJECT
//------------------------Klawiatura---------------------------------
pinMode(PLAY, INPUT);
pinMode(SSTOP, INPUT);
pinMode(PAUSE, INPUT);
pinMode(FORWARD, INPUT);
pinMode(REVERSE, INPUT);
digitalWrite(PLAY, HIGH);
digitalWrite(SSTOP, HIGH);
digitalWrite(PAUSE, HIGH);
digitalWrite(FORWARD, HIGH);
digitalWrite(REVERSE, HIGH);
#if BYPASS_TIMER_ISR
TIMSK0&=!(1<<TOIE0); // ++
#endif
cli();
// Force re-enumeration so the host will detect us
usbDeviceDisconnect();
delayMs(250);
usbDeviceConnect();
// Set interrupts again
sei();
}
#if BYPASS_TIMER_ISR
void delayMs(unsigned int ms) {
for (int i = 0; i < ms; i++) {
delayMicroseconds(1000);
}
}
#endif
//--------------------------------------------------------------------------------------------------------------
void loop() {
//-------------------------Sterowanie Pilotem---------------------------------------
if (irrecv.decode(&results)) {
translateIR();
// unknownRemoter();
irrecv.resume(); // Receive the next value
}
//-----------------------Klawiatura USB------------------------------------------------
UsbKeyboard.update();
//digitalWrite(13, !digitalRead(13));
if (digitalRead(PLAY) == 0) {
UsbKeyboard.sendKeyStroke(KEY_PLAY);
Bypass();
}
if (digitalRead(SSTOP) == 0) {
UsbKeyboard.sendKeyStroke(KEY_SSTOP);
Bypass();
}
if (digitalRead(PAUSE) == 0) {
UsbKeyboard.sendKeyStroke(KEY_PAUSE);
Bypass();
}
if (digitalRead(FORWARD) == 0) {pushF ++;}
if (digitalRead(FORWARD) == 1) {pushF = 0;}
if ( pushF > 1 and pushF < 4 ){
UsbKeyboard.sendKeyStroke(KEY_FORWARD);
Bypass(); }
if ( pushF > 4 ){
UsbKeyboard.sendKeyStroke(KEY_FASTFORWARD);
Bypass(); }
if (digitalRead(REVERSE) == 0) {pushR ++;}
if (digitalRead(REVERSE) == 1) {pushR = 0;}
if ( pushR > 1 and pushR < 4 ){
UsbKeyboard.sendKeyStroke(KEY_REVERSE);
Bypass(); }
if ( pushR > 4 ){
UsbKeyboard.sendKeyStroke(KEY_R);
Bypass(); }
}
//----podejmuje działania na podstawie kodu IR otrzymanych opisując Car MP3 kodów IR-------
void translateIR(){
switch(results.value){
case 0x20D352AD:// POWER
digitalWrite(12, HIGH);
delayMs(500);
digitalWrite(12, LOW);
break;
case 0x20D322DD:// EJECT
digitalWrite(14, HIGH);
delayMs(500);
digitalWrite(14, LOW);
break;
break;
case 0x20D3C837:// TV MODE
UsbKeyboard.sendKeyStroke(KEY_M);
Bypass();
break;
case 0x20D3F00F:// SETUP
UsbKeyboard.sendKeyStroke(KEY_SSTOP);
Bypass();
break;
case 0x20D3B24D:// SUSPEND
UsbKeyboard.sendKeyStroke(KEY_TAB);
Bypass();
break;
case 0x20D3827D:// 1
UsbKeyboard.sendKeyStroke(KEY_1);
Bypass();
case 0x20D3C03F:// 2
UsbKeyboard.sendKeyStroke(KEY_2);
Bypass();
break;
case 0x20D342BD:// 3
UsbKeyboard.sendKeyStroke(KEY_3);
Bypass();
break;
case 0x20D3A25D:// 4
UsbKeyboard.sendKeyStroke(KEY_4);
Bypass();
break;
case 0x20D3E01F:// 5
UsbKeyboard.sendKeyStroke(KEY_5);
Bypass();
break;
case 0x20D3629D:// 6
UsbKeyboard.sendKeyStroke(KEY_6);
Bypass();
break;
case 0x20D3AA55:// 7
UsbKeyboard.sendKeyStroke(KEY_7);
Bypass();
break;
case 0x20D3E817:// 8
UsbKeyboard.sendKeyStroke(KEY_8);
Bypass();
break;
case 0x20D36A95:// 9
UsbKeyboard.sendKeyStroke(KEY_9);
Bypass();
break;
case 0x20D3D827:// 0
UsbKeyboard.sendKeyStroke(KEY_0);
Bypass();
break;
case 0x20D39A65:// DELETE
UsbKeyboard.sendKeyStroke(KEY_DEL);
Bypass();
break;
case 0x20D35AA5:// CAPS/NUL
UsbKeyboard.sendKeyStroke(MOD_CONTROL_LEFT);
Bypass();
break;
case 0x20D3FA05:// VIDEO
UsbKeyboard.sendKeyStroke(KEY_SSTOP);
Bypass();
break;
case 0x20D37887:// MUSIC
UsbKeyboard.sendKeyStroke(KEY_SSTOP);
Bypass();
break;
case 0x20D33AC5:// PHOTO
UsbKeyboard.sendKeyStroke(KEY_SSTOP);
Bypass();
break;
case 0x20D3B847:// ALL
UsbKeyboard.sendKeyStroke(KEY_SSTOP);
Bypass();
break;
case 0x20D3E21D:// RETURN
UsbKeyboard.sendKeyStroke(KEY_BACKSPACE);
Bypass();
break;
case 0x20D3A05F:// SOURCE
UsbKeyboard.sendKeyStroke(KEY_J);
Bypass();
break;
case 0x20D3C23D:// LEWO
UsbKeyboard.sendKeyStroke(KEY_LEFT);
Bypass();
break;
case 0x20D3807F:// PRAWO
UsbKeyboard.sendKeyStroke(KEY_RIGHT);
Bypass();
break;
case 0x20D3609F:// GÓRA
UsbKeyboard.sendKeyStroke(KEY_UP);
Bypass();
break;
case 0x20D350AF:// DÓŁ
UsbKeyboard.sendKeyStroke(KEY_DOWN);
Bypass();
break;
case 0x20D3D22D:// INFO
UsbKeyboard.sendKeyStroke(KEY_I);
Bypass();
break;
case 0x20D332CD:// STOP
UsbKeyboard.sendKeyStroke(KEY_SSTOP);
Bypass();
break;
case 0x20D3728D :// PAGE UP(VOL+)
UsbKeyboard.sendKeyStroke(KEY_PAGEUP);
Bypass();
break;
case 0x20D34AB5 :// PAGE DOWN(VOL-)
UsbKeyboard.sendKeyStroke(KEY_PAGEDOWN);
Bypass();
break;
case 0x20D30AF5:// PLAY
UsbKeyboard.sendKeyStroke(KEY_PLAY);
Bypass();
break;
case 0x20D32AD5:// PAUSE
UsbKeyboard.sendKeyStroke(KEY_PAUSE);
Bypass();
break;
case 0x20D38A75:// MUTE
UsbKeyboard.sendKeyStroke(MOD_CONTROL_LEFT);
UsbKeyboard.sendKeyStroke(KEY_T);
Bypass();
break;
case 0x20D3708F:// REV
UsbKeyboard.sendKeyStroke(KEY_R);
Bypass();
break;
case 0x20D3B04F:// FWD
UsbKeyboard.sendKeyStroke(KEY_F);
Bypass();
break;
case 0x20D3CA35:// MENU
UsbKeyboard.sendKeyStroke(KEY_S);
Bypass();
break;
case 0x20D348B7:// PREV
UsbKeyboard.sendKeyStroke(KEY_REVERSE);
Bypass();
break;
case 0x20D38877:// NEXT
UsbKeyboard.sendKeyStroke(KEY_FORWARD);
Bypass();
break;
case 0x20D3F20D:// TITLE
UsbKeyboard.sendKeyStroke(KEY_N);
Bypass();
break;
case 0x20D3EA15:// REPEAT
UsbKeyboard.sendKeyStroke(KEY_E);
Bypass();
break;
case 0x20D3A857:// SLOW
UsbKeyboard.sendKeyStroke(KEY_ESC);
Bypass();
break;
case 0x20D36897:// ANGLE
UsbKeyboard.sendKeyStroke(KEY_BACKSLASH);
Bypass();
break;
case 0x20D358A7:// AUDIO
UsbKeyboard.sendKeyStroke(KEY_SSTOP);
Bypass();
break;
case 0x20D31AE5:// SUBTITLE
UsbKeyboard.sendKeyStroke(KEY_T);
Bypass();
break;
case 0x20D39867:// ZOOM
UsbKeyboard.sendKeyStroke(KEY_Z);
Bypass();
break;
case 0x20D340BF:// ENTER
UsbKeyboard.sendKeyStroke(KEY_ENTER);
Bypass();
break;
case 0x20D3906F:// HOME(A-B)
UsbKeyboard.sendKeyStroke(KEY_HOME);
Bypass();
break;
case 0x20D312ED:// FILE MODE
UsbKeyboard.sendKeyStroke(KEY_C);
Bypass();
break;
case 0x20D3DA25:// TIME SEEK
UsbKeyboard.sendKeyStroke(KEY_SSTOP);
Bypass();
break;
default:
Serial.print(" ZA DŁUGO WCIŚNIĘTY PRZYCISK PILOTA ");
Serial.println(results.value, HEX);
}
delayMs(100);
}
//--------------------------------------------------------------------------------------------------------------
void Bypass(){
#if BYPASS_TIMER_ISR
delayMs(200);
#else
delay(130);
#endif
}
Uwaga! biblioteka USBKeyboard działa na arduino ide do 1.0.6
Arduino IDE 1.0.6