/******************************************************************************
* @fn zb_ReceiveDataIndication
*
* @brief The zb_ReceiveDataIndication callback function is called
* asynchronously by the ZigBee stack to notify the application
* when data is received from a peer device.
*
* @param source - The short address of the peer device that sent the data
* command - The commandId associated with the data
* len - The number of bytes in the pData parameter
* pData - The data sent by the peer device
*
* @return none
*/
/*
void zb_ReceiveDataIndication( uint16 source, uint16 command, uint16 len, uint8 *pData )
{
//处理数据格式
gtwData.parent = BUILD_UINT16(pData[SENSOR_PARENT_OFFSET+ 1], pData[SENSOR_PARENT_OFFSET]);
gtwData.source=source;
gtwData.temp=*pData;
gtwData.voltage=*(pData+1);
// Flash LED 1 once to indicate data reception
//接收到数据之后LED灯闪烁1次
HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );
HalLedSet( HAL_LED_1, HAL_LED_MODE_BLINK );
// Send gateway report
//发送网关数据
sendGtwReport(>wData);
}
*/
void zb_ReceiveDataIndication(uint16 source, uint16 command, uint16 len, uint8 *pData) {
gtwData.parent = BUILD_UINT16(pData[SENSOR_PARENT_OFFSET+1], pData[SENSOR_PARENT_OFFSET]);
gtwData.source = source;
gtwData.temp = *pData;
gtwData.humidity = *(pData+1);
gtwData.humandetected = *(pData+2);
// Flash LED 1 once to indicate data reception
HalLedSet(HAL_LED_1, HAL_LED_MODE_OFF);
HalLedSet(HAL_LED_1, HAL_LED_MODE_BLINK);
// 格式化显示数据
char displayBuf[50];
//sprintf(displayBuf, "22145131 22145137:%d,%d\r\n", gtwData.temp, gtwData.humidity);
sprintf(displayBuf, "A0=%d A1=%d H0=%d\r\n", gtwData.temp, gtwData.humidity,gtwData.humandetected);
HalUARTWrite(HAL_UART_PORT_0,(uint8 *)displayBuf, strlen(displayBuf));
sendGtwReport(>wData);
}
/******************************************************************************
* @fn uartRxCB
*
* @brief Callback function for UART
*
* @param port - UART port
* event - UART event that caused callback
*
* @return none
*/
/*void uartRxCB(uint8 port, uint8 event) {
uint8 pBuf[RX_BUF_LEN];
uint16 len;
uint16 cmd;
if (event != HAL_UART_TX_EMPTY) {
len = HalUARTRead(HAL_UART_PORT_0, pBuf, RX_BUF_LEN);
if (len > 0) {
// 检查是否是PING请求
cmd = BUILD_UINT16(pBuf[SYS_PING_CMD_OFFSET+1], pBuf[SYS_PING_CMD_OFFSET]);
if ((pBuf[FRAME_SOF_OFFSET] == CPT_SOP) && (cmd == SYS_PING_REQUEST)) {
sysPingReqRcvd();
return;
}
// 处理字符串命令
if (strncmp((char *)pBuf, "0x131 ON", 8) == 0) {
// LED ON命令
HalLedSet(HAL_LED_2, HAL_LED_MODE_BLINK);
uint8 cmd[] = "305 ON";
zb_SendDataRequest(0xFFFF, SENSOR_REPORT_CMD_ID, sizeof(cmd)-1, cmd, 0, AF_ACK_REQUEST, 0);
HalUARTWrite(HAL_UART_PORT_0, "22145131 22145137:LED ON ok\r\n", sizeof("22145131 22145137:LED ON ok\r\n"));
}
else if (strncmp((char *)pBuf, "0x131 OFF", 9) == 0) {
// LED OFF命令
HalLedSet(HAL_LED_2, HAL_LED_MODE_OFF);
uint8 cmd[] = "305 OFF";
zb_SendDataRequest(0xFFFF, SENSOR_REPORT_CMD_ID, sizeof(cmd)-1, cmd, 0, AF_ACK_REQUEST, 0);
HalUARTWrite(HAL_UART_PORT_0, "22145131 22145137:LED OFF命令已发送\r\n", sizeof("22145131 22145137:LED OFF命令已发送\r\n"));
}
else if (strncmp((char *)pBuf, "0x132", 5) == 0) {
// 单次采集命令
uint8 cmd[] = "SINGLE_REPORT";
zb_SendDataRequest(0xFFFE, SENSOR_REPORT_CMD_ID, sizeof(cmd)-1, cmd, 0, AF_ACK_REQUEST, 0);
HalUARTWrite(HAL_UART_PORT_0, "22145131 22145137:one collect ok\r\n", sizeof("22145131 22145137:one collect ok\r\n"));
}
else if (strncmp((char *)pBuf, "0x133", 5) == 0) {
// 连续采集命令
continuousReporting = 1;
reportCount = 0;
uint8 cmd[] = "CONTINUOUS_REPORT";
zb_SendDataRequest(0xFFFE, SENSOR_REPORT_CMD_ID, sizeof(cmd)-1, cmd, 0, AF_ACK_REQUEST, 0);
HalUARTWrite(HAL_UART_PORT_0, "22145131 22145137:many collect ok\r\n", sizeof("22145131 22145137:many collect ok\r\n"));
}
else if (strncmp((char *)pBuf, "0x134", 5) == 0) {
// 停止采集命令
continuousReporting = 0;
uint8 cmd[] = "STOP_REPORT";
zb_SendDataRequest(0xFFFE, SENSOR_REPORT_CMD_ID, sizeof(cmd)-1, cmd, 0, AF_ACK_REQUEST, 0);
HalUARTWrite(HAL_UART_PORT_0, "22145131 22145137:stop collect ok\r\n", sizeof("22145131 22145137:stop collect ok\r\n"));
}
}
}
}*/
/*风扇传感器------------------------------------------------------------------
------------------------------------------------------------------------*/
//转速显示函数
int count = 0;
void Speed(void)
{
char Str[10];
sprintf(Str,"%d\r\n",count/3);
Uart_Send_String(Str); //串口发送数据
count = 0;
halWait(250); //延时
halWait(250);
halWait(250);
halWait(250);
}
/*T1初始化函数,配置为pwm模式
-------------------------------------------------------*/
void t1_init(void)
{
PERCFG = 0x03; //位置1 定时器1设置为位置1,
P0SEL |= 0x20; //P0_5用作外设接口
P0DIR |= 0x20;
P2DIR |= 0xC0;
T1CNTL = 0x00;
T1CNTH = 0x00;
T1CCTL3 = 0x2C; //比较模式6
T1CC0L = 0xFF; //周期
T1CC0H = 0xEF;
T1CC3L = 0xFF; //占空比
T1CC3H = 0x6F;
T1CTL = 0x0E; //模模式
}
/*中断服务子程序
-------------------------------------------------------*/
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
EA = 0; //关中断
if((P0IFG & 0x02 ) >0 ) //按键中断 ,p0_1
{
halWait(200); //去抖动
P0IFG &= ~0x02; //P0.1中断标志清0
T1CC3H = T1CC3H + 0x20; //减小占空比
T1CC3L = 0xFF;
}
if((P0IFG & 0x10 ) >0 ) //按键中断 ,p0_4
{
halWait(200); //去抖动
P0IFG &= ~0x10; //P0.4中断标志清0
T1CC3H = T1CC3H - 0x20; //增大占空比
T1CC3L = 0xFF;
}
if((P0IFG & 0x40 ) >0 ) // p0_6
{
P0IFG &= ~0x40; //P0.5中断标志清0
count++;
}
P0IF = 0; //P0中断标志清0
EA = 1; //开中断
}
/*延时函数
-------------------------------------------------------*/
void halWait(unsigned char wait)
{
unsigned long largeWait;
if(wait == 0)
{return;}
largeWait = ((unsigned short) (wait << 7));
largeWait += 114*wait;
largeWait = (largeWait >> CLKSPD);
while(largeWait--);
return;
}
//节能模式
void SetLowPowerMode(void) {
// 1. 降低传感器采样频率
osal_stop_timerEx(sapi_TaskID, SENSOR_SAMPLE_EVT);
osal_start_timerEx(sapi_TaskID, SENSOR_SAMPLE_EVT, 5000); // 5秒采样
// 2. 关闭非必要外设
HalLedSet(HAL_LED_2, HAL_LED_MODE_OFF); // 关闭D6
// 3. 发送节能通知
Uart_Send_String("SYSTEM: Entering Low Power Mode");
}
最新发布