进入中断后,一直存在遥控的信号
```
#include <wiringPi.h>
#include <softPwm.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <lirc/lirc_client.h>
#include <time.h>
#define uchar unsigned char
#define uint unsigned int
#define JDQ1 0
#define JDQ2 1
#define JDQ3 3
#define JDQ4 27
#define XJKG1 25
#define XJKG2 6
int temp,temb;
int flag ;
int flag1;
void XJKGZT1(void);
int JDQ(int i);
uchar QT[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
uchar OC[2] = {0xff, 0x00};
char *keymap[21] =
{
" KEY_CHANNELDOWN ",//1
" KEY_CHANNEL ",//2
" KEY_CHANNELUP ",//3
" KEY_PREVIOUS ",//4
" KEY_NEXT ",//5
" KEY_PLAYPAUSE ",//6
" KEY_VOLUMEDOWN ",//7
" KEY_VOLUMEUP ",//8
" KEY_EQUAL ",//9
" KEY_NUMERIC_0 ",//10
" BTN_0 ",//11
" BTN_1 ",//12
" KEY_NUMERIC_1 ",//13
" KEY_NUMERIC_2 ",//14
" KEY_NUMERIC_3 ",//15
" KEY_NUMERIC_4 ",//16
" KEY_NUMERIC_5 ",//17
" KEY_NUMERIC_6 ",//18
" KEY_NUMERIC_7 ",//19
" KEY_NUMERIC_8 ",//20
" KEY_NUMERIC_9 "};//21
void delay(unsigned int howLong)
{
uchar z;
while(howLong--)
{
for(z=1;z<20;z++);
}
}
void JDQInit(void)
{
softPwmCreate(JDQ1, 0, 100);
softPwmCreate(JDQ2, 0, 100);
softPwmCreate(JDQ3, 0, 100);
softPwmCreate(JDQ4, 0, 100);
}
void JDQSet()
{
softPwmWrite(JDQ1, QT[0]);
softPwmWrite(JDQ2, QT[1]);
softPwmWrite(JDQ3, QT[2]);
softPwmWrite(JDQ4, QT[3]);
}
int key(char *code)
{
int i;
int num;
for (i=0; i<21; i++)
{
if (strstr(code, keymap[i]))
{
num = i;
}
}
return num + 1;
}
void XJKGZT ()
{
flag = ~digitalRead(JDQ1);
flag1 = ~digitalRead(JDQ2);
while(1)
{
if(digitalRead(XJKG1) == LOW)
{
delay(1000);
while(1)
{
digitalWrite(JDQ1,flag);
digitalWrite(JDQ2,flag1);
delay(60000);
printf("REVERSE \n");
if(digitalRead(XJKG2)==LOW)
{
return ;
}
}
}
if(digitalRead(XJKG2)==LOW)
{
delay(1000);
if(digitalRead(XJKG2) == LOW)
{
while(1)
{
digitalWrite(JDQ1, LOW);
digitalWrite(JDQ2, LOW);
printf("STOP \n");
delay(100);
break;
}
}
}
}
}
int JDQ(int i)//switch
{
switch(i)
{
case 1:
{
QT[0] = OC[0];
QT[1] = OC[1];
printf("JQD1 OPEN\n");
break;
}
case 2:
{
QT[0] = OC[1];
QT[1] = OC[0];
printf("JDQ2 OPEN\n");
break;
}
case 3:
{
QT[0] = OC[1];
QT[1] = OC[1];
printf("JDQ1,2 OFF\n");
break;
}
case 4:
{
QT[2] = OC[0];
printf("JDQ3 ON\n");
break;
}
case 5:
{
QT[2] = OC[1];
printf("JDQ3 OFF\n");
break;
}
case 7:
{
QT[3] = OC[0];
printf("XJBZ ON\n");
break;
}
case 8:
{
QT[3] = OC[1];
printf("XJBZ OFF\n");
break;
}
case 9:
{
QT[0] = OC[1];
QT[1] = OC[1];
QT[2] = OC[1];
QT[3] = OC[1];
printf("ALL OFF\n");
break;
}
}
}
int main(void)
{
struct lirc_config *config;
int buttonTimer = millis();
char *code;
char *c;
if(wiringPiSetup() == -1)
{
printf("setup wiringPi failed !");
return 1;
}
pinMode(JDQ1, OUTPUT);
pinMode(JDQ2, OUTPUT);
pinMode(JDQ3, OUTPUT);
pinMode(JDQ4, OUTPUT);
pinMode(XJKG1, INPUT);
pinMode(XJKG2, INPUT);
pullUpDnControl(XJKG1, PUD_UP);
//pullUpDnControl(XJKG2, PUD_UP);
if(lirc_init("lirc",1)==-1)
exit(EXIT_FAILURE);
JDQInit();
JDQSet();
//wiringPiISR(XJKG1,INT_EDGE_FALLING,&XJKGZT);
if(lirc_readconfig(NULL,&config,NULL)==0)
{
while(lirc_nextcode(&code)==0)
{
if(code==NULL) continue;
{
if (millis() - buttonTimer > 400)
{
JDQ(key(code));
JDQSet(OC);
}
wiringPiISR(XJKG1,INT_EDGE_FALLING,&XJKGZT);
}
free(code);
}
lirc_freeconfig(config);
}
lirc_deinit();
exit(EXIT_SUCCESS);
return 0;
}
```