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