Cliffo

Member Since: January 11, 2012

Country: United States

  • I enhanced AdaFruit’s program from here:

    http://forums.adafruit.com/viewtopic.php?f=22&t=56403
    

    to read the codes from this Remote’s SparkFun predecessor here:

    https://www.sparkfun.com/products/retired/10280
    

    I posted my complete pulse-stream findings on AdaFruits Forum above.

    As other users posted, its codes are changeable by holding down the Power or Mute key for a long time, then it’s pot-luck as to which code standard it will switch to, as described by user postings here and in the AdaFruit forum above.

    To wit, initially my COM-10280’s codes all started with:

    3Long,3Short,1Long,2Short,1Long
    

    which I (perhaps incorrectly) interpret as 0x389(?), followed by several hundred pulses, which were pretty-much consistent each time.

    The next day, I accidently re-programmed it (via an inadvertent long-key-press, apparently), so now each command starts with:

     1Long,6Short,1Long,1Short,6Long,1Short  (112 total pulses/button press)
    

    which I (again possibly incorrectly) interpret as either 0x817E, or 0x17E, depending on whether the “8” is some sort of start-bit or not.

    It was making 69-pulse streams for a while, but I held down the Power button again, and ended up with the 112-pulse streams.

    Can someone please advise me if either of these preamble sequences are well-known parts of some IR Remote Code standard?

    More to the point, does SparkFun have posted somewhere all the code standards that the COM-10280 can produce, so I can add broader coverage to my program?

    Thanks,

    =Cliff

  • Referring to the above and the other posters' comments, each button spews a consistent sequence patterns, beginning with two instances of “3Long,3Short,1L,2S,1L”, followed by 5 pulses to specifiy the individual command #.

    I.e., “Power” = 33121 + 5S “Mute” = 33121 + 2S,2L,1S “Channel Up” = 33121 + 2S,1L,2S “Channel Down” = 33121 + 1S,1L,3S “Volume Down” = 33121 + 1S,1L,1S,1L,1S “Volume Up” = 33121 + 3S,1L,1S “AV/TV” = 33121 + 1S,3L,1S

    To summarize the above, if we assume the Short pulses represent binary-0’s, and the Longs are binary-1’s, then the command codes are:

    Power = 0b00000 (0x0)
    Mute  = 0b00110 (0x6)
    ChUp  = 0b00100 (0x4)
    ChDn  = 0b01000 (0x8)
    VoUp  = 0b00010 (0x2)
    VoDn  = 0b01010 (0xA)
    AVTV  = 0b01110 (0xE)
    

    Then after that it (presumably) spews out codes from other standards for the pushed button, whatever they are, they are reproducible.

    Lastly, I implemented a few sanity checks to prevent fussing over clearly-malformed pulse chains:

    1. Confirm that the first two pulses' durations are <= 90.
    2. Confirm that the pulse durations “clump” into easily identifiable “Long” (~45-85) and “Short” groups (~25-40).
    3. At various points in the pulse chain, there is a mystery pulse with a duration of specifically 215-225 (usually ~220). It’s much too long to be a “Long” pulse (= max. of 80) and much, much too short to be a Gap (min. of 1370). To simplify things, I arbitrarily declared such in-between pulses to be “Long” ones.
    4. I currently have my program to capture and match 130 pulses and discard the rest. With a fresh battery, this Remote will spew multiple hundreds of pulses per button push. So when I see the program suddenly start saying, “66-pulse IR signal received” (instead of 130 pulses), I know it’s time for a new battery, as it also suddenly starts failing my Sanity Test #1 above.

    Let me know if anyone wants to try this program with the currently-on-sale Remote.

  • Mine hasn’t been “programmed” yet. I wrote a program to capture the counts of first 120-ish “Long” and “Short” pulses, as follows, where -1 is a placeholder to keep the Longs balanced with the Shorts, and -2 means “Switch to Short pulses come first after a Gap.”:

    // For brevity, as much as possible, I'll express each button's 
    // pattern as pairs of:
    // <so many> Long pulses, <so many> Short pulses.
    // -1's are placeholders, for when there is no Short pulse
    // preceeding a Gap, etc.
    // -2's mean, Short pulses come first after this Gap.
    //
    int toyPowerButtonPattern[] = 
    {
      // We want to start at index 1, to match the output of the
      // rawirdecode program. so let's put this spot to good use,
      // to store our command name
      (int)"POWER",
    //
    // For 1-15:
    // l s l s l s 
    // 1 4 7 8 1011
       3,3,1,2,1,5,
    //
    // For 16: Gap of 1176 ms.
    -1176, -1,  // mS.
    //
    // For 17-22:
    // l s 
    // 1720
       3,3,
    //
    // For 23-31:
    // l s l s 
    // 23242627
       1,2,1,5,
    //
    // For 32: Gap of 834 ms.
    -834, -1,  // mS.
    //
    // For 33-42:
    // l s l s 
    // 33343538
       1,1,3,5,
    //
    // For 43-51:
    // l s 
    // 4346
       3,6,
    //
    // For 52-60:
    // l s l s l s 
    // 525354555860
       1,1,1,3,2,1,
    //
    // For 61-65:
    // l s l 
    // 616263
       1,1,3,-1,
    //
    // For 66: Gap of 1291 ms.
    -1291, -1,  // mS.
    //
    // For 67-75:
    // s l 
    // 6775      // -2 = Past this gap we're doing Shorts first.
    -2,8,1,
    //
    // For 76-77:
    // s 
    // 76
       2,-1,
    //
    // For 78: Gap of 3222 ms.
    -3222, -1,  // mS.
    //
    // For 79-87:
    // s l 
    // 7987      // -2 = Past this gap we're doing Shorts first.
    -2,8,1,
    //
    // For 88-89:
    // s 
    // 88
       2,-1,
    //
    // For 90: Gap of 3216 ms.
    -3216, -1,  // mS.
    //
    // For 91-108:
    // l s l  s  
    // 9195100103
       4,5,3, 6, 
    //
    // For 109-115:
    // l  s  
    // 109110
       1, 6, 
    //
    // For 116-123:
    // l  s  l  
    // 116117118
       1, 1, 6, -1,
    //
    // For 124: Gap of 1152 ms.
    -1152, -1,  // mS.
    //
    // For 125-131:
    // l  s  
    // 125126
       1, 6, 
    //
    // For 132-138:
    // l  s  l  
    // 132133134
       1, 1, 5, -1,
    }; // End of toyPowerButtonPattern[].
    
    int toyMuteButtonPattern[] =
    { 
      // We want to start at index 1, to match the output of the
      // rawirdecode program. so let's put this spot to good use,
      // to store our command name
      (int)"MUTE",
    //
    // My toy IR Remote's "Mute" command's pattern is:
    //
    // For 1-12:
    // l s l s l s 
    // 1 4 7 8 1011
       3,3,1,2,1,2,
    //
    // For 13-15:
    // l s 
    // 1315
       2,1,
    //
    // For 16: Gap of 1174 ms.
    -1174, -1,  // mS.
    //
    // For 17-22:
    // l s 
    // 1720
       3,3,
    //
    // For 23-31:
    // l s l s l s 
    // 232426272931
       1,2,1,2,2,1,
    //
    // For 32: Gap of 831 ms.
    -831, -1,  // mS.
    //
    // For 33-42:
    // l s l s 
    // 33343538
       1,1,3,5,
    //
    // For 43-51:
    // l s l s 
    // 43465051
       3,4,1,1,
    //
    // For 52-60:
    // l s l s l s 
    // 525354555960
       1,1,1,4,1,1,
    //
    // For 61-65:
    // l s l 
    // 616263
       1,1,3,-1,
    //
    // For 66: Gap of 1293 ms.
    -1293, -1,  // mS.
    //
    // For 67-75:
    // s l 
    // 6775
    -2,8,1,
    //
    // For 76-77:
    // s l 
    // 7677
       1,1,
    //
    // For 78: Gap of 3178 ms.
    -3178, -1,  // mS.
    //
    // For 79-87:
    // s l 
    // 7987
    -2,8,1,
    //
    // For 88-89:
    // s l 
    // 8889
       1,1,
    //
    // For 90: Gap of 3175 ms.
    -3175, -1,  // mS.
    //
    // For 91-107:
    // l s l  s  
    // 9195100103
       4,5,3, 5, 
    //
    // For 108-119:
    // l  s  
    // 108112
       4, 8, 
    //
    // For 120-123:
    // l  
    // 120
       4, -1,
    //
    // For 124: Gap of 1152 ms.
    -1152, -1,  // mS.
    //
    // For 125-131:
    // l  s  
    // 125126
       1, 6, 
    //
    // For 132-138:
    // l  s  l  
    // 132133134
       1, 1, 5, -1,
    }; // End of toyMuteButtonPattern[].
    
    int toyChUpButtonPattern[] = 
    {
    (int)"CH-UP",
    //
    // For 1-12:
    // l s l s l s 
    // 1 4 7 8 1011
       3,3,1,2,1,2,
    //
    // For 13-15:
    // l s 
    // 1314
       1,2,
    //
    // For 16: Gap of 1205 ms.
    -1205, -1,  // mS.
    //
    // For 17-22:
    // l s 
    // 1720
       3,3,
    //
    // For 23-30:
    // l s l s l s 
    // 232426272930
       1,2,1,2,1,1,
    //
    // For 31-51:
    // l s l s 
    // 31373844
       6,1,6,8,
    //
    // For 52-54:
    // l 
    // 52
       3,-1,
    //
    // For 55: Gap of 1181 ms.
    -1181, -1,  // mS.
    //
    // For 56: Gap of 227 ms.
    -227, -1,  // mS.
    //
    // For 57-61:
    // s l s l 
    // 57585961
    -2,1,1,2,1,
    //
    // For 62-70:
    // s l s l 
    // 62656670
       3,1,4,1,
    //
    // For 71-82:
    // s l s l s l 
    // 717274757879
       1,2,1,3,1,4,
    //
    // For 83-91:
    // s l s l s l 
    // 838485868891
       1,1,1,2,3,1,
    //
    // For 92-98:
    // s l s l 
    // 92939496
       1,1,2,3,
    //
    // For 99: Gap of 1184 ms.
    -1184, -1,  // mS.
    //
    // For 100-111:
    // s  
    // 100
    -2,12, -1,
    //
    // For 112: Gap of 675 ms.
    -675, -1,  // mS.
    //
    // For 113-124:
    // s  
    // 113
    -2,12, -1,
    }; // End of toyChUpButtonPattern[].
    
    int toyChDnButtonPattern[] = 
    {
    (int)"CH-DN",
    //
    // For 1-11:
    // l s l s l s 
    // 1 4 7 8 1011
       3,3,1,2,1,1,
    //
    // For 12-15:
    // l s 
    // 1213
       1,3,
    //
    // For 16: Gap of 1204 ms.
    -1204, -1,  // mS.
    //
    // For 17-22:
    // l s 
    // 1720
       3,3,
    //
    // For 23-36:
    // l s l s l s l s 
    // 2324262728293036
       1,2,1,1,1,1,6,1,
    //
    // For 37-40:
    // l s 
    // 3740
       3,1,
    //
    // For 41-50:
    // l s l s 
    // 41434849
       2,5,1,2,
    //
    // For 51-53:
    // l 
    // 51
       3,-1,
    //
    // For 54: Gap of 1183 ms.
    -1183, -1,  // mS.
    //
    // For 55-63:
    // l s l s l s 
    // 555657586061
       1,1,1,2,1,3,
    //
    // For 64-70:
    // l s l s 
    // 64656970
       1,4,1,1,
    //
    // For 71-84:
    // l s l s l s 
    // 717374777884
       2,1,3,1,6,1,
    //
    // For 85-91:
    // l s 
    // 8587
       2,5,
    //
    // For 92-97:
    // l s l 
    // 929395
       1,2,3,-1,
    //
    // For 98: Gap of 1183 ms.
    -1183, -1,  // mS.
    //
    // For 99-110:
    // s 
    // 99
    -2,12,-1,
    //
    // For 111: Gap of 674 ms.
    -674, -1,  // mS.
    //
    // For 112-123:
    // s  
    // 112
    -2,12, -1,
    }; // End of toyChDnButtonPattern[].
    
    int toyVolDnButtonPattern[] = 
    {
    (int)"VOL-DN",
    //
    // For 1-11:
    // l s l s l s 
    // 1 4 7 8 1011
       3,3,1,2,1,1,
    //
    // For 12-15:
    // l s l s 
    // 12131415
       1,1,1,1,
    //
    // For 16: Gap of 1201 ms.
    -1201, -1,  // mS.
    //
    // For 17-22:
    // l s 
    // 1720
       3,3,
    //
    // For 23-36:
    // l s l s l s l s 
    // 2324262728293036
       1,2,1,1,1,1,6,1,
    //
    // For 37-45:
    // l s l s 
    // 37383943
       1,1,4,3,
    //
    // For 46-50:
    // l s 
    // 4647
       1,4,
    //
    // For 51-53:
    // l 
    // 51
       3,-1,
    //
    // For 54: Gap of 1183 ms.
    -1183, -1,  // mS.
    //
    // For 55-63:
    // l s l s l s 
    // 555657586061
       1,1,1,2,1,3,
    //
    // For 64-70:
    // l s l s 
    // 64656970
       1,4,1,1,
    //
    // For 71-82:
    // l s l s l s 
    // 717374777882
       2,1,3,1,4,1,
    //
    // For 83-94:
    // l s l s 
    // 83879091
       4,3,1,4,
    //
    // For 95-97:
    // l 
    // 95
       3,-1,
    //
    // For 98: Gap of 1183 ms.
    -1183, -1,  // mS.
    //
    // For 99-110:
    // s 
    // 99
    -2,12,-1,
    //
    // For 111: Gap of 674 ms.
    -674, -1,  // mS.
    //
    // For 112-123:
    // s  
    // 112
    -2,12, -1,
    }; // End of toyVolDnButtonPattern[].
    
    int toyVolUpButtonPattern[] = 
    {
    (int)"VOL-UP",
    //
    // For 1-13:
    // l s l s l s 
    // 1 4 7 8 1011
       3,3,1,2,1,3,
    //
    // For 14-15:
    // l s 
    // 1415
       1,1,
    //
    // For 16: Gap of 1204 ms.
    -1204, -1,  // mS.
    //
    // For 17-22:
    // l s 
    // 1720
       3,3,
    //
    // For 23-35:
    // l s l s l s 
    // 232427282935
       1,3,1,1,6,1,
    //
    // For 36-44:
    // l s l s l s 
    // 363738394042
       1,1,1,1,2,3,
    //
    // For 45-52:
    // l s l s l 
    // 4546474850
       1,1,1,2,3,-1,
    //
    // For 53: Gap of 1184 ms.
    -1184, -1,  // mS.
    //
    // For 54-62:
    // l s l s l s 
    // 545556575960
       1,1,1,2,1,3,
    //
    // For 63-72:
    // l s l s l s 
    // 636468697072
       1,4,1,1,2,1,
    //
    // For 73-93:
    // l s l s 
    // 73767786
       3,1,9,8,
    //
    // For 94-96:
    // l 
    // 94
       3,-1,
    //
    // For 97: Gap of 1183 ms.
    -1183, -1,  // mS.
    //
    // For 98-109:
    // s 
    // 98
    -2,12,-1,
    //
    // For 110: Gap of 675 ms.
    -675, -1,  // mS.
    //
    // For 111-122:
    // s  
    // 111
    -2,12, -1,
    }; // End of toyVolUpButtonPattern[].
    
    int toyAV_TVButtonPattern[] = 
    {
    (int)"AV-TV",
    //
    // For 1-11:
    // l s l s l s 
    // 1 4 7 8 1011
       3,3,1,2,1,1,
    //
    // For 12-15:
    // l s 
    // 1215
       3,1,
    //
    // For 16: Gap of 1204 ms.
    -1204, -1,  // mS.
    //
    // For 17-22:
    // l s 
    // 1720
       3,3,
    //
    // For 23-36:
    // l s l s l s l s 
    // 23
    

No public wish lists :(