Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define IRpin_PIN PIND
- #define IRpin 2
- // the maximum pulse we'll listen for - 65 milliseconds is a long time
- #define MAXPULSE 65000
- // what our timing resolution should be, larger is better
- // as its more 'precise' - but too large and you wont get
- // accurate timing
- #define RESOLUTION 20
- // we will store up to 300 pulse pairs (this is -a lot-)
- uint16_t pulses[300][2]; // pair is high and low pulse
- uint8_t currentpulse = 0; // index for pulses we're storing
- void setup(void) {
- Serial.begin(9600);
- Serial.println("Ready to decode IR!");
- }
- void loop(void) {
- uint16_t highpulse, lowpulse; // temporary storage timing
- highpulse = lowpulse = 0; // start out with no pulse length
- // while (digitalRead(IRpin)) { // this is too slow!
- while (IRpin_PIN & (1 << IRpin)) {
- // pin is still HIGH
- // count off another few microseconds
- highpulse++;
- delayMicroseconds(RESOLUTION);
- // If the pulse is too long, we 'timed out' - either nothing
- // was received or the code is finished, so print what
- // we've grabbed so far, and then reset
- if ((highpulse >= MAXPULSE) && (currentpulse != 0)) {
- printpulses();
- currentpulse=0;
- return;
- }
- }
- // we didn't time out so lets stash the reading
- pulses[currentpulse][0] = highpulse;
- // same as above
- while (! (IRpin_PIN & _BV(IRpin))) {
- // pin is still LOW
- lowpulse++;
- delayMicroseconds(RESOLUTION);
- if ((lowpulse >= MAXPULSE) && (currentpulse != 0)) {
- printpulses();
- currentpulse=0;
- return;
- }
- }
- pulses[currentpulse][1] = lowpulse;
- // we read one high-low pulse successfully, continue!
- currentpulse++;
- }
- void printpulses(void) {
- for (uint8_t i = 0; i < currentpulse; i++) {
- if(i!=0){
- //################### First Array Code Pulse Division ########################
- if((int)(pulses[i][0] * RESOLUTION)>7000.0){
- Serial.print("3");
- }
- if((pulses[i][0] * RESOLUTION>4000)&&(pulses[i][0] * RESOLUTION<5000)){
- Serial.print("2");
- }
- if((pulses[i][0] * RESOLUTION>1000)&&(pulses[i][0] * RESOLUTION<2000)){
- Serial.print("1");
- }
- if((pulses[i][0] * RESOLUTION>0)&&(pulses[i][0] * RESOLUTION<1000)){
- Serial.print("0");
- }
- //########################### End of First Array ##############################
- Serial.print(", ");
- }
- //################### Second Array Code Pulse Division ########################
- if((int)(pulses[i][1] * RESOLUTION)>7000.0){
- Serial.print("3");
- }
- if((pulses[i][1] * RESOLUTION>4000)&&(pulses[i][1] * RESOLUTION<5000)){
- Serial.print("2");
- }
- if((pulses[i][1] * RESOLUTION>1000)&&(pulses[i][1] * RESOLUTION<2000)){
- Serial.print("1");
- }
- if((pulses[i][1] * RESOLUTION>0)&&(pulses[i][1] * RESOLUTION<1000)){
- Serial.print("0");
- }
- //########################### End of Second Array ##############################
- Serial.print(", ");
- }
- Serial.println("");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement