跪求以下zigbee程序协调器S1在哪部分控制电机转动?急急急急急急

/*********************************************************************

  • INCLUDES */ #include "OSAL.h" #include "AF.h" #include "ZDApp.h" #include "ZDObject.h" #include "ZDProfile.h"

#include "GenericApp.h"
#include "DebugTrace.h"

#if !defined( WIN32 )
#include "OnBoard.h"
#endif

/* HAL /
#include "hal_lcd.h"
#include "hal_led.h"
#include "hal_key.h"
#include "hal_uart.h"
/
RTOS /
#if defined( IAR_ARMCM3_LM )
#include "RTOS_App.h"
#endif

/
********************************************************************

  • MACROS */ #define LIGHT P0_5 //定义P0.5口为光敏控制端 #define SMOKE P0_6 //定义P0.6口为烟雾控制端 #define LED P1_0 #define A1 P1_4 //定义步进电机连接端口 #define B1 P1_5 #define C1 P1_6 #define D1 P1_7

#define uchar unsigned char
#define uint unsigned int
uint8 motorstatus,CS,CCS,Cmotorstatus;
uchar phasecw[4] ={0x80,0x40,0x20,0x10};//正转 电机导通相序 D-C-B-A
uchar phaseccw[4]={0x10,0x20,0x40,0x80};//反转 电机导通相序 A-B-C-D
static void MotorData(uchar data);
static void MotorCW(void);
static void MotorCCW(void);
static void MotorStop(void);
static void InitIO(void);
static void Delay_MS(uint Time);// ms延时
uint8 AppTitle[] = "ALD2530 Motor"; //应用程序名称
uint8 LedState = 0;
uint8 ucEdDir = 0; //终端1为正转 2为反转
uint8 ucDirection = 1; //1为正转 2为反转
uint8 ucSpeed = 2; //速度2-10之间
uint8 DataBuf[3];
uint8 count,Ccount;
/*********************************************************************

  • MACROS */

/*********************************************************************

  • CONSTANTS */

/*********************************************************************

  • TYPEDEFS */

/*********************************************************************

  • GLOBAL VARIABLES */ // This list should be filled with Application specific Cluster IDs. const cId_t GenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS] = { GENERICAPP_zigbee1 };

const SimpleDescriptionFormat_t GenericApp_SimpleDesc =
{
GENERICAPP_ENDPOINT, // int Endpoint;
GENERICAPP_PROFID, // uint16 AppProfId[2];
GENERICAPP_DEVICEID, // uint16 AppDeviceId[2];
GENERICAPP_DEVICE_VERSION, // int AppDevVer:4;
GENERICAPP_FLAGS, // int AppFlags:4;
GENERICAPP_MAX_CLUSTERS, // byte AppNumInClusters;
(cId_t *)GenericApp_ClusterList, // byte *pAppInClusterList;
GENERICAPP_MAX_CLUSTERS, // byte AppNumInClusters;
(cId_t *)GenericApp_ClusterList // byte *pAppInClusterList;
};

// This is the Endpoint/Interface description. It is defined here, but
// filled-in in GenericApp_Init(). Another way to go would be to fill
// in the structure here and make it a "const" (in code space). The
// way it's defined in this sample app it is define in RAM.
endPointDesc_t GenericApp_epDesc;

/*********************************************************************

  • EXTERNAL VARIABLES */

/*********************************************************************

  • EXTERNAL FUNCTIONS */

/*********************************************************************

  • LOCAL VARIABLES */ byte GenericApp_TaskID; // Task ID for internal task/event processing // This variable will be received when // GenericApp_Init() is called. devStates_t GenericApp_NwkState;

byte GenericApp_TransID; // This is the unique message ID (counter)

afAddrType_t GenericApp_DstAddr;

/*********************************************************************

  • LOCAL FUNCTIONS */ static void GenericApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg ); static void GenericApp_HandleKeys( byte shift, byte keys ); static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pckt ); static void GenericApp_SendTheMessage( void );

#if defined( IAR_ARMCM3_LM )
static void GenericApp_ProcessRtosMessage( void );
#endif
#define LED P1_2
/*********************************************************************

  • NETWORK LAYER CALLBACKS */

/*********************************************************************

  • PUBLIC FUNCTIONS */

void GenericApp_Init( uint8 task_id )
{
GenericApp_TaskID = task_id;
GenericApp_NwkState = DEV_INIT;
GenericApp_TransID = 0;
InitIO(); //初始化电机IO引脚
P0DIR&=~(1<<5|1<<6);//P05 P06输入
P1DIR|=0X01;//P10输出
motorstatus=0;//电机状态标志0
//Cmotorstatus=1;
// Device hardware initialization can be added here or in main() (Zmain.c).
// If the hardware is application specific - add it here.
// If the hardware is other parts of the device add it in main().

//以下三句,是设置终端向协调器单播
GenericApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
GenericApp_DstAddr.endPoint = GENERICAPP_ENDPOINT;
GenericApp_DstAddr.addr.shortAddr = 0x0000;

// Fill out the endpoint description.
GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT;
GenericApp_epDesc.task_id = &GenericApp_TaskID;
GenericApp_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;
GenericApp_epDesc.latencyReq = noLatencyReqs;

// Register the endpoint description with the AF
afRegister( &GenericApp_epDesc );

// Register for all key events - This app will handle all key events
RegisterForKeys( GenericApp_TaskID );

// Update the display
#if defined ( LCD_SUPPORTED )
HalLcdWriteString( "GenericApp", HAL_LCD_LINE_1 );
#endif

ZDO_RegisterForZDOMsg( GenericApp_TaskID, End_Device_Bind_rsp );
ZDO_RegisterForZDOMsg( GenericApp_TaskID, Match_Desc_rsp );

#if defined( IAR_ARMCM3_LM )
// Register this task with RTOS task initiator
RTOS_RegisterApp( task_id, GENERICAPP_RTOS_MSG_EVT );
#endif
}

uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
{
uint8 i;
afIncomingMSGPacket_t *MSGpkt;
afDataConfirm_t *afDataConfirm;

// Data Confirmation message fields
byte sentEP;
ZStatus_t sentStatus;
byte sentTransID; // This should match the value sent
(void)task_id; // Intentionally unreferenced parameter

if ( events & SYS_EVENT_MSG )
{
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );
while ( MSGpkt )
{
switch ( MSGpkt->hdr.event )
{
case ZDO_CB_MSG:
GenericApp_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );
break;

    case KEY_CHANGE://此处是按键事件函数是S1按键按下触发的事件,主要是实现光敏的控制
      GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );//按键触发函数执行
      break;

    case AF_DATA_CONFIRM_CMD:
      // This message is received as a confirmation of a data packet sent.
      // The status is of ZStatus_t type [defined in ZComDef.h]
      // The message fields are defined in AF.h
      afDataConfirm = (afDataConfirm_t *)MSGpkt;
      sentEP = afDataConfirm->endpoint;
      sentStatus = afDataConfirm->hdr.status;
      sentTransID = afDataConfirm->transID;
      (void)sentEP;
      (void)sentTransID;

      // Action taken when confirmation is received.
      if ( sentStatus != ZSuccess )
      {
        // The data wasn't delivered -- Do something
      }
      break;

    case AF_INCOMING_MSG_CMD://有数据接收到,所触发的函数事件
      GenericApp_MessageMSGCB( MSGpkt );//接收到协调器发来的数据,并进行执行。
      break;

    case ZDO_STATE_CHANGE:
      GenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
      if ( (GenericApp_NwkState == DEV_ZB_COORD)
          || (GenericApp_NwkState == DEV_ROUTER)
          || (GenericApp_NwkState == DEV_END_DEVICE) )
      {
        // Start sending "the" message in a regular interval.
        osal_start_timerEx( GenericApp_TaskID,
                            GENERICAPP_SEND_MSG_EVT,
                            GENERICAPP_SEND_MSG_TIMEOUT );
      }
      break;

    default:
      break;
  }

  // Release the memory
  osal_msg_deallocate( (uint8 *)MSGpkt );

  // Next
  MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );
}

// return unprocessed events
return (events ^ SYS_EVENT_MSG);

}

5个回答

急急急
急急急
急急急
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

// Send a message out - This event is generated by a timer
// (setup in GenericApp_Init()).
if ( events & GENERICAPP_SEND_MSG_EVT )
{
// Send "the" message
GenericApp_SendTheMessage();//此处是终端发送烟雾状态值给到协调器的函数
if(motorstatus%2)//判断此状态值,此状态值是奇数的时候 ,光敏可以控制电机,当其是偶数的时候,不进行控制
{
if(LIGHT==0&&CS==0)//此处是判断当前有光,并且CS变量为0的时候,才执行下面的语句,初始化状态下CS=0的
{
CS=1;//将CS变量赋值为1,上面的语句就不能执行第二次了。这样就保证了电机只工作一段时间并停止
CCS=0;//CCS变量为0
count=0; //时间赋值位0
}
if(count<20&&CS)//判断时间值是否小于20并且CS是否为1,此处时间值是0小于20成立,CS上面已经赋值为1,所以成立,执行下面的语句
{
count++;//变量不断进行数据加
for(i=0;i<50;i++)//这里的for循环是实现步进电机给充足的脉冲,让其正常的运转起来
MotorCCW(); //顺时针转动
}

if(LIGHT&&CCS==0)//此处是判断当前没有光,并且CCS变量为0的时候,才执行下面的语句,初始化状态下CCS=0的
{
  CS=0;//CS变量重新为0,那么最上面的光敏判断就可以进行继续执行了。
 CCS=1;//将CSS变量赋值为1,上面的语句就不能执行第二次了。这样就保证了电机只工作一段时间并停止
  count=0;  //时间赋值位0
}
  if(count<20&&CCS)//判断时间值是否小于20并且CS是否为1,此处时间值是0小于20成立,CCS上面已经赋值为1,所以成立,执行下面的语句
  {
      count++;//变量不断进行数据加
  for(i=0;i<50;i++)//这里的for循环是实现步进电机给充足的脉冲,让其正常的运转起来
    MotorCW();      //逆时针转动
  }

}

if(Cmotorstatus==0)//此变量是协调器按键S2所赋予的,协调器按键S2按下形成奇偶数,从而判断此值如果是偶数的时候,进行执行。此处的变量值是从下面的接收函数当中获取的,可以结合接收函数来看
{
if(ucEdDir==0X01)//如果此时方向为1,那么电机顺时针转动。方向位置也是协调器S1按键所赋予的,此处看接收函数的数据
{

  if(Ccount<20)//判断当前的变是否小于20,默认情况下是0,所以此语句是真,可以执行
  {
    Ccount++;;//变量不断进行数据加
 for(i=0;i<50;i++)//这里的for循环是实现步进电机给充足的脉冲,让其正常的运转起来
      MotorCW();       //顺时针转动
  }
  else//当变量值超过20之后,10s完成之后
  {
  Ccount=0;//此处的计数变量重新赋值为0,这样在下一次工作的时候,就可以重新计数
  ucEdDir=0;//方向位变为0,这样子上面的IF语句就不能再执行了,那么电机就会工作一段时间之后,停止
  }
}
if(ucEdDir==0x02)//如果此时方向为2,那么电机逆时针转动。方向位置也是协调器S1按键所赋予的,此处看接收函数的数据
{

  if(Ccount<20)//判断当前的变是否小于20,默认情况下是0,所以此语句是真,可以执行
  {
    Ccount++;//变量不断进行数据加
      for(i=0;i<50;i++)//这里的for循环是实现步进电机给充足的脉冲,让其正常的运转起来
      MotorCCW();      //逆时针转动
  }
  else
  {
   Ccount=0;//此处的计数变量重新赋值为0,这样在下一次工作的时候,就可以重新计数
      ucEdDir=0;//方向位变为0,这样子上面的IF语句就不能再执行了,那么电机就会工作一段时间之后,停止
  }

}
}
else//当S2协调器按键按下形成奇数的时候,此处的电机应该停止
{
  MotorStop();//执行停止函数

// Ccount=0;
// ucEdDir=0;
}
// Setup to send message again
osal_start_timerEx( GenericApp_TaskID,
GENERICAPP_SEND_MSG_EVT,
GENERICAPP_SEND_MSG_TIMEOUT );//此处是系统调用时间函数,
、//意思是每GENERICAPP_SEND_MSG_TIMEOUT调用一次此处的函数执行,此处是200ms

// return unprocessed events
return (events ^ GENERICAPP_SEND_MSG_EVT);

}

#if defined( IAR_ARMCM3_LM )
// Receive a message from the RTOS queue
if ( events & GENERICAPP_RTOS_MSG_EVT )
{
// Process message from RTOS queue
GenericApp_ProcessRtosMessage();

// return unprocessed events
return (events ^ GENERICAPP_RTOS_MSG_EVT);

}
#endif

// Discard unknown events
return 0;
}

/*********************************************************************

  • Event Generation Functions */

static void GenericApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg )
{
switch ( inMsg->clusterID )
{
case End_Device_Bind_rsp:
if ( ZDO_ParseBindRsp( inMsg ) == ZSuccess )
{
// Light LED
HalLedSet( HAL_LED_4, HAL_LED_MODE_ON );
}
#if defined( BLINK_LEDS )
else
{
// Flash LED to show failure
HalLedSet ( HAL_LED_4, HAL_LED_MODE_FLASH );
}
#endif
break;

case Match_Desc_rsp:
  {
    ZDO_ActiveEndpointRsp_t *pRsp = ZDO_ParseEPListRsp( inMsg );
    if ( pRsp )
    {
      if ( pRsp->status == ZSuccess && pRsp->cnt )
      {
        GenericApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
        GenericApp_DstAddr.addr.shortAddr = pRsp->nwkAddr;
        // Take the first endpoint, Can be changed to search through endpoints
        GenericApp_DstAddr.endPoint = pRsp->epList[0];

        // Light LED
        HalLedSet( HAL_LED_4, HAL_LED_MODE_ON );
      }
      osal_mem_free( pRsp );
    }
  }
  break;

}
}

/*********************************************************************
按键事件触发函数,此处主要是S1按键,
*

  • @return none
    */
    static void GenericApp_HandleKeys( uint8 shift, uint8 keys )
    {

    if ( keys & HAL_KEY_SW_6 )//S1按键按下,对应的键值是SW_6。协议栈规定的设计
    {
    motorstatus++;//电机状态变量加。就实现S1按键控制光敏继续工作与不工作的状态
    HalLedBlink( HAL_LED_2, 2,50, 500 ); //LED1闪烁提示,表示按键按下
    }

}

/*********************************************************************

  • LOCAL FUNCTIONS */

static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint8 buf[3];
uint16 i;
switch ( pkt->clusterId )
{
case GENERICAPP_zigbee1://接收协调器发的数据
osal_memcpy(buf, pkt->cmd.Data, pkt->cmd.DataLength);//将接收到的数据赋值给一个buf的数组变量进行存储
if(buf[0] == 0x30) //0x30 正反转标记,S1按键按下此处结合协调器了解到他的数据第一位。来判断后面接收的数据具体是什么功能
{
ucEdDir = buf[1]; //获取转动方向,有了转动方向。上面的电机工作函数就可以通过此变量对电机进行正转或者是反转

}
else if(buf[0] == 0x31)//0x31 此处是S2按键按下标志,
{
  Cmotorstatus=buf[1]%2;//buf[1]%2的意思是对buf[1]变量进行对2取余数。.那么获取的变量付给标志位,这样在上面的函数
  //根据此值来判断电机是继续转动还是停止工作。

}
break;
}
}

/*********************************************************************
无线数据发送函数,此处是将终端的数据发送协调器
*/
static void GenericApp_SendTheMessage( void )
{
uint8 data;
if(SMOKE)//判断到当前的P06端口为高电平,表明没有烟雾,
data=0;//给变量data赋值为0,这样
else//有烟雾
data=1;//变量赋值为1,当协调器接收到此数据为1的时候,就闪烁LED灯
if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,
GENERICAPP_zigbee1,
1 ,
(byte *)&data,
&GenericApp_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{//发送一个字节给到协调器,协调器通过判断此数据是1或者是0,来决定是否闪烁LED进行报警。、
}
else
{
// Error occurred in request to send.
}
}

#if defined( IAR_ARMCM3_LM )

static void GenericApp_ProcessRtosMessage( void )
{
osalQueue_t inMsg;

if ( osal_queue_receive( OsalQueue, &inMsg, 0 ) == pdPASS )
{
uint8 cmndId = inMsg.cmnd;
uint32 counter = osal_build_uint32( inMsg.cbuf, 4 );

switch ( cmndId )
{
  case CMD_INCR:
    counter += 1;  /* Increment the incoming counter */
                   /* Intentionally fall through next case */

  case CMD_ECHO:
  {
    userQueue_t outMsg;

    outMsg.resp = RSP_CODE | cmndId;  /* Response ID */
    osal_buffer_uint32( outMsg.rbuf, counter );    /* Increment counter */
    osal_queue_send( UserQueue1, &outMsg, 0 );  /* Send back to UserTask */
    break;
  }

  default:
    break;  /* Ignore unknown command */    
}

}
}
#endif

//---------------------------------------------
//步进电机驱动部分
static void MotorData(uchar data)
{
A1 = 1&(data>>4);
B1 = 1&(data>>5);
C1 = 1&(data>>6);
D1 = 1&(data>>7);
}

//顺时针转动
static void MotorCW(void)
{
uchar i;
for(i=0;i<4;i++)
{
MotorData(phasecw[i]);
Delay_MS(ucSpeed);//转速调节
}
}
//逆时针转动
static void MotorCCW(void)
{
uchar i;
for(i=0;i<4;i++)
{
MotorData(phaseccw[i]);
Delay_MS(ucSpeed);//转速调节
}
}

//停止转动
static void MotorStop(void)
{
MotorData(0x00);
}

/****************************************************************************

  • 名 称: InitIO()
  • 功 能: 初始化IO口程序
  • 入口参数: 无
  • 出口参数: 无
    ****************************************************************************/
    static void InitIO(void)
    {
    P1SEL &= 0x0F;
    P1DIR |= 0xF0;

    MotorCW();//停止转动
    }

static void Delay_MS(uint Time)// 1ms延时
{
char i;

while(Time--)
{
for(i=0;i<100;i++)
MicroWait(10);
}
}
/*********************************************************************
*/

有偿 我发QQ红包 3026765284 急求求求求求

发反反复复反复反复反复反复反复反复反复反复反复

qq:2540318046

加我qq,提供有偿技术支持

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于用ZStack开发ZigBee项目中协调器重启的问题?
1、现在有一个组好的zigbee网络,三种类型节点各一个,终端节点给协调器发送数据,这个时候协调器故障,我让协调器重启或者更换一个一样的协调器,如何实现让协调器还是加入原来的网络,而不是自己建立一个新的网络。(PANID已经固定,NV_restore已经),但是都不行。 2、然后现在有一个基本的想法,就是通过协调器启动过程中,先扫描网络中是否有和自己PANID一样的网络,如果有,就加入网络,如果没有就新建网络,可是代码上不知道能否实现,具体在哪修改请教大神。 3、我给协调器加了NV_restore,程序会走到如下图位置,我想请教这个函数是做什么的,会返回哪些可能值?![图片说明](https://img-ask.csdn.net/upload/201602/27/1456553855_60735.png)
用QT对zigbee编程实现温度采集及数据发送程序
如题,跪求程序,课题是基于zigbee的煤炭自燃温度报警系统设计,求指导思路,求用QT对zigbee的编程。小的谢谢各位大神了
zigbee终端和路由该怎么通信,路由和协调器该怎么通信
网状结构,采集节点(终端1)发送数据给路由节点,路由节点再发送给协调器,协调器通过路由节点来控制另一个节点(终端2)上的继电器开关. 求大神给我一点详细的思路,最好有一小段代码供参考.
ZigBee组网 点播 如何 实现一个协调器 向 多个终端 发送数据??
我的想法是 组网后 各终端先都给协调器发送数据,协调器可直接读取每个终端的 短地址(短地址随数据发送过来的) ,然后对应的短地址记录下来(temp)作为 协调器的 点播参数配置中的短地址配置 (.addr=0x0000变成.addr=temp) 然后这样 协调器发送数据出去 对应短地址的终端就能接收到数据。 但是测试没有成功 ,不知道是不是这个想法有漏洞,求大神!!
关于ZigBee协议栈中的新数据类型
ZigBee协议栈中新数据类型种类繁多,跪求诸位大神整理一份ZigBee中的新数据类型清单
zigbee有关点对多的通信
想实现一个zigbee协调器对多个zigbee终端发送数据进行控制,想通过桢过滤的方法实现,通过设置目标地址源地址来区别不同的终端,单具体是如何实现的呢?怎样使用贞过滤嗯?或者有什么其他方式实现对多个终端控制呢?
ZigBee主端如何控制路由的io端口
ZigBee主端如何控制路由的io端口,求例子…945848636@qq.com这是我的邮箱,谢谢
zigbee全网PANID变化问题,求高人指点,急。。。。
大家好, 本人在此真诚向大家请教这个头疼的问题,我有一个协调器以及N个路由器(20几个,全是烧的路由器,没有节点设备),跑了一段时间后(有可能是一个星期或一个月)就出现全网PANID发生变化,一直查这个问题至今没有头绪,各位高人能否指教一二。 我的协调器编译选项配置如下: NV_RESTORE NWK_MANAGER xMANAGED_SCAN ZTOOL_P1 MT_TASK MT_ZDO MT_APP_FUNC MT_APP_CB_FUNC MT_SYS_FUNC MT_SYS_CB_FUNC MT_ZDO_FUNC MT_ZDO_CB_FUNC MT_AF_FUNC MT_AF_CB_FUNC MT_UTIL_FUNC MT_UTIL_CB_FUNC MT_ZDO_MGMT MT_ZDO_CB_MGMT xLCD_SUPPORTED=DEBUG APP_COORDINATE HOLD_AUTO_START 路由器编译选项: NWK_AUTO_POLL NV_INIT NV_RESTORE xMT_TASK HOLD_AUTO_START
为什么STM32和zigbee不能串口通信?
最近在做一个项目,需要用到zigbee与STM32串口通信,我用的是STM32的开发板和zigbee的底板。如果是一个zigbee单独的串口通信工程,32就能和zigbee进行通信,但是如果是z-stack里的串口通信就不能和32进行通信。
求问一些关于zigbee协议栈的问题
void SampleApp_Send_P2P_Message( void ) { byte state[4],temp[5],tt[4]; HalUARTRead(0, temp, 5); tt[0] = temp[0]; tt[1] = temp[1]; tt[2] = temp[2]; tt[3] = temp[3]; osal_memcpy(state,tt, 4); HalUARTWrite(0,state, 4); //串口显示 //HalLcdWriteString( state, HAL_LCD_LINE_3 ); //LCD显示 HalUARTWrite(0,"\n", 1); //串口显示 if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc, SAMPLEAPP_P2P_CLUSTERID, 4, state, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } else { // Error occurred in request to send. } } 这部分代码哪部分会在协调器执行哪部分在终端执行啊。我是想在终端通过串口写入一个数据然后在协调器上通过串口把这个数据读出来。求指教
有ZIGBEE程序大神马?帮忙解释下下面的代码,谢谢!
if( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) //发送数据超时 { if(P0_0 == 0) { if(SmogState == 0) { SmogState = 1; RfTx.TXDATA.Head = '&'; RfTx.TXDATA.HeadCom[0] = 'A'; RfTx.TXDATA.HeadCom[1] = 'S'; RfTx.TXDATA.HeadCom[2] = 'M'; ieeeAddr = NLME_GetExtAddr(); memcpy(RfTx.TXDATA.Laddr,ieeeAddr,8); temp1 = NLME_GetShortAddr(); RfTx.TXDATA.Saddr[0] = temp1; RfTx.TXDATA.Saddr[1] = temp1>>8; RfTx.TXDATA.LastByte = '*'; SendData(0x0000, RfTx.TxBuf, 32);//发送报警数据 } } else { SmogState = 0; } osal_start_timerEx( SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,1000); //触发定时事件 return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT); } 接收代码 voidSampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) { #ifdef WXL_COORD uint8tt; memcpy(0x0000,RfTx.TxBuf, 32);//读出无线接收的数据 osal_stop_timerEx(SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT);//停止超时计数器 LcdPutString16_8(0,0,RfRx.RXDATA.DataBuf,sizeof(RfRx.RXDATA.DataBuf),15); if((RfRx.RXDATA.Head== '&') && (RfRx.RXDATA.LastByte == '*')) { if(RfRx.RXDATA.HeadCom[0]=='A'&&RfRx.RXDATA.HeadCom[S]=='A'&&RfRx.RXDATA.HeadCom[2]=='M') { tt =RfRx.RXDATA.DataBuf[4]; if(tt =0)后面的是判断省略
ZigBee睡眠程序怎么编?
初学者。要求程序睡眠时需要哪些头文件? SampleApp.c文件里用加关于睡眠的程序吗?
linux串口通信!求大神!急
我现在有一块7444的开发板,想实现7444通过串口传输命令给7444开发板上的另一模块cc2530(zigbee中的协调器),然后发送给给第三方开发板(只要当前cc2530能接收到命令就能直接发送数据到zigbee终端,以实现),然后终端zigbee模块的温度数据回传到7444开发板上的CC2530协调器,再从串扣回传给7445,已知我当前的串口设备文件是tty1,怎么编写C程序读取改开发板上cc2530传来的温度数据,和通过串口给cc2530发送命令!
求大神,linux串口通信方面!!!7445CPU串口和CC2530通信验证
我现在有一块7444的开发板,想实现7444通过串口传输命令给7444开发板上的另一模块cc2530(zigbee中的协调器),然后发送给给第三方开发板(只要当前cc2530能接收到命令就能直接发送数据到zigbee终端,以实现),然后终端zigbee模块的温度数据回传到7444开发板上的CC2530协调器,再从串扣回传给7445,已知我当前的串口设备文件是tty1,怎么编写C程序读取改开发板上cc2530传来的温度数据,和通过串口给cc2530发送命令! ![图片说明](https://img-ask.csdn.net/upload/201512/02/1449042367_601908.png) 上图是zigbee协议栈的串口程序,主要是 1、 接收到数据 2、 判断长度然后给数据包 pMsg 分配内存 3、 打包发送给上层 OSAL待处理 4、 释放内存 其中数据包中的数据部分格式是 datalen + data 本来CC2530是个独立的zigbee模块,直接通过RS232转串口可以直接在串口工具中显示终端发送来的温度数据和写入命令控制终端了,而现在在PC和CC2530之间加了一个arm的CPU,这个cpu和CC2530之间是通过串口连接通信的,问题就出现在这里了,这部分我没接触过个,所以不会,现在求个大神帮忙解决下。
android开发:zigbee网关
zigbee网关与zigbee模块怎么进行通信配置?? zigbee网关是什么
协调器用AF_DataRequest点播终端;但是发送的数据有异常
协调器点播终端节点A,周期是100ms左右;一切正常;但是当多开几个终端节点BCDE周期性600ms点播协调器一次的时候,抓包看的终端节点A与协调器的数据就不对............节点A正常的data request 协调器ACK,然后协调器发送的数据是data类型但是没有mac、nwk、aps层的数据;具体看截图![图片说明](https://img-ask.csdn.net/upload/201703/09/1489047508_721885.png)
zigbee 如何编程 树状网
通过烧写,我的路由器和终端节点是直接连接到协调器的 但我是想让终端节点只连接到路由器,然后路由器再连接到协调器,形成一个树状网的拓扑结构,请问该怎样编程??
基于Zigbee技术 DS18B20芯片的程序
基于上述芯片,读取芯片内温度传感器的数值,将外部温度和内部温度显示出来 或者是选一个外接传感器(温度、震动等),将传感器数值通过串口显示在电脑屏幕上
zigbee bh1750
zigbee bh1750 有实现出来的吗 怎么用CC2530串口显示出BH1750的光照值。着急用,可以有偿
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问