Raspberry pi 如何在raspberry pi 3上使用lirc解码原始红外数据

Raspberry pi 如何在raspberry pi 3上使用lirc解码原始红外数据,raspberry-pi,infrared,remote-control,lirc,Raspberry Pi,Infrared,Remote Control,Lirc,我一直试图解码我的IR原始数据,但总是得到未知代码。我曾经 #include <stdlib.h> #include <string.h> #include <stdio.h> #define SHORT 600 #define LONG 300 #define MARGIN 200 #define INTRO 3500 #define INTRO2 1700 #define SEPARATOR 9880 char decode(int val1, in

我一直试图解码我的
IR
原始数据,但总是得到未知代码。我曾经

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define SHORT 600
#define LONG 300
#define MARGIN 200
#define INTRO 3500
#define INTRO2 1700
#define SEPARATOR 9880


char decode(int val1, int val2){
if (abs(val1 - INTRO) < MARGIN && abs(val2 - 
INTRO2) < MARGIN)
return '[';
if (abs(val1 - SHORT) < MARGIN && abs(val2 - 
SHORT) < MARGIN)
    return '0';
if (abs(val1 - SHORT) < MARGIN && abs(val2 - 
LONG) < MARGIN)
    return '1';
if (abs(val1 - SHORT) < MARGIN && abs(val2 - 
SEPARATOR) < MARGIN)
    return ']'; 
}

int abs(int val){
if (val < 0)
    return -val;
else
    return val;
}

int main(int argc, char** argv){
if (argc < 3){
    printf("usage = %s fileName output\n", 
argv[0]);
    exit(0);
}
int val1, val2;
char delims[] = " ";
char *result = NULL;
FILE* f = fopen(argv[1],"r");
FILE* out = fopen(argv[2],"w");
char line[256];
int index = 0;
char* nIndex = 0;
while (fgets(line, 256, f) != NULL){
    result = strtok( line, delims );
    index = 0;
    while( result != NULL ) {
        //printf( "result[%d] is \"%s\"\n", 
 index, result );
        if (index & 1){
            if (nIndex = strchr(result,'\n')){
                //printf("New line detected in result\n");
                *nIndex = '\0';
            }
            val2 = atoi(result);
            char dec = decode(val1,val2);
            fprintf(out,"%c",dec);
        }else{
            val1 = atoi(result);
        }
        result = strtok( NULL, delims );
        index++;
    }
    //printf (line);
}
fprintf(out, "]\n");
fclose(f);
fclose(out);
}
我得到了

[1�11111111111�1111111��#11#111111111111111111111111111111��11111�[1 11111111111+1111111##�11�11111111111111�1###111111##111111111 ,#####+#s111111111#+#111111111#####1111111111�111111(11111111111111111�#


请帮帮我,谢谢!

我不习惯玩IR,但是

如果要使用lirc,应将其配置为:

您不需要开发特定的实用程序来解码数据。 您可以使用mode2从驱动程序获取输出

然后使用lircd.conf将数据映射到key,并使用irw获得结果:

$ irw
    000000037ff07bef 00 KEY_VOLUMEUP Acer_Aspire_6530G_MCE
    000000037ff07bef 01 KEY_VOLUMEUP Acer_Aspire_6530G_MCE
    000000037ff07bdd 00 KEY_ENTER Acer_Aspire_6530G_MCE
    000000037ff07bdd 02 KEY_ENTER Acer_Aspire_6530G_MCE

您好,谢谢您的回答,是的,我正在使用lirc接收红外信号,我现在面临的问题是我的信号太长,不知何故无法映射。有什么建议吗?
mode2 --driver default --device /dev/lirc0
 Using driver default on device /dev/lirc0
 Trying device: /dev/lirc0
 Using device: /dev/lirc0
 pulse 2750
 space 800
 pulse 500
 space 350
 pulse 550
 space 350
 pulse 550
$ irw
    000000037ff07bef 00 KEY_VOLUMEUP Acer_Aspire_6530G_MCE
    000000037ff07bef 01 KEY_VOLUMEUP Acer_Aspire_6530G_MCE
    000000037ff07bdd 00 KEY_ENTER Acer_Aspire_6530G_MCE
    000000037ff07bdd 02 KEY_ENTER Acer_Aspire_6530G_MCE