int irPin=2; //digital 2 (ATTINT85 pin 7) int ledPin=0; //digital 0 (ATTINY85 pin 5) void setup() { pinMode(irPin,INPUT); pinMode(ledPin,OUTPUT); digitalWrite(0,HIGH); } void loop() { if(pulseIn(irPin,LOW)) //reads a pulse on a pin { //button pressed delay(100); digitalWrite(ledPin,HIGH); delay(1000); digitalWrite(ledPin,LOW); } }
int irPin = 2; //IR detector connected to digital 2 const byte BIT_PER_BLOCK = 32; void setup() { pinMode(irPin, INPUT); Serial.begin(9600); } void loop() { int data[BIT_PER_BLOCK]; int i; for(i = 0 ; i < BIT_PER_BLOCK ; i++) { //Start measuring bits, I only want high pulses //you may want to use LOW pulse --> pulseIn(irPin, LOW) data[i] = pulseIn(irPin, HIGH); } delay(100); for(i = 0 ; i < BIT_PER_BLOCK ; i++) { Serial.println(data[i]); } Serial.println("========="); }
#include "DigiKeyboard.h" int irPin = 2; //IR receiver wired to digital 2 (ATTINY pin7) const byte BIT_PER_BLOCK = 32; void setup() { pinMode(irPin, INPUT); Serial.begin(9600); } void loop() { int data[BIT_PER_BLOCK]; int i; // this is generally not necessary but with some older systems it seems to // prevent missing the first character after a delay: DigiKeyboard.sendKeyStroke(0); for(i = 0 ; i < BIT_PER_BLOCK ; i++) { //Start measuring bits, I only want high pulses //you may want to use LOW pulse --> pulseIn(irPin, LOW) data[i] = pulseIn(irPin, HIGH); } delay(100); for(i = 0 ; i < BIT_PER_BLOCK ; i++) { DigiKeyboard.println(data[i]); } DigiKeyboard.println("========="); }
int irPin = 2; //IR detector connected to digital 2 const byte BIT_PER_BLOCK = 32; int start_bit = 2200; //start bit threshold (microseconds) void setup() { pinMode(irPin, INPUT); Serial.begin(9600); } void loop() { int data[BIT_PER_BLOCK]; int i; while(pulseIn(irPin, HIGH) < start_bit); //wait for a start bit for(i = 0 ; i < BIT_PER_BLOCK ; i++) { //Start measuring bits, I only want high pulses //you may want to use LOW pulse --> pulseIn(irPin, LOW) data[i] = pulseIn(irPin, HIGH); } for(i = 0 ; i < BIT_PER_BLOCK ; i++) { Serial.println(data[i]); } Serial.println("========="); }
#include "DigiKeyboard.h" int irPin = 2; //Sensor pin connect to digital pin2 (ATINY85 pin7) int start_bit = 2200; //Start bit threshold (Microseconds) int bin_1 = 1000; //Binary 1 threshold (Microseconds) int bin_0 = 400; //Binary 0 threshold (Microseconds) const byte BIT_PER_BLOCK = 32; void setup() { pinMode(irPin, INPUT); } void loop() { DigiKeyboard.update(); //keep on updating the keyboard // this is generally not necessary but with some older systems it seems to // prevent missing the first character after a delay: DigiKeyboard.sendKeyStroke(0); int key = getIRKey(); //Fetch the key if(key != 0) //Ignore keys that are zero { DigiKeyboard.print("=>"); //uncomment this if you want to DigiKeyboard.println(key); //print out the value of the button } } ///////////////////////////////////////////////////////////// // decode infrared signal ///////////////////////////////////////////////////////////// int getIRKey() { int data[BIT_PER_BLOCK]; int i; while(pulseIn(irPin, HIGH) < start_bit); //Wait for a start bit for(i = 0 ; i < BIT_PER_BLOCK ; i++) data[i] = pulseIn(irPin, HIGH); //Start measuring bits, I only want HIGH pulses delay(100); for(i = 0 ; i < BIT_PER_BLOCK ; i++) //Parse them { if(data[i] > bin_1) //is it a 1? data[i] = 1; else if(data[i] > bin_0) //is it a 0? data[i] = 0; else return -1; //Flag the data as invalid; Return -1 on invalid data } //based on NEC protocol, command data started from bit 16 //and end with bit 24 (8 bits long) int result = 0; for(i = 16 ; i < 24; i++) { DigiKeyboard.print(data[i]); //print out the value of button in binary form if(data[i] == 1) result |= (1<<i-16); //Convert data bits to integer } return result; //Return key number }
#include "DigiKeyboard.h" // not all keys are mapped in the DigiKeyboard.h file. // you have to map it here #define KEY_HOME 0x4A #define KEY_PAGE_UP 0x4B #define KEY_PAGE_DOWN 0x4E #define KEY_ESCAPE 0x29 #define KEY_UP_ARROW 0x52 #define KEY_DOWN_ARROW 0x51 #define KEY_LEFT_ARROW 0x50 #define KEY_RIGHT_ARROW 0x4F int irPin = 2; //Sensor pin connect to digital pin2 (ATINY85 pin7) int start_bit = 2200; //Start bit threshold (Microseconds) int bin_1 = 1000; //Binary 1 threshold (Microseconds) int bin_0 = 400; //Binary 0 threshold (Microseconds) const byte BIT_PER_BLOCK = 32; void setup() { pinMode(irPin, INPUT); } void loop() { DigiKeyboard.update(); // keep updating the keyboard // this is generally not necessary but with some older systems it seems to // prevent missing the first character after a delay: DigiKeyboard.sendKeyStroke(0); int key = getIRKey(); //Fetch the key if(key != 0) //Ignore keys that are zero { //DigiKeyboard.print("=>"); //uncomment this if you want to //DigiKeyboard.println(key); //print out the value of the button switch(key) { case 78: DigiKeyboard.println("1"); break; case 74: DigiKeyboard.println("2"); break; case 70: DigiKeyboard.println("3"); break; case 77: DigiKeyboard.println("4"); break; case 73: DigiKeyboard.println("5"); break; case 69: DigiKeyboard.println("6"); break; case 76: DigiKeyboard.println("7"); break; case 72: DigiKeyboard.println("8"); break; case 68: DigiKeyboard.println("9"); break; case 12: DigiKeyboard.println("0"); break; case 15: DigiKeyboard.sendKeyStroke(KEY_SPACE); break; case 6: DigiKeyboard.sendKeyStroke(KEY_ENTER); break; case 4: DigiKeyboard.sendKeyStroke(KEY_ESCAPE); break; case 81: DigiKeyboard.sendKeyStroke(KEY_HOME); break; case 14: DigiKeyboard.sendKeyStroke(KEY_LEFT_ARROW); break; case 10: DigiKeyboard.sendKeyStroke(KEY_RIGHT_ARROW); break; case 11: DigiKeyboard.sendKeyStroke(KEY_DOWN_ARROW); break; case 7: DigiKeyboard.sendKeyStroke(KEY_UP_ARROW); break; } } } ///////////////////////////////////////////////////////////// // decode infrared signal ///////////////////////////////////////////////////////////// int getIRKey() { int data[BIT_PER_BLOCK]; int i; while(pulseIn(irPin, HIGH) < start_bit); //Wait for a start bit for(i = 0 ; i < BIT_PER_BLOCK ; i++) data[i] = pulseIn(irPin, HIGH); //Start measuring bits, I only want HIGH pulses delay(100); for(i = 0 ; i < BIT_PER_BLOCK ; i++) //Parse them { if(data[i] > bin_1) //is it a 1? data[i] = 1; else if(data[i] > bin_0) //is it a 0? data[i] = 0; else return -1; //Flag the data as invalid; Return -1 on invalid data } //based on NEC protocol, command data started from bit 16 //and end with bit 24 (8 bits long) int result = 0; for(i = 16 ; i < 24; i++) { //DigiKeyboard.print(data[i]); //print out the value of button in binary form if(data[i] == 1) result |= (1<<i-16); //Convert data bits to integer } return result; //Return key number }
int irPin = 2; //Sensor pin connect to digital pin2 (ATINY85 pin7) int led1 = 0; //led connect to digital pin0 (ATTINY85 pin5) int led2 = 1; //led connect to digital pin1 (ATTINY85 pin6) int led3 = 3; //led connect to digital pin3 (ATTINY85 pin2) int led4 = 4; //led connect to digital pin4 (ATTINY85 pin3) int start_bit = 2200; //Start bit threshold (Microseconds) int bin_1 = 1000; //Binary 1 threshold (Microseconds) int bin_0 = 400; //Binary 0 threshold (Microseconds) const byte BIT_PER_BLOCK = 32; void setup() { pinMode(irPin, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); digitalWrite(led1, LOW); //turn off LED digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); } void loop() { int key = getIRKey(); //Fetch the key if(key != 0) //Ignore keys that are zero { switch(key) { case 78: toggleLED(led1); break; case 74: toggleLED(led2); break; case 70: toggleLED(led3); break; case 77: toggleLED(led4); break; } } } ///////////////////////////////////////////////////////////// // toggle led ///////////////////////////////////////////////////////////// void toggleLED(byte ledPin) { if(digitalRead(ledPin) != 1) //This toggles the led digitalWrite(ledPin, HIGH); else digitalWrite(ledPin, LOW); } ///////////////////////////////////////////////////////////// // decode infrared signal ///////////////////////////////////////////////////////////// int getIRKey() { int data[BIT_PER_BLOCK]; int i; while(pulseIn(irPin, HIGH) < start_bit); //Wait for a start bit for(i = 0 ; i < BIT_PER_BLOCK ; i++) data[i] = pulseIn(irPin, HIGH); //Start measuring bits, I only want HIGH pulses delay(100); for(i = 0 ; i < BIT_PER_BLOCK ; i++) //Parse them { if(data[i] > bin_1) //is it a 1? data[i] = 1; else if(data[i] > bin_0) //is it a 0? data[i] = 0; else return -1; //Flag the data as invalid; Return -1 on invalid data } //based on NEC protocol, command data started from bit 16 //and end with bit 24 (8 bits long) int result = 0; for(i = 16 ; i < 24; i++) { if(data[i] == 1) result |= (1<<i-16); //Convert data bits to integer } return result; //Return key number }