格力空调红外协议解析


uint8_t GREE1[35]={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,    
			0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,0x90,0x50,0xd0,0x30,0xB0,0x70
			};
uint8_t GREE2[35]={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,    
			0x0c,0x02,0x0a,0x06,0x0e,0x01,0x09,0x05,0x0d,0x03,0x0b,0x07,0x0f,0x00,0x08    //校验码1
			};
uint8_t GREE3[35]={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,    
			0x06,0x0e,0x01,0x09,0x05,0x0d,0x03,0x0b,0x07,0x0f,0x00,0x08,0x04,0x0c,0x02    //校验码2
			};

void GREE_temperature(uint8_t temp )
{
  	Pir_Start();
	Pir_SendData(0x9c);
	Pir_SendData(GREE1[temp]);	//
	Pir_SendData(0x04);
	Pir_SendData(0x0a);
	Pir_Send3bit(0x40);
	
	Pir_Connect();
	Pir_SendData(0x00);
	Pir_SendData(0x00);
	Pir_SendData(0x00);
	Pir_SendData(GREE2[temp]);//26°
	Pir_Stop();

  	Pir_Start();
	Pir_SendData(0x9c);
	Pir_SendData(GREE1[temp]);
	Pir_SendData(0x04);
	Pir_SendData(0x0e);
	Pir_Send3bit(0x40);
	
	Pir_Connect();
	Pir_SendData(0x00);
	Pir_SendData(0x00);
	Pir_SendData(0x0c);
	Pir_SendData(GREE3[temp]);//26°
	Pir_Stop();
}

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
格力空调遥控信号的编码格式为自定义格式,需要先进行信号录制和解码,然后根据解码结果来编写解析程序。以下是基于 STM32 的格力空调遥控信号解析程序: ```c #include "stm32f10x.h" #define IR_PIN GPIO_Pin_0 #define IR_GPIO GPIOA #define IR_EXTI EXTI_Line0 #define IR_EXTI_PORT_SOURCE GPIO_PortSourceGPIOA #define IR_EXTI_PIN_SOURCE GPIO_PinSource0 #define IR_TIM TIM2 volatile uint32_t irData[128]; volatile uint8_t irCount = 0; volatile uint8_t irState = 0; void IR_TIM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseStructure.TIM_Period = 8999; // 90us TIM_TimeBaseStructure.TIM_Prescaler = 71; // 1MHz TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(IR_TIM, &TIM_TimeBaseStructure); TIM_Cmd(IR_TIM, ENABLE); } void IR_EXTI_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = IR_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(IR_GPIO, &GPIO_InitStructure); GPIO_EXTILineConfig(IR_EXTI_PORT_SOURCE, IR_EXTI_PIN_SOURCE); EXTI_InitStructure.EXTI_Line = IR_EXTI; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void EXTI0_IRQHandler(void) { static uint16_t lastValue = 0; uint16_t duration = (uint16_t)(IR_TIM->CNT); IR_TIM->CNT = 0; if (duration < 10000) { // ignore noise if (irState == 0 && duration > 8000 && duration < 9000) { // start bit irCount = 0; irState = 1; } else if (irState == 1 && duration > 400 && duration < 600) { // 0 bit irData[irCount++] = 0; irState = 2; } else if (irState == 1 && duration > 1200 && duration < 1400) { // 1 bit irData[irCount++] = 1; irState = 2; } else if (irState == 2) { // next bit irState = 1; } else { // invalid bit irData[irCount++] = lastValue; // use previous value } lastValue = irData[irCount-1]; } else { // stop bit irState = 0; } EXTI_ClearITPendingBit(IR_EXTI); } int main(void) { IR_TIM_Config(); IR_EXTI_Config(); while(1) { if (irState == 0 && irCount == 70) { // valid data if (irData[0] == 0 && irData[1] == 1 && irData[2] == 0 && irData[3] == 1) { // check start code uint16_t addr = 0; uint16_t cmd = 0; for (int i = 0; i < 8; i++) { addr = (addr << 1) | irData[4+i]; } for (int i = 0; i < 8; i++) { cmd = (cmd << 1) | irData[20+i]; } // do something with addr and cmd } irCount = 0; } } } ``` 此程序可以解析格力空调遥控信号,使用了 TIM2 定时器和 EXTI 外部中断来计时和捕获信号。当接收到有效的红外线信号时,会将信号值存储在 `irData` 数组中,并根据信号格式和状态机来判断是否解析完整个数据包。如果解析成功,可以获取地址码和命令码并执行相应的操作。 需要注意的是,格力空调遥控信号的编码格式可能存在差异,此程序只是一个简单的解析例程,实际使用时需要根据具体的遥控器型号和编码格式进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值