/**@brief Signals alert event from Immediate Alert or Link Loss services.
 *
 * @param[in]   alert_level  Requested alert level.
 */
static void alert_signal(uint8_t alert_level)
{
    switch (alert_level)
    {
        case BLE_CHAR_ALERT_LEVEL_NO_ALERT:
            m_is_link_loss_alerting = false;
            alert_led_blink_stop();
				     #if OLED096_Func 
					       	OLED_ShowString(48,16, (uint8_t*)"   ");
	               OLED_Refresh_Gram();
					       #endif	
            break;

        case BLE_CHAR_ALERT_LEVEL_MILD_ALERT:
            alert_led_blink_start();
            break;

        case BLE_CHAR_ALERT_LEVEL_HIGH_ALERT:
            alert_led_blink_stop();
            nrf_gpio_pin_set(ALERT_PIN_NO);
				    #if OLED096_Func 
					       	OLED_ShowString(48,16, (uint8_t*)"ALT");
	               OLED_Refresh_Gram();
					       #endif	
            break;
            
        default:
            break;
    }
}
Example #2
0
/**
  * @brief  Clear whole screen

	  @retval None
  */
void OLED_Clear(void)
{
	unsigned char  i, n;
	for (i = 0; i < 8; i++)for (n = 0; n < 128; n++)OLED_GRAM[n][i] = 0X00;
#if OLED_REFRESH_OPTIMIZE_EN
	if (UpdateOLEDJustNow)
		OLED_Refresh_Gram();//Upload GRAM to screen
#else
	OLED_Refresh_Gram();
#endif
}
Example #3
0
//全屏点亮
void OLED_Bright(void)  
{  
	u8 i,n;  
	for(i=0;i<8;i++)
	    for(n=0;n<128;n++)
	        OLED_GRAM[n][i]=0XFF;  
	OLED_Refresh_Gram();//更新显示
}
Example #4
0
//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
void OLED_Clear(void)
{
	u8 i,n;
	for(i=0;i<8;i++)
		for(n=0;n<128;n++)
			OLED_GRAM[n][i]=0X00;
	OLED_Refresh_Gram();//更新显示
}
Example #5
0
void oled_cmps_mode()
{
	uint8_t x, y;
	y = 15;
	for(x=23; x<40; ++x)	OLED_DrawPoint(x, y, 1);
	x = 31;
	for(y=8; y<24; ++y)		OLED_DrawPoint(x, y, 1);
	OLED_Refresh_Gram();
}
Example #6
0
//x1,y1,x2,y2
//x1<=x2;y1<=y2 0<=x1<=63 0<=y1<=31	 	 
//dot:0,clear;1,fill	  
void OLED_Fill(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint8_t dot)  
{  
	uint8_t x,y;  
	for(x=x1;x<=x2;x++)
	{
		for(y=y1;y<=y2;y++)OLED_DrawPoint(x,y,dot);
	}													    
	OLED_Refresh_Gram();
}
Example #7
0
//x1,y1,x2,y2 填充区域的对角坐标
//确保x1<=x2;y1<=y2 0<=x1<=127 0<=y1<=63	 	 
//dot:0,清空;1,填充	  
void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot)  
{  
	u8 x,y;  
	for(x=x1;x<=x2;x++)
	{
		for(y=y1;y<=y2;y++)OLED_DrawPoint(x,y,dot);
	}													    
	OLED_Refresh_Gram();//更新显示
}
Example #8
0
void OLED_Init(void)
{
	Init_IC();
	OLED_Clear();
// 	All_Screen();
// 	OLED_ShowNum(0, 0, 2567890134, 10, 16);
// 	update_battery(30);
	OLED_Refresh_Gram();
// 	oled_display(image2);
}
Example #9
0
void oled_update_temp()
{
	#define OFFSET1	16
	short temp = get_temperature();
	
	OLED_ShowNum(OFFSET1, 0, temp/10, 2, 32);
	OLED_ShowChar(OFFSET1+8*2, 0, '.', 32, 1);
	OLED_ShowNum(OFFSET1+8*3, 0, temp%10, 1, 32);
	
	OLED_Refresh_Gram();
}
Example #10
0
void OLED_Equalizer_128(u8 *data)
{
	int x,y;
	for (x=0;x<128;x++)
	{
		//printf("0x%x\n\r", data[x]);
		for (y=0;y<=data[x];y++)
			OLED_DrawPoint(128-x,y,1);
	}
	OLED_Refresh_Gram();
}
Example #11
0
int main()
{
    Xil_Out32(OLED_BASE_ADDR,0xff);
    OLED_Init();
    OLED_ShowString(0,3, "LHC OLED TEST");

    OLED_Refresh_Gram();

    while(1);

    return 0;
}
//////////////////////////////////////////////////////////////////////////
//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!	  
void OLED_Clear(void)  
{  
	uint8_t i,n;  
	for(i=0;i<8;i++)
   {	
	for(n=0;n<128;n++)
	{
	OLED_GRAM[n][i]=0X00;  //  
	} 	
   }	
	OLED_Refresh_Gram();//更新显示
}
Example #13
0
void OLED_DisFormat_For_NRFandAGV(void)
{
	OLED_ShowString(0, 0, "AGV Sta:");
	
	OLED_ShowString(0, 16, "L:");
	OLED_ShowString(47, 16, "EN:");
	OLED_ShowString(87, 16, "FR:");
	
 	OLED_ShowString(0, 32, "R:");
	OLED_ShowString(47, 32, "EN:");
	OLED_ShowString(87, 32, "FR:");
	
 	//OLED_ShowString(0, 32, "***************"); 
 	OLED_ShowString(0, 48, "NRF:");
	OLED_Refresh_Gram();
}
Example #14
0
void oled_update_cmps(ak8963_cmps *cmp)
{
// 	#define OFFSET	16
// 	if(cmp->Angle < 0)
// 	{
// 		OLED_ShowChar(OFFSET, 0, '-', 32, 1);
// 		OLED_ShowNum(OFFSET+8, 0, -(cmp->Angle), 3, 32);
// 	}
// 	else
// 	{
// 		OLED_ShowChar(OFFSET, 0, ' ', 32, 1);
// 		OLED_ShowNum(OFFSET+8, 0, (cmp->Angle), 3, 32);
// 	}
// 	OLED_Clear();
	oled_drawline(cmp->Angle-90);
	OLED_Refresh_Gram();
}
Example #15
0
void oled_update_step_count(void)
{
	static bool flag = false;
	OLED_Clear();
	if(flag)
	{	
		OLED_ShowImg(0, 0, PEDO_IMAGE_1, 1);
		flag = false;
	}
	else
	{
		OLED_ShowImg(0, 0, PEDO_IMAGE_2, 1);
		flag = true;
	}
	OLED_ShowNum(7, 0, get_the_step_count(), 6, 32);
	OLED_Refresh_Gram();
}
Example #16
0
void oled_default_mode()
{
	#define OFFSET	0
	static bool flag = false;
	calendar temp_time = get_standard_time();
	
	OLED_ShowNum(OFFSET, 0, temp_time.hour, 2, 32);
	if(temp_time.hour < 10) 	OLED_ShowNum(OFFSET, 0, 0, 1, 32);
	OLED_ShowChar(OFFSET+8*2, 0, ':', 32, 1);
	OLED_ShowNum(OFFSET+8*3, 0, temp_time.minute, 2, 32);
	if(temp_time.minute < 10) 	OLED_ShowNum(OFFSET+8*3, 0, 0, 1, 32);
	OLED_ShowChar(OFFSET+8*5, 0, ':', 32, 1);
	OLED_ShowNum(OFFSET+8*6, 0, temp_time.second, 2, 32);
	if(temp_time.second < 10) 	OLED_ShowNum(OFFSET+8*6, 0, 0, 1, 32);
	
	
	if(get_time_mode() == MINUTE_MODE)
	{
		if(flag)
		{
			OLED_ShowChar(OFFSET+8*5, 0, ' ', 32, 1);
			flag = false;
		}
		else
		{			
			OLED_ShowChar(OFFSET+8*5, 0, ':', 32, 1);
			flag = true;
		}
	}
	if(get_time_mode() == HOUR_MODE)
	{
		if(flag)
		{
			OLED_ShowChar(OFFSET+8*2, 0, ' ', 32, 1);
			flag = false;
		}
		else
		{
			OLED_ShowChar(OFFSET+8*2, 0, ':', 32, 1);			
			flag = true;
		}
	}
	
	OLED_Refresh_Gram();
}
Example #17
0
void oled_test(void)
{
   //Reset_IC();                    
	Init_IC();                      
	Clear_Screen();
	All_Screen();					 
	

	OLED_Clear();
	OLED_ShowNum(0, 0, 2567890134, 10, 12);
	OLED_ShowString(0, 12, "abcdefghijk");
	
	while(1)
	{       
		OLED_Refresh_Gram();
		nrf_delay_ms(1500);
		Clear_Screen();
	}
}
void receive_handle( uint8_t* data)
{
	uint8_t i = 0;
	uint8_t re_data[20];
	uint8_t command = data[0];
	uint8_t data_len = data[1]&GET_DATA_LEN;
	uint8_t last_byte = data[data_len+2];
	if(last_byte ==0x55)  //表示全部字节接收完成,否则丢弃
	{
		for(i=0;i<data_len;i++)
			re_data[i] = data[i+2];
		
		if(command==SET_DEVICE_TIME)
		{ 
			timer.w_year = re_data[0]<<8 | re_data[1];
			timer.w_month = re_data[2];
			timer.w_date = re_data[3];
			timer.hour = re_data[4];
			timer.min = re_data[5];
			timer.sec = re_data[6];
			
			OLED_ShowNum(0,32,(uint32_t)timer.w_year,4,16);
			OLED_ShowNum(40,32,(uint32_t)timer.w_month,2,16);
			OLED_ShowNum(64,32,(uint32_t)timer.w_date,2,16);
			OLED_ShowNum(88,32,(uint32_t)timer.hour,2,16);
			OLED_ShowNum(112,32,(uint32_t)timer.min,2,16);
			OLED_Refresh_Gram();

		}
		if(command==BOND_COMMAND)
		{
			for(i=0;i<data_len;i++)
			{
				user_profile.boundphone[i] = re_data[i];	
			}
			user_profile.boundphone[PHONE_LEN -1] = 0 ;
			printf("boundphone:%s\r\n",(char*)user_profile.boundphone);		
			
		}
	}
}
Example #19
0
void oled_show(void)
{
		OLED_Display_On();  //显示屏打开
		//=============显示滤波器=======================//	
		                      OLED_ShowString(00,0,"WAY-");
		                      OLED_ShowNumber(30,0, Way_Angle,1,12);
	       if(Way_Angle==1)	OLED_ShowString(45,0,"DMP");
		else if(Way_Angle==2)	OLED_ShowString(45,0,"Kalman");
		else if(Way_Angle==3)	OLED_ShowString(45,0,"Hubu");
		//=============显示温度=======================//	
		                      OLED_ShowString(00,10,"Wendu");
		                      OLED_ShowNumber(45,10,Temperature/10,2,12);
		                      OLED_ShowNumber(68,10,Temperature%10,1,12);
		                      OLED_ShowString(58,10,".");
		                      OLED_ShowString(80,10,"`C");
		//=============显示编码器1=======================//	
		                      OLED_ShowString(00,20,"Enco1");
		if( Encoder_Left<0)		OLED_ShowString(45,20,"-"),
		                      OLED_ShowNumber(65,20,-Encoder_Left,5,12);
		else                 	OLED_ShowString(45,20,"+"),
		                      OLED_ShowNumber(65,20, Encoder_Left,5,12);
  	//=============显示编码器2=======================//		
		                      OLED_ShowString(00,30,"Enco2");
		if(Encoder_Right<0)		OLED_ShowString(45,30,"-"),
		                      OLED_ShowNumber(65,30,-Encoder_Right,5,12);
		else               		OLED_ShowString(45,30,"+"),
		                      OLED_ShowNumber(65,30,Encoder_Right,5,12);	
		//=============显示电压=======================//
		                      OLED_ShowString(00,40,"Volta");
		                      OLED_ShowString(58,40,".");
		                      OLED_ShowString(80,40,"V");
		                      OLED_ShowNumber(45,40,Voltage/100,2,12);
		                      OLED_ShowNumber(68,40,Voltage%100,2,12);
		 if(Voltage%100<10) 	OLED_ShowNumber(62,40,0,2,12);
		//=============显示角度=======================//
		                      OLED_ShowString(0,50,"Angle");
		if(Angle_Balance<0)		OLED_ShowNumber(45,50,Angle_Balance+360,3,12);
		else					        OLED_ShowNumber(45,50,Angle_Balance,3,12);
		//=============刷新=======================//
		OLED_Refresh_Gram();	
	}
Example #20
0
/**
  * @brief  Show small dialogue

  * @param  string: Passage

			time:   Time of the dialoue that lasts

			occupyThread:Will ShowSmallDialogue() occupies thread
until time is up
  */
void ShowSmallDialogue(const char string[], u16 time, bool occupyThread)
{
	u8 startAddr, endAddr;
	u8 stringLength;
	stringLength = GetStringGraphicalLength(string);
	startAddr = 63 - stringLength * 4;
	endAddr = startAddr + stringLength * 8;
	xSemaphoreTake(OLEDRelatedMutex, portMAX_DELAY);
	OLED_Clear();
	OLED_DrawRect(startAddr - 4, 20, endAddr + 4, 44, DRAW);
	OLED_ShowAnyString(startAddr, 24, string, NotOnSelect, 16);
	OLED_Refresh_Gram();
	if (occupyThread)
	{
		vTaskDelay(time / portTICK_RATE_MS);
	}
	xSemaphoreGive(OLEDRelatedMutex);
	if (occupyThread)
	{
		xSemaphoreTake(OLEDRelatedMutex, portMAX_DELAY);
		OLED_Clear();
		xSemaphoreGive(OLEDRelatedMutex);
	}
}
Example #21
0
void UI_ListView_Handler(void *pvParameters)
{
	ListView_Param_Struct* listView_Params = pvParameters;
	Key_Message_Struct key_Message;
	u16 pos[5];
	char tempString[29];
	int currentPos;
	int currentRelativePos;
	u16 itemStringLengths[4];
	u16 lastSelected = listView_Params->DefaultPos;
	u16 lengthTemp;
	u16 posTemp;
	u16 i, p, m;
	u8 displayLineNumInSinglePage = listView_Params->ListLength > 5 ? 5 : listView_Params->ListLength;
	//	u16* dataNumPointer;
	float * dataPointers[4];
	bool updateNumTab = true;
	bool firstDraw = true;
	bool currentPosChanged = false;
	xSemaphoreTake(OLEDRelatedMutex, portMAX_DELAY);
	OLED_Clear();
	OLED_DrawRect(0, 0, 127, 23 + 10 * (displayLineNumInSinglePage - 1), DRAW);
	OLED_DrawHorizonalLine(13, 0, 127, 1);
	xSemaphoreGive(OLEDRelatedMutex);
	SetKeyBeatRate(listView_Params->FastSpeed);
	/*Get the lengths of the itemNames*/
	for (i = 0; i < listView_Params->ItemNum; i++)
	{
		itemStringLengths[i] = GetStringGraphicalLength(listView_Params->ItemNames[i]);
	}
	pos[0] = listView_Params->ItemPositions[0];
	/*Make the positions of the itemStrings centural between two grids*/
	for (i = 0; i < listView_Params->ItemNum; i++)
	{
		pos[i] = GetCentralPosition(listView_Params->ItemPositions[i],
			listView_Params->ItemPositions[i + 1], itemStringLengths[i]) - 1;
	}
	for (i = 0; i < listView_Params->ItemNum; i++)
	{
		OLED_ShowAnyString(pos[i], 1, listView_Params->ItemNames[i], NotOnSelect, 12);
	}
	/*Draw vertical grids*/
	for (i = 0; i < listView_Params->ItemNum; i++)
	{
		OLED_DrawVerticalLine(listView_Params->ItemPositions[i] - 2, 0, 23 + 10 * (displayLineNumInSinglePage - 1), 1);
	}
	/*Draw horizonal grids*/
	for (i = 0; i < displayLineNumInSinglePage; i++)
	{
		OLED_DrawHorizonalLine(23 + 10 * i, 0, 127, 1);
	}
	if (listView_Params->Item1AutoNum == true)
	{
		for (i = 0; i < listView_Params->ItemNum - 1; i++)
		{
			dataPointers[i + 1] = listView_Params->DataPointers[i];
		}
		//		dataNumPointer = listView_Params->DataAutoNumPointer;
		//		for (i = 0; i < listView_Params->ListLength; i++)
		//		{
		//			dataNumPointer[i] = listView_Params->Item1AutoNumStart + i*listView_Params->Item1AutoNumStep;
		//		}
	}
	else
	{
		for (i = 0; i < listView_Params->ItemNum; i++)
		{
			dataPointers[i] = listView_Params->DataPointers[i];
		}
	}
	currentPos = listView_Params->DefaultPos;
	currentRelativePos = 0;
	ClearKeyEvent();
	for (;;)
	{
		xSemaphoreTake(OLEDRelatedMutex, portMAX_DELAY);
		if (listView_Params->Item1AutoNum == true) p = 1;
		else p = 0;
		for (i = 0; i < listView_Params->ItemNum - p; i++)
		{
			for (m = 0; m < displayLineNumInSinglePage; m++)
			{
				sprintf(tempString, listView_Params->sprintfCommandStrings[i], dataPointers[i + p][currentPos + m]);
				lengthTemp = GetStringGraphicalLength(tempString);
				posTemp = GetCentralPosition(listView_Params->ItemPositions[i + p],
					listView_Params->ItemPositions[i + p + 1], lengthTemp);
				OLED_ShowAnyString(posTemp - 1, 15 + 10 * m, tempString, NotOnSelect, 8);
			}
		}

		if (listView_Params->Item1AutoNum == true)
		{
			if (currentPosChanged == true)
			{
				currentPosChanged = false;
				for (i = 0; i < displayLineNumInSinglePage; i++)
					OLED_FillRect(listView_Params->ItemPositions[0], 15 + 10 * i,
						listView_Params->ItemPositions[1] - 4, 22 + 10 * i, 0);
				firstDraw = true;
				updateNumTab = true;
			}
			for (i = 0; i < displayLineNumInSinglePage; i++)
			{
				sprintf(tempString, "%d", listView_Params->Item1AutoNumStart + (currentPos + i)*listView_Params->Item1AutoNumStep);
				lengthTemp = GetStringGraphicalLength(tempString);
				posTemp = GetCentralPosition(listView_Params->ItemPositions[0],
					listView_Params->ItemPositions[1], lengthTemp);
				if (currentRelativePos != i&&lastSelected != i)
					OLED_ShowAnyString(posTemp - 1, 15 + 10 * i, tempString, NotOnSelect, 8);
				if (currentRelativePos == i&&updateNumTab == true)
				{
					if (firstDraw == false)
						OLED_InvertRect(listView_Params->ItemPositions[0], 15 + 10 * lastSelected,
							listView_Params->ItemPositions[1] - 4, 22 + 10 * lastSelected);
					else firstDraw = false;
					OLED_ShowAnyString(posTemp - 1, 15 + 10 * i, tempString, NotOnSelect, 8);
					OLED_InvertRect(listView_Params->ItemPositions[0], 15 + 10 * i,
						listView_Params->ItemPositions[1] - 4, 22 + 10 * i);
					lastSelected = currentRelativePos;
					updateNumTab = false;
				}
			}
		}
		OLED_Refresh_Gram();
		xSemaphoreGive(OLEDRelatedMutex);
		xQueueReceive(Key_Message, &key_Message, portMAX_DELAY);
		if (key_Message.KeyEvent == RightClick || key_Message.AdvancedKeyEvent == RightContinous)
		{
			currentRelativePos++;
			updateNumTab = true;
			if (currentRelativePos >= displayLineNumInSinglePage)
			{
				currentPosChanged = true;
				currentPos++;
				if (currentPos + displayLineNumInSinglePage > listView_Params->ListLength)
				{
					currentPos = listView_Params->ListLength - displayLineNumInSinglePage;
					currentPosChanged = false;
					updateNumTab = false;
				}
				currentRelativePos = displayLineNumInSinglePage - 1;
			}
		}
		else if (key_Message.KeyEvent == LeftClick || key_Message.AdvancedKeyEvent == LeftContinous)
		{
			currentRelativePos--;
			updateNumTab = true;
			if (currentRelativePos < 0)
			{
				currentPosChanged = true;
				currentPos--;
				if (currentPos < 0)
				{
					currentPos = 0;
					currentPosChanged = false;
					updateNumTab = false;
				}
				currentRelativePos = 0;
			}
		}
		else if (key_Message.KeyEvent == MidDouble)
		{
			currentPos = 32767;
			xQueueSend(UI_ListViewMsg, &currentPos, portMAX_DELAY);
			for(;;) vTaskDelay(portMAX_DELAY);
		}
		else if (key_Message.KeyEvent == MidClick)
		{
			xQueueSend(UI_ListViewMsg, &currentPos, portMAX_DELAY);
			for(;;) vTaskDelay(portMAX_DELAY);
		}
	}
}
Example #22
0
void My_Change_To_TX_Mode_Fast(void)
{
	NRF24L01OptsPtr->TxMode_Fast();
	OLED_ShowString(0,48,"NRF:         ");
	OLED_Refresh_Gram();
}
u16 APP_ProcessEvent( u8 task_id, u16 events )
{
	loraMAC_msg_t* pMsgSend = NULL;
  loraMAC_msg_t* pMsgRecieve = NULL;

        u8 tmp_buf[64];
        u8 len = 0 ;

        //system event
        if(events & SYS_EVENT_MSG)
        {
					//receive msg loop
					while(NULL != (pMsgRecieve = (loraMAC_msg_t*)osal_msg_receive(APP_taskID)))
					{
							//pMsgRecieve[0] is system event type
							switch(pMsgRecieve->msgID)
							{
							//tx done
							case TXDONE :
									//调度下一次发送
									//RedLED(ON);
									HalLedSet (HAL_LED_1, HAL_LED_MODE_ON);
									if(Txpacket_count > 0)
									{
										Txpacket_count--;
										HAL_UART_SendBytes(uart1_rxBuf,uart1_Rxcount);
										pMsgSend = (loraMAC_msg_t*)osal_msg_allocate(72);
										if(pMsgSend != NULL)
										{
											osal_memset(pMsgSend,0,72);//需要全部置0,要不然会出现发完串口数据包后不再进入TXDONE
											pMsgSend->msgID = TXREQUEST;
											pMsgSend->msgLen = uart1_Rxcount+2;
											osal_memcpy(pMsgSend->msgData,uart1_rxBuf,uart1_Rxcount);
											osal_msg_send(LoraMAC_taskID,(u8*)pMsgSend);
											osal_msg_deallocate((u8*)pMsgSend);
										}
									}
									else
									{
										//send a packet to LoRaMac osal (then can be send by the radio)
										pMsgSend = (loraMAC_msg_t*)osal_msg_allocate(72);
										if(pMsgSend != NULL)
										{
											osal_memset(pMsgSend,0,72);
											pMsgSend->msgID = TXREQUEST;
											pMsgSend->msgLen = 70;
											for(u8 dataCount = 0; dataCount < 70; dataCount++)
											{
												pMsgSend->msgData[dataCount] = dataCount;
											}
											osal_msg_send(LoraMAC_taskID,(u8*)pMsgSend);
											osal_msg_deallocate((u8*)pMsgSend);

											HAL_UART_SendBytes("app send\n", osal_strlen("app send\n"));
										}
									}
        							//RedLED(OFF);
        							HalLedSet (HAL_LED_1, HAL_LED_MODE_OFF);
        							break;
        					//rx done
        					case RXDONE:
                          
                                HalLedSet (HAL_LED_2, HAL_LED_MODE_ON);
                                OLED_Clear_Half();//先把屏幕下一半清空
                                APP_ShowMoteID(g_appData.devAddr);
                                len = 0 ;
                                g_number++ ;
                                memset(Rx_buf , 0 ,sizeof(Rx_buf));                               
                                osal_memcpy(Rx_buf,pMsgRecieve->msgData,pMsgRecieve->msgLen);
				    len = pMsgRecieve->msgLen;
				    Rx_buf[len] = 0;
                                OLED_ShowString( 0,36, (u8*)Rx_buf,12 );
                                OLED_Refresh_Gram();
                                HAL_UART_SendBytes("\n",1);
                                HAL_UART_SendBytes((uint8_t *)Rx_buf,strlen(Rx_buf));
				     HalLedSet (HAL_LED_2, HAL_LED_MODE_OFF);

                                break;

                             case TXERR_STATUS:
                             {
                                //TODO MOTE send packet error deal
                                memset( tmp_buf ,0 ,sizeof(tmp_buf) );
                                sprintf( (char *)tmp_buf,"send err ret=%d,no=%d",pMsgRecieve->msgData[0],
                                                                                 pMsgRecieve->msgData[1]+( pMsgRecieve->msgData[2]<<8 ) );
                                OLED_ShowString( 0,36,tmp_buf,12 );
                                OLED_Refresh_Gram();
                                break;
                             }


                    default:
					    break;
		  	}

			osal_msg_deallocate((u8*)pMsgRecieve);
		}

		return (events ^ SYS_EVENT_MSG);

	}

	//send a packet event
	if(events & APP_PERIOD_SEND)
	{
		//RedLED(OFF);
		 HalLedSet (HAL_LED_1, HAL_LED_MODE_OFF);
		//send a packet to LoRaMac osal (then can be send by the radio)
		pMsgSend = (loraMAC_msg_t*)osal_msg_allocate(72);
		if(pMsgSend != NULL)
		{
			osal_memset(pMsgSend,0,72);
			pMsgSend->msgID = TXREQUEST;
			pMsgSend->msgLen = 70;
			for(u8 dataCount = 0; dataCount < 70; dataCount++)
			{
				pMsgSend->msgData[dataCount] = dataCount;
			}
				osal_msg_send(LoraMAC_taskID,(u8*)pMsgSend);
		}

	  //osal_start_timerEx(APP_taskID, APP_PERIOD_SEND,1000);//延时继续发送

		return (events ^ APP_PERIOD_SEND);
	}

	//uart test event
	if(events & APP_TEST_UART)
	{

		 Txpacket_count = 1;//串口收到一个数据包,就发一遍无线包出去add by hxz
		//HAL_UART_SendBytes("hello,world!", 10);
		//osal_start_timerEx(APP_taskID, APP_TEST_UART,1000);//延时继续发送
		return (events ^ APP_TEST_UART);
	}

	return 0 ;
}
// 以下1-9每100毫秒执行一次
static void Pollint100mSec(void)
{
    switch(r_pollint._10msCount)
    {
		case 0:
			Pollint1Sec();
			break;
        case 1:
			
            break;
		case 2:
            if ((r_pollint._500msCount++) >= 5)
            {
                r_pollint._500msCount = 0;
				if (1 == systemState.lowBatteryFlag)
				{
					static uint8_t bmpFlash = 0;
					if (bmpFlash)
					{
						bmpFlash = 0;
						OLED_showBatteryBmp(0, 88, 8);
					}
					else
					{						
						bmpFlash = 1;
						OLED_showBatteryBmp(0, 88, 6);
					}
				}
                OLED_Refresh_Gram();//更新显示
            }
			break;
        case 3:
			//OLED_Refresh_Gram();//更新显示
            break;
        case 4:
			if (3 == systemState.keyUpFlag)
			{
				if (systemState.delayCnt-- == 0)
				{
					systemState.keyUpFlag = 0;
					{							
						// 关闭广播
						uint8_t initialAdvertEnable = FALSE;
						GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initialAdvertEnable);
					}
					Util_stopClock(&periodicClock_10ms);
				}
					
			}
            break;
        case 5:
			
            break;
        case 6:
            break;
        case 7:
            break;
        case 8:
            break;
        default:
            break;
    }
}
Example #25
0
int main(void)
{
	u8 len=0;
	u8 temp[100];
	u8 t=0;
	u8 flag=0;
	char mode='O';
	long value=0;
	u8 counter=0;
	//char val2str[]="50";
	char SelfCheck='O';
	int D_val=0;
	u8 SelfCheckCounter=0;
	/////////////////////以上变量定义///////////////////////////
	
	delay_init(72);
	USART1_Init(19200);//与地面站传递命令
	USART2_Init(115200);//与X86板子传递命令
	USART3_Init(115200);//调试用
	HCSR04_Init();
	ResetOLED();
	OLED_Init();
	Key_Init();
	///////////////以上初始化///////////////////////
	OLED_ShowString(35,20,"READY",24);
	OLED_Refresh_Gram();
	delay_ms(1000);
	OLED_Clear();
	/////////////////////////////欢迎界面,提示准备工作/////////////////////////////////
	while(KEY==1)
	{
		OLED_ShowString(0,0,"Self checking now...",12);
		OLED_Refresh_Gram();
		if(USART_RX2_STA&0x8000)
		{					   
			len=USART_RX2_STA&0x3fff;//得到此次接收到的数据长度
			for(t=0;t<len;t++)
			{
				temp[t]=Rx2Buf[t];
				while((USART2->SR&0X40)==0);//等待发送结束
			}
			flag=1;
			USART_RX2_STA=0;
		}//接受来自X86的命令,用于自检。
		
		if(flag==1)
		{
			SelfCheck=TempOrPressure(temp);
				{
					if(SelfCheck=='C')
					{
						value=ValueOfMea(temp);
						if(value==1)
						{
							OLED_ShowString(0,15,"Environment ok",12);
							SelfCheckCounter++;
						}
						if(value==2)
						{
							OLED_ShowString(0,30,"The data chain ok",12);
						}
						if(value==0)
						{
							OLED_ShowString(0,42,"Checking fail...",12);
						}
					}
				}
			memset(temp,0,sizeof(u8)*100);
			flag=0;
		}//先对开发环境进行自检,在VS下下发ok标志即可。
		OLED_Refresh_Gram();
		
		if(SelfCheckCounter==1)//如果已经通过了开发环境自检
		{
			while(KEY==1)//不按强制退出就一直自检,直到成功
			{
				if(DataChain_SelfTest()==1)//数据链自检完成
					break;
				else
					continue;
			}
			SelfCheckCounter=0;
			break;//在不按按键强制退出的情况下,只有自检成功了才能退出。
		}
	}
	OLED_Clear();
	/////////////////////////以上对上位机的自检,按键强制结束//////////////////
	
	OLED_ShowString(0,0,"Parameters",16);
	OLED_ShowString(0,16,"X=",12);
	OLED_ShowString(0,28,"Y=",12);
  OLED_ShowString(0,40,"S=",12);
  OLED_ShowString(0,52,"D=",12);
	OLED_Refresh_Gram();
	flag=0;//复位flag
	///////////显示参数////////////////////////////////
	//AutoLaunch();
	////////////////////////以上开始起飞/////////////////////////////////

	while(1)
	{
		if(USART_RX2_STA&0x8000)
		{					   
			len=USART_RX2_STA&0x3fff;//得到此次接收到的数据长度
			for(t=0;t<len;t++)
			{
				temp[t]=Rx2Buf[t];
				while((USART2->SR&0X40)==0);//等待发送结束
			}
			flag=1;
			USART_RX2_STA=0;
			//printf3("%s\r\n",temp);
		}//接受来自X86的命令
		
		
		if(flag==1)
		{
			mode=TempOrPressure(temp);
			if(mode=='S')
			{
				value=ValueOfMea(temp);
					{
						#ifdef __TRANSPARENT_MODE
							printf1("\"S\":\"%ld\"\r\n",value);
						#endif
						
						#ifdef __COMMAND_MODE
							E17_SendMsg(CMD_S_PARAM,value);
						#endif						
					}
				OLED_ShowNum(20,40,value,6,12);
//				counter++;
			}  
			
			if(mode=='X')
			{
				value=ValueOfMea(temp);
					{
						#ifdef __TRANSPARENT_MODE
							printf1("\"X\":\"%ld\"\r\n",value);
						#endif
						#ifdef __COMMAND_MODE
							E17_SendMsg(CMD_X_PARAM,value);
						#endif	
					}
				OLED_ShowNum(20,16,value,6,12);
//				counter++;
			}
			else if(mode=='Y')
			{
				value=ValueOfMea(temp);
					{
						#ifdef __TRANSPARENT_MODE
							printf1("\"Y\":\"%ld\"\r\n",value);
						#endif
						#ifdef __COMMAND_MODE
							E17_SendMsg(CMD_Y_PARAM,value);
						#endif	
					}
				OLED_ShowNum(20,28,value,6,12);
//				counter++;
			}
			{
				  delay_ms(10);//太小在透传情况下可能出问题?
					{
						D_val=HCSR04_GetDistance_Filter();
						#ifdef __TRANSPARENT_MODE
							printf1("\"D\":\"%ld\"\r\n",D_val);
						#endif
						
						#ifdef __COMMAND_MODE
							E17_SendMsg(CMD_D_PARAM,value);			
						#endif	
					}
				OLED_ShowNum(20,52,D_val,6,12);
//				counter=0;
			}//去掉了判断,每个周期都要做判断,同时进行距离的pid调控。
			OLED_Refresh_Gram();
			memset(temp,0,sizeof(u8)*100);
			flag=0;
		}
	}
}
Example #26
0
/**
  * @brief  Init hardware of RTC

  * @param  none

  * @retval None
  */
u8 RTC_Hardware_Init(void)
{
	u16 countDown = 1000;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

	PWR_BackupAccessCmd(ENABLE);

	//BKP_DeInit();

	if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)						//从指定的后备寄存器中读出数据,判断是否为第一次配置
	{
		BKP_DeInit();												//将外设BKP的全部寄存器重设为缺省值 	
		RCC_LSEConfig(RCC_LSE_ON);									//使能外部低速时钟 32.768KHz
		while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)			//检查指定的RCC标志位设置与否,等待低速晶振就绪
		{
			vTaskDelay(2 / portTICK_RATE_MS);
			countDown--;
			if (countDown == 0)
			{
				ShowDialogue("Hardware Error", "LSE crystal", "not ready!", false, true);
				OLED_Refresh_Gram();
				while (1);
			}
		}		RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);						//设置RTC时钟(RTCCLK),选择LSE作为RTC时钟    
		RCC_RTCCLKCmd(ENABLE);										//使能RTC时钟  
		RTC_WaitForSynchro();										//等待RTC寄存器(RTC_CNT,RTC_ALR和RTC_PRL)与RTC APB时钟同步
		RTC_WaitForLastTask();										//等待最近一次对RTC寄存器的写操作完成
		RTC_ITConfig(RTC_IT_SEC, ENABLE);							//使能RTC秒中断
		RTC_WaitForLastTask();										//等待最近一次对RTC寄存器的写操作完成
		RTC_SetPrescaler(32767); 									//设置RTC预分频的值  RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)
		RTC_WaitForLastTask();										//等待最近一次对RTC寄存器的写操作完成
		Time_Set();													//时间设置	
		BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);					//向指定的后备寄存器中写入用户程序数据0X5555做判断标志										
	}
	else															//不是第一次配置 继续计时
	{
		if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)			//检查指定的RCC标志位设置与否:POR/PDR复位
		{
			;
		}
		else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)		//检查指定的RCC标志位设置与否:管脚复位
		{
			;
		}
		RCC_ClearFlag();

		//		NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);		//先占优先级1位,从优先级3位

		//		NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;		//RTC全局中断
		//		NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;	//先占优先级1位,从优先级3位
		//		NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;	//先占优先级0位,从优先级4位
		//		NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;		//使能该通道中断
		//		NVIC_Init(&NVIC_InitStructure);		//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

		RTC_WaitForSynchro();										//等待最近一次对RTC寄存器的写操作完成

//		RTC_ITConfig(RTC_IT_SEC, ENABLE);							//使能RTC秒中断

		RTC_WaitForLastTask();										//等待最近一次对RTC寄存器的写操作完成
	}
	//Time_Get();														//更新时间 

	RCC_ClearFlag();												//清除RCC的复位标志位

	return 0; //ok		
}
Example #27
0
void oled_temp_mode()
{
	OLED_ShowImg(0, 0, TEMP_IMAGE, 1);
	OLED_Refresh_Gram();
}
Example #28
0
void joystickScan_View(void)
{
	uint16_t AdcValue;
	float Voltage;
	uint8_t key;
	static uint8_t ciri = 0, cirj = 0;
	
	key = (JoyStick_Scan(0));
	
	
	if(key)
	{
		ciri = 0;
		
		AdcValue = Get_Adc_Average(ADC1, ADC_Channel_0);	//读取摇杆的ADC值
		OLED_ShowxNum(32, 16, AdcValue, 3, 16, 0x03);		//显示ADC的值
		Voltage = (float)AdcValue * (3.3 / 4096);
		AdcValue = Voltage;
		OLED_ShowxNum(64, 16, AdcValue, 1, 16, 0x01);		//显示电压值
		Voltage -= AdcValue;
		Voltage *= 1000;
		OLED_ShowxNum(80, 16, Voltage, 3, 16, 0x81);
		
		switch(key)
		{
			case KEY_CENTER:
				OLED_ShowString(0, 32, "KEY_CENTER");
				break;
			case KEY_UP:
				OLED_ShowString(0, 32, "KEY_UP    ");
				break;
			case KEY_LEFT:
				OLED_ShowString(0, 32, "KEY_LEFT  ");
				break;
			case KEY_DOWN:
				OLED_ShowString(0, 32, "KEY_DOWN    ");
				break;
			case KEY_RIGHT:
				OLED_ShowString(0, 32, "KEY_RIGHT   ");
				break;
			case KEY_NONE:
				break;
				
			default:
				break;
		}
	}

	OLED_Refresh_Gram();
	delay_ms(10);
	ciri++;
	
	if(ciri > 25)
	{
		cirj++;
		
		if(!key && cirj > 4) 
		{
			cirj = 0;
			
			AdcValue = Get_Adc_Average(ADC1, ADC_Channel_0);	//读取摇杆的ADC值
			OLED_ShowxNum(32, 16, AdcValue, 3, 16, 0x03);		//显示ADC的值
			Voltage = (float)AdcValue * (3.3 / 4096);
			AdcValue = Voltage;
			OLED_ShowxNum(64, 16, AdcValue, 1, 16, 0x01);		//显示电压值
			Voltage -= AdcValue;
			Voltage *= 1000;
			OLED_ShowxNum(80, 16, Voltage, 3, 16, 0x81);
			OLED_ShowString(0, 32, "KEY_NONE     ");
		}
		
		ciri = 0;
	}
}
Example #29
0
int main(void)
{
    short real[N], image[N];
    float datacpx[N];
    int outLED[N];
    int i,j,window;
    int timeL;
    print("FFT start\n");

    Xil_Out32(OLED_BASE_ADDR,0xff);
	OLED_Init();
	OLED_ShowString(0,0, "Hello FFT!");
	OLED_Refresh_Gram();
	//srand(time(0));
	
	while(1){
		init_timer(timer_ctrl, timer_counter_l, timer_counter_h);
		start_timer(timer_ctrl);
		OLED_Clear();
		for (i = 0; i < N; i++) outLED[i] = 0;
		for(window = 0; window<WINDOW; ++window)
		{
			//Generate input data
			for (i = 0; i < N; i++)
			{
#ifdef FIX_POINT
				real[i] = ((rand()%128-64)/128.0f)*(1<<14);
				image[i] = 0;
#else
				//datacpx[2*i]=(cos(2 * M_PI * 4 * i / N));
				datacpx[2*i]=(rand()%128-64)/128.0f;
				datacpx[2*i+1] = 0;
#endif
			}
			timeL = *timer_counter_l;
			//FFT
#ifdef FIX_POINT
			fix_fft(real, image, POW_N);
#else
			fft(datacpx,N,1);
#endif
			printf("FFT: %d us\n",(*timer_counter_l - timeL)/333);

			timeL = *timer_counter_l;
			//Conj
			for (i = 0; i < N; i++)
			{
#ifdef FIX_POINT
				//printf("real[%d]= %d image[%d]= %d\n",i,real[i],i,image[i]);
				int conj_pdt_out =sqrt((real[i]*real[i]) + (image[i]*image[i]));
#else
				int conj_pdt_out =sqrt((datacpx[2*i]*datacpx[2*i]) + (datacpx[2*i+1]*datacpx[2*i+1]));
#endif
				//conj_pdt_out=conj_pdt_out/2;
				outLED[i]+=conj_pdt_out;
			}
			printf("Conj: %d us\n",(*timer_counter_l - timeL)/333);
		}
		timeL = *timer_counter_l;
		//Averaging
		for(i=0;i<N;++i)
		{
#ifdef FIX_POINT
			outLED[i]=outLED[i]>>10;
#else
			outLED[i]=outLED[i]/8;
#endif
		}
		printf("Averaging: %d us\n",(*timer_counter_l - timeL)/333);
		stop_timer(timer_ctrl);

		//Display
		for(i=0;i<N;++i)
		{
			//printf("real[%d]= %d image[%d]= %d\n",i,real[i],i,image[i]);
			for(j=0; j< outLED[i]; ++j)
				OLED_DrawPoint(i,63-j,1);
		}
		OLED_Refresh_Gram();
	}
    return 0;
}
/**@brief Application's BLE Stack event handler.
 *
 * @param[in]   p_ble_evt   Bluetooth stack event.
 */
void on_ble_evt(ble_evt_t * p_ble_evt)
{
    uint32_t        err_code      = NRF_SUCCESS;
    static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID;
    
    switch (p_ble_evt->header.evt_id)
    {
        case BLE_GAP_EVT_CONNECTED:
            adv_led_blink_stop();

            if (m_is_link_loss_alerting)
            {
                alert_led_blink_stop();
            }
            
            m_advertising_mode = BLE_NO_ADV;
            m_conn_handle      = p_ble_evt->evt.gap_evt.conn_handle;
            
            // Start handling button presses
            err_code = app_button_enable();  // enable the button
						#if OLED096_Func 
						OLED_ShowString(0,16, (uint8_t*)"BT:CON");
	           OLED_Refresh_Gram();
						
						#endif
						
            break;
            
        case BLE_GAP_EVT_DISCONNECTED:
            if (!m_is_link_loss_alerting)
            {
                alert_led_blink_stop();
            }

            m_conn_handle = BLE_CONN_HANDLE_INVALID;

            // Since we are not in a connection and have not started advertising, store bonds
            err_code = ble_bondmngr_bonded_masters_store();
            APP_ERROR_CHECK(err_code);

            advertising_start();
						#if OLED096_Func 
						OLED_ShowString(0,16, (uint8_t*)"BT:DIS");
	           OLED_Refresh_Gram();
						
						#endif
            break;
            
        case BLE_GAP_EVT_SEC_PARAMS_REQUEST:
            err_code = sd_ble_gap_sec_params_reply(m_conn_handle, 
                                                   BLE_GAP_SEC_STATUS_SUCCESS, 
                                                   &m_sec_params);
            break;

        case BLE_GAP_EVT_TIMEOUT:
            if (p_ble_evt->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT)
            { 
                if (m_advertising_mode == BLE_SLEEP)
                {
                    m_advertising_mode = BLE_NO_ADV;
                    adv_led_blink_stop();
                    alert_led_blink_stop();

									  GPIO_WAKEUP_BUTTON_CONFIG(SIGNAL_ALERT_BUTTON);
									  GPIO_WAKEUP_BUTTON_CONFIG(BONDMNGR_DELETE_BUTTON_PIN_NO);
									
                    // Go to system-off mode
                    // (this function will not return; wakeup will cause a reset)
								 #if 0	
                    err_code = sd_power_system_off();
                 #endif	
                 #if OLED096_Func 
					       	OLED_ShowString(0,16, (uint8_t*)"BT:Tout");
	               OLED_Refresh_Gram();
					       #endif									
                }
                else
                {
                    advertising_start();
                }
            }
            break;

        case BLE_GATTC_EVT_TIMEOUT:
        case BLE_GATTS_EVT_TIMEOUT:
            // Disconnect on GATT Server and Client timeout events.
            err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
            break;

        default:
            break;
    }

    APP_ERROR_CHECK(err_code);
}