Issues with learning and sending IR commands for HiFi devices

I want to be able to send IR signals with the Arduino (I use an Uno right now) to my Hifi devices.
In the end I want to be able to send a trigger from my PC via CLI to the Arduino to send the command.

So I have to learn the IR commands with one sketch and need another to send them on a trigger request.

I have right now the issue, that I can not learn the propper commands for one device and for the other I send them too often in the end.

I use these modules:
https://www.ebay.de/itm/IR-infrared-transmitter-modules-Ir-digital-38khz-infrared-receiver-sensor-mod-W0/273886362980?ssPageName=STRK%3AMEBIDX%3AIT&var=573707448541&_trksid=p2060353.m2749.l2649

The devices I want to control are:
Denon DRM-800 Tape deck (works with the commands for a DRS-810 from my Harmony (I don't own a original remote)).
Cambridge Audio 650BD BluRay player (I can control it via Harmony anr original remote).

When I try to learn the commands via IRrecvDump from the IRremote library, it does not recognize the Decoding (result unknown), so I have to go with the RAW codes (right?).

I found these code, to get the propper RAW codes:
Please see the attached receive.ino (its too long for quoting).

The strange thing is that I do not receive the same commands for the both devices, if I press the buttons multiple times (if I try for ma AVR or TV I get always the same codes).

With the Denon, I had the issue first, that onbe keystroke sesults in multiple outputs, so I changed the GAP a little (like mentioned in the code) and about 47000 seems to work to receive codes that look not always complete different.

I get then these codes (one code is one stroke of the Stop Button):

13
For IR Scope: 
+9250 -4100 +800 -1350 +850 -150 +2150 -1300 +850 -100 +2200 -1300 +850 -100 +2150 -1300 +850 -1350 +850 -100 +1100 -1300 +850 -1350 +850 -100 +1050 -1350 +800 -100 +1050 -1350 +850 -100 +2150 -1350 +850 -100 +1000 -1350 +800 -150 +1050 -1300 +850 -100 +1050 -1350 +850 -1350 +850 -100 +1050 -1300 +850 -100 +1050 -1300 +900 
For Arduino sketch: 
unsigned int raw[60] = {9250,4100,800,1350,850,150,2150,1300,850,100,2200,1300,850,100,2150,1300,850,1350,850,100,1100,1300,850,1350,850,100,1050,1350,800,100,1050,1350,850,100,2150,1350,850,100,1000,1350,800,150,1050,1300,850,100,1050,1350,850,1350,850,100,1050,1300,850,100,1050,1300,900,};
irsend.sendRaw(raw,60,38);

14
For IR Scope: 
+9350 -4000 +850 -1350 +3150 -1250 +3200 -1200 +3250 -1200 +950 -1300 +2050 -1250 +850 -1350 +2100 -1200 +2050 -1300 +3200 -1200 +2050 -1300 +2050 -1250 +2100 -1200 +900 -1350 +2050 -1250 +2050 -1300 +850 
For Arduino sketch: 
unsigned int raw[36] = {9350,4000,850,1350,3150,1250,3200,1200,3250,1200,950,1300,2050,1250,850,1350,2100,1200,2050,1300,3200,1200,2050,1300,2050,1250,2100,1200,900,1350,2050,1250,2050,1300,850,};
irsend.sendRaw(raw,36,38);

15
For IR Scope: 
+9300 -4050 +800 -1400 +850 -100 +2150 -1300 +850 -100 +2200 -1300 +850 -100 +2150 -1300 +850 -1400 +850 -100 +1050 -1300 +850 -1350 +850 -100 +1050 -1350 +800 -150 +1050 -1300 +850 -100 +2150 -1350 +800 -100 +1100 -1300 +850 -100 +1050 -1300 +900 -50 +1100 -1300 +800 -1400 +850 -100 +1050 -1350 +800 -100 +1100 -1300 +850 
For Arduino sketch: 
unsigned int raw[60] = {9300,4050,800,1400,850,100,2150,1300,850,100,2200,1300,850,100,2150,1300,850,1400,850,100,1050,1300,850,1350,850,100,1050,1350,800,150,1050,1300,850,100,2150,1350,800,100,1100,1300,850,100,1050,1300,900,50,1100,1300,800,1400,850,100,1050,1350,800,100,1100,1300,850,};
irsend.sendRaw(raw,60,38);

16
For IR Scope: 
+9250 -4100 +800 -1400 +800 -100 +2200 -1300 +850 -100 +2150 -1300 +900 -50 +2200 -1300 +850 -1400 +800 -100 +1050 -1350 +850 -1350 +850 -100 +1050 -1300 +850 -100 +1050 -1350 +800 -100 +2200 -1300 +850 -100 +1100 -1300 +850 -100 +1000 -1350 +800 -150 +1050 -1300 +900 -1350 +850 -100 +1050 -1300 +850 -100 +1050 -1350 +800 
For Arduino sketch: 
unsigned int raw[60] = {9250,4100,800,1400,800,100,2200,1300,850,100,2150,1300,900,50,2200,1300,850,1400,800,100,1050,1350,850,1350,850,100,1050,1300,850,100,1050,1350,800,100,2200,1300,850,100,1100,1300,850,100,1000,1350,800,150,1050,1300,900,1350,850,100,1050,1300,850,100,1050,1350,800,};
irsend.sendRaw(raw,60,38);

17
For IR Scope: 
+9300 -4050 +850 -1350 +850 -100 +2150 -1350 +850 -100 +2150 -1300 +850 -100 +2200 -1300 +850 -1350 +850 -100 +1050 -1350 +850 -1350 +800 -150 +1000 -1350 +850 -100 +1050 -1300 +900 -50 +2200 -1300 +850 -100 +1050 -1300 +850 -100 +1100 -1300 +850 -100 +1050 -1300 +850 -1400 +800 -100 +1050 -1350 +850 -100 +1050 -1300 +850 
For Arduino sketch: 
unsigned int raw[60] = {9300,4050,850,1350,850,100,2150,1350,850,100,2150,1300,850,100,2200,1300,850,1350,850,100,1050,1350,850,1350,800,150,1000,1350,850,100,1050,1300,900,50,2200,1300,850,100,1050,1300,850,100,1100,1300,850,100,1050,1300,850,1400,800,100,1050,1350,850,100,1050,1300,850,};
irsend.sendRaw(raw,60,38);

18
For IR Scope: 
+9300 -4050 +800 -1350 +900 -100 +2150 -1300 +850 -150 +2150 -1300 +850 -100 +2100 -1400 +800 -1400 +800 -150 +1050 -1300 +850 -1350 +850 -100 +1050 -1350 +850 -100 +1000 -1350 +800 -150 +2150 -1300 +900 -100 +1000 -1350 +800 -150 +1050 -1300 +850 -100 +1050 -1350 +850 -1350 +850 -100 +1050 -1300 +850 -150 +1000 -1350 +800 
For Arduino sketch: 
unsigned int raw[60] = {9300,4050,800,1350,900,100,2150,1300,850,150,2150,1300,850,100,2100,1400,800,1400,800,150,1050,1300,850,1350,850,100,1050,1350,850,100,1000,1350,800,150,2150,1300,900,100,1000,1350,800,150,1050,1300,850,100,1050,1350,850,1350,850,100,1050,1300,850,150,1000,1350,800,};
irsend.sendRaw(raw,60,38);

19
For IR Scope: 
+9300 -4050 +850 -1350 +800 -150 +2150 -1300 +850 -100 +2150 -1350 +800 -150 +2150 -1300 +900 -1350 +850 -100 +1000 -1350 +850 -1350 +850 -100 +1050 -1300 +900 -100 +1000 -1350 +850 -100 +1050 -50 +1050 -1350 +800 -150 +1050 -1300 +850 -100 +1050 -1300 +900 -100 +1000 -1350 +800 -1400 +850 -100 +1000 -1350 +850 -100 +1100 -1300 +850 
For Arduino sketch: 
unsigned int raw[62] = {9300,4050,850,1350,800,150,2150,1300,850,100,2150,1350,800,150,2150,1300,900,1350,850,100,1000,1350,850,1350,850,100,1050,1300,900,100,1000,1350,850,100,1050,50,1050,1350,800,150,1050,1300,850,100,1050,1300,900,100,1000,1350,800,1400,850,100,1000,1350,850,100,1100,1300,850,};
irsend.sendRaw(raw,62,38);

I try them all with my sending script (I post it below) but none of these siims to work.

Any idea how to capture the codes for the Denon propper?

This it what I receive for the Play button for the Cambridge (one code is one key stoke with a GAP of 50000):

5
For IR Scope: 
+9200 -4000 +750 -1450 +800 -150 +1050 -100 +1050 -1300 +850 -150 +2200 -1300 +850 -150 +1050 -50 +1100 -1300 +850 -1400 +800 -150 +1050 -1350 +800 -1400 +800 -150 +1100 -1300 +850 -1350 +850 -150 +1050 -50 +1050 -100 +1100 -1300 +800 -200 +1000 -1350 +800 -200 +2200 -1300 +800 -1400 +850 -1400 +800 -150 +1050 -1350 +850 -100 +1050 -1350 +800 20286 +9250 -1750 +800 
For Arduino sketch: 
unsigned int raw[68] = {9200,4000,750,1450,800,150,1050,100,1050,1300,850,150,2200,1300,850,150,1050,50,1100,1300,850,1400,800,150,1050,1350,800,1400,800,150,1100,1300,850,1350,850,150,1050,50,1050,100,1100,1300,800,200,1000,1350,800,200,2200,1300,800,1400,850,1400,800,150,1050,1350,850,100,1050,1350,800,-20286,9250,1750,800,};
irsend.sendRaw(raw,68,38);

6
For Arduino sketch: 
unsigned int raw[66] = {9200,4000,800,1400,800,150,2200,1350,850,100,1050,50,1100,1300,850,150,2200,1300,850,1400,800,150,1050,1350,800,1400,850,100,1100,1300,850,1400,800,150,1050,50,2200,1350,800,200,1050,1300,800,200,1000,100,1050,1350,800,1400,850,1400,850,100,1050,1350,800,150,1050,1350,800,-20286,9250,1750,800,};
irsend.sendRaw(raw,66,38);

7
For Arduino sketch: 
unsigned int raw[66] = {9250,4000,800,1400,800,150,2200,1300,850,150,1050,50,1100,1300,850,150,1050,50,1100,1300,850,1400,750,200,1050,1350,800,1400,800,200,1000,1350,800,1400,850,150,2200,50,1050,1350,800,200,1000,1350,800,200,2150,1350,800,1400,850,1400,800,150,1050,1350,800,150,1050,1350,800,-20286,9200,1800,850,};
irsend.sendRaw(raw,66,38);

Strange is, that they all seam to work. with my sending script:
Please see the attached send.ino (its too long for quoting).

The good thing is, all the Cambridge codes results in the expected reactions, but the player did every thing three times.
So if I send next, he will skip three tracks instead of one.
Any idea how to fix that?
I know, they are RAW codes, but can I short them down?

So over all:
Denon: Codes work in no way.
Cambridge: Codes works always three times.

I'm quite new to this, but I really want to finish this project!

[/code]

Send.ino (9.87 KB)

receive.ino (1.26 KB)

            for (int i = 0; i < 3; i++) {
            irsend.sendRaw(C_powerT,68,38);

The fact that you are sending the code three times might account for it being received three times.

Ok, that was just to test you^^

Thanks :wink:

Fixed now.

Any idea about the Denon?

Just to give an update on this, I could "fix" the issue wit the Denon, and it was damn simple:

An UNO has simply not enough memory, to handle (this includes learn) a 101 lenght RAW command.

I've switched to a Mega 2560 Pro (the super small one) without any mora change, and it works now 100%.

So the irDenon.cpp in the IRremote library didn't work for you?

Exactly, it did not recognize the commands as Denon commands.
But, ok, the DRM series is about 30 years old, perhaps Denon used different modulations these days.