Beispiel #1
0
void Read_Data_burst(void)       //读取平面位移
{
  static int SumX;
  static int SumY;
  int sum_x,sum_y;
  unsigned char move=0;
  int  x=0;              //表示相对上一次定位信息输出时刻的位移增量
  int  y=0;
//burst读。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
	
	//Spi_Change_To_ADNS3080_();
	
	ON_CS();
	SPI_Simu_RW(Motion_Burst);   //爆发方式读
	delay_us(75);
	move=SPI_Simu_RW(0xFF);             
	x=SPI_Simu_RW(0xFF);
	y=SPI_Simu_RW(0xFF);
	if(x&0x80)
	  {
	  //x的二补码转换	
	  x -= 1;                  //*******************************************************//
	  x = ~x;									 //
	  x=(-1)*x;                // 这里得注意,读取的detal_x,detal_y是8位有符号的,而定义的x,y是16位整型有符号
	  x-=256;                  //所以,转换得注意
 	  }                        //
	if(y&0x80)                 //********************************************************//
	  {
	  //y的二补码转换	
	  y -= 1;
	  y = ~y;	
	  y=(-1)*y;
	  y-=256;
	  } 
	SumX=SumX+x;             //累加X读入的移动数据
	SumY=SumY+y;			 //累加Y读入的移动数据
	OFF_CS();
	delay_us(4);  //必须延时4um来退出motion mode模式
	OFF_CS();
 	sum_x=(25.4*(float)SumX *H_OBJ)/(H_PIX*1600);//距离=d_x*(25.4/1600)*n   其中成像倍率n=像高:物高=8毫米:物长
  sum_y=(25.4*(float)SumY *H_OBJ)/(H_PIX*1600);
  if((move&0x10)!=1)   //若没有溢出
	{
		if(move&0x80)      //若有数据可以读出来
		{
			Data_Filter(sum_x,sum_y);//滑动滤波
			printf("%d,%d\n",sum_filter_x,sum_filter_y);   //x,y
		}
	}
	else
	{
		x=0;
		y=0;
	}
x=0;
y=0;
	
	//Spi_Change_To_nRF24L01_();
	
}
Beispiel #2
0
/*********************************************************************
** @fn     : 
**
** @brief  : 
**
** @param  :
**
** @return :
*********************************************************************/
static u16_t Task_Heart(u8_t ucTaskID,u16_t usEvent)
{
    u8_t ucStartAddr = 0;
    u8_t aucTempBuff[TEMP_BUFF_SIZE];
    u8_t ucLen;
    u8_t flag = 0;
    switch(usEvent)
    {
        case EVENT_LOCALDATA:
            Read_Buff(BUFF_LOCAL,aucTempBuff,&ucLen);
            flag = Data_Filter(aucTempBuff,ucLen);
            break;
        case EVENT_NWKDATA:
            SET_TASK_EVENT(g_ucTaskGPRSID,EVENT_REV_DATA)
            break;
        default:
            break;
    }
    switch(flag)
    {
        case DATA_GPS_REQUEST:
            SET_TASK_EVENT(g_ucTaskGPSID,EVENT_GPS_ACTIVE);
            break;
        case DATA_GPRS_CFG:
            SET_TASK_EVENT(g_ucTaskGPRSID,EVENT_GPRS_CFG);
            break;
        case DATA_Frame_DESCRIBLE:
            break;
        case DATA_NET_FRAME:
            break;
        default:
            break;
    }
    if(GPRS_NWK_TCP == g_gprsCB.ucNWKStatus)
    {
        SET_TASK_EVENT(g_ucTaskGPRSID,EVENT_PANG);
    }
}