| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742 | #include <rtthread.h>#include "rtc.h"#include "flash.h"#include "main.h"#include "ad.h"#include "plan.h"#include "button.h"#include "buffer.h"#include "display.h"#include "xBeeAppEscapingMode.h"rt_sem_t thread_beep_sem = RT_NULL;int WeightConst_JZ = 0;uint8_t WeightConst_JZ_ = 0;uint32_t WeightConst_JZZ = 0;    //校正称量的当前位uint8_t WeightConst_JZZ_ = 8;         //校正称量的当前位uint32_t WeightConst_ZD = 3000;  //最大称量值uint8_t WeightConst_ZD_ = 8;          //最大称量的当前位uint8_t CanButton=0;struct button_state_t button_state = {1,1,1,1,1,1,1};//static rt_uint8_t MenuItem__=0; //当前菜单值序号extern unsigned char  iscowweight;void sendshowCC(void){    XbeeConst_FRemoteTxBuf[0] = 7;    XbeeConst_FRemoteTxBuf[1] = 0x7E;    XbeeConst_FRemoteTxBuf[2] = 0x05;    XbeeConst_FRemoteTxBuf[3] = XbeeConst_RemoteAddress;    XbeeConst_FRemoteTxBuf[4] = 0xB2;    XbeeConst_FRemoteTxBuf[5] = XbeeConst_UseAPI;    XbeeConst_FRemoteTxBuf[6] = XbeeConst_FrameNum++;		HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR3, XbeeConst_FRemoteTxBuf[6]);    XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]] = 0;    for (int i = 1; i < XbeeConst_FRemoteTxBuf[0]; i++) {        XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]] =            XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]]+XbeeConst_FRemoteTxBuf[i];    }    XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]] = 0xFF - XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]];		rt_sem_take(uart2_lock, RT_WAITING_FOREVER);			    setSendFrame_t(0x01,0x01,0xC1);    XbeeConst_PTxBuf0 = xBeeApp2MakeFrame(&userSendFrame_t, XbeeConst_FRemoteTxBuf);			    for (int i = 1; i <= XbeeConst_PTxBuf0[0]; i++) //将缓冲区发出        usart2_send_data[i-1] = XbeeConst_PTxBuf0[i];				HAL_UART_Transmit_DMA(&huart2, usart2_send_data, XbeeConst_PTxBuf0[0]);		rt_sem_release(uart2_lock);}static void CheckMenuButton_entry(void *parameter) {	extern uint8_t isBLE;	while(1)	{		if (button_state.b1>0)	button_state.b1 ++;		if (button_state.b2>0)	button_state.b2 ++;		if (button_state.b3>0)	button_state.b3 ++;		if (button_state.b4>0)	button_state.b4 ++;		if (button_state.b5>0)	button_state.b5 ++;    if (button_state.b7>0)	button_state.b7 ++;				if (button_state.b1>=5)	button_state.b1 = 0;		if (button_state.b2>=5)	button_state.b2 = 0;		if (button_state.b3>=5)	button_state.b3 = 0;		if (button_state.b4>=5)	button_state.b4 = 0;		if (button_state.b5>=5)	button_state.b5 = 0;		if (button_state.b7>=15)	button_state.b7 = 0;//    if (HAL_GPIO_ReadPin(pwr_GPIO_Port, pwr_Pin) == 0) {//			rt_thread_mdelay(2000);//			if ((HAL_GPIO_ReadPin(pwr_GPIO_Port, pwr_Pin) == 0) ) {//				beep();//				pwr_lock_off();//			}//    }				//  if (WeightConst_TQ==14)  ad_sample=Ad_Sample1();//get_weight();		if (WeightConst_SBType<5)		{				if ((HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin) > 0) && button_state.b1 == 0)	{						beep();						if (MenuItem==0)						{								if (XbeeConst_DeviceAddress>1)  XbeeConst_DeviceAddress--; else  XbeeConst_DeviceAddress = 30;								write_Flash("CH", &XbeeConst_DeviceAddress, sizeof(XbeeConst_DeviceAddress));														  WeightConst_Weight_display[6] = XbeeConst_DeviceAddress + 0x30;						}						else if (MenuItem==1)						{								if (WeightConst_TQ>1)  WeightConst_TQ--;  else  WeightConst_TQ = 14;                    								write_Flash("TQ", &WeightConst_TQ, sizeof(WeightConst_TQ));						}						else if (MenuItem==2)						{								if (XbeeConst_NetAddress>0) XbeeConst_NetAddress--;  								else								{										if (WeightConst_SBType==4) XbeeConst_NetAddress=2; else XbeeConst_NetAddress=13;								}																		setNetAddress();								write_Flash("WL", &XbeeConst_NetAddress, sizeof(XbeeConst_NetAddress));						}						else if (MenuItem==3 && (WeightConst_SBType!=4&&WeightConst_SBType!=6))						{								if (WeightConst_SBType>1)  WeightConst_SBType--;  else WeightConst_SBType=2;                    								write_Flash("PM", &WeightConst_SBType, sizeof(WeightConst_SBType));						}						else if (MenuItem==4)						{								if (WeightConst_ChanCheShu>1) WeightConst_ChanCheShu--;  else WeightConst_ChanCheShu=30;								write_Flash("CC", &WeightConst_ChanCheShu, sizeof(WeightConst_ChanCheShu));						}						else if (MenuItem==5)						{								if (XbeeConst_UseAPI>0) XbeeConst_UseAPI--; else {XbeeConst_UseAPI=3; if(isBLE>0) XbeeConst_UseAPI=5;}								setAPI();								write_Flash("API", &XbeeConst_UseAPI, sizeof(XbeeConst_UseAPI));                   						}						else if (MenuItem==6)						{								if (WeightConst_JZZ_ == 0 && WeightConst_JZZ>0)         WeightConst_JZZ--;								else if (WeightConst_JZZ_==1&& WeightConst_JZZ>10)      WeightConst_JZZ = WeightConst_JZZ - 10;								else if (WeightConst_JZZ_==2&& WeightConst_JZZ>100)     WeightConst_JZZ = WeightConst_JZZ - 100;								else if (WeightConst_JZZ_==3&& WeightConst_JZZ>1000)    WeightConst_JZZ = WeightConst_JZZ - 1000;								else if (WeightConst_JZZ_==4 && WeightConst_JZZ>10000)  WeightConst_JZZ = WeightConst_JZZ - 10000;						}						else if (MenuItem==7)						{								if (WeightConst_ZD_ == 0 & Maxval>0)         {  Maxval--; }								else if (WeightConst_ZD_==1 & Maxval>10)     {  Maxval = Maxval - 10;    }								else if (WeightConst_ZD_==2 & Maxval>100)    {  Maxval = Maxval - 100;   }								else if (WeightConst_ZD_==3 & Maxval>1000)   {  Maxval = Maxval - 1000;  }								else if (WeightConst_ZD_==4 & Maxval>10000)  {  Maxval = Maxval - 10000; }						}						else if (MenuItem==8)						{																	if (ad_FS>0)   ad_FS--;   else ad_FS=8;								write_Flash("ad_FS", &ad_FS, sizeof(ad_FS));          						}						else if (MenuItem==9)						{								if (ad_Point>0)  ad_Point--; else  ad_Point=3;								write_Flash("ad_Point", &ad_Point, sizeof(ad_Point));          						}						else if (MenuItem==10)						{																	if (ad_Inteval== 1) ad_Inteval=5; else if (ad_Inteval==2)  ad_Inteval=1;								else if (ad_Inteval==5) ad_Inteval=2; else ad_Inteval=1;								write_Flash("ad_Inteval", &ad_Inteval, sizeof(ad_Inteval));       						}						else if (MenuItem==11)						{																	if (WeightConst_BLE>0) WeightConst_BLE --;								else WeightConst_BLE = 3;								write_Flash("BLE", &WeightConst_BLE, sizeof(WeightConst_BLE)); 								//----------------------------setBT();						}						button_state.b1 = 1;						button_state.b2 = 0;						button_state.b3 = 0;						button_state.b4 = 0;						button_state.b5 = 0;				}				else if ((HAL_GPIO_ReadPin(B2_GPIO_Port, B2_Pin)) && (WeightConst_SBType != 4&&WeightConst_SBType != 6) && 	button_state.b2 == 0) {						beep();						if (MenuItem==0)						{								if (XbeeConst_DeviceAddress<30)	XbeeConst_DeviceAddress++; else XbeeConst_DeviceAddress = 1 ;								write_Flash("CH", &XbeeConst_DeviceAddress, sizeof(XbeeConst_DeviceAddress));						}						else if (MenuItem==1)						{								if (WeightConst_TQ<14)	WeightConst_TQ++; else WeightConst_TQ = 1 ;								write_Flash("TQ", &WeightConst_TQ, sizeof(WeightConst_TQ));						}						else if (MenuItem==2)						{								if (XbeeConst_NetAddress<13 && (WeightConst_SBType!=4&&WeightConst_SBType!=6))										XbeeConst_NetAddress++;								else if (XbeeConst_NetAddress<2 && (WeightConst_SBType==4))										XbeeConst_NetAddress++;								else										XbeeConst_NetAddress=0;								setNetAddress();								write_Flash("WL", &XbeeConst_NetAddress, sizeof(XbeeConst_NetAddress));						}						else if (MenuItem==3)						{								if (WeightConst_SBType<2 && (WeightConst_SBType!=4&&WeightConst_SBType!=6))										WeightConst_SBType++;              								write_Flash("PM", &WeightConst_SBType, sizeof(WeightConst_SBType));						}						else if (MenuItem==4)						{								if (WeightConst_ChanCheShu<30)	WeightConst_ChanCheShu++;								else	WeightConst_ChanCheShu=1;								write_Flash("CC", &WeightConst_ChanCheShu, sizeof(WeightConst_ChanCheShu));								WeightConst_Weight_display[6] = WeightConst_ChanCheShu + 0x30;						}						else if (MenuItem==5)						{								if ((XbeeConst_UseAPI<3 && isBLE==0) || (XbeeConst_UseAPI<5 && isBLE>0))	XbeeConst_UseAPI++;	else	XbeeConst_UseAPI=0;								setAPI();								write_Flash("API", &XbeeConst_UseAPI, sizeof(XbeeConst_UseAPI));       						}						else if (MenuItem==6)						{								if (WeightConst_JZZ_ == 0)	  WeightConst_JZZ++;								else if (WeightConst_JZZ_==1)	WeightConst_JZZ = WeightConst_JZZ + 10;								else if (WeightConst_JZZ_==2)	WeightConst_JZZ = WeightConst_JZZ + 100;								else if (WeightConst_JZZ_==3)	WeightConst_JZZ = WeightConst_JZZ + 1000;								else if (WeightConst_JZZ_==4)	WeightConst_JZZ = WeightConst_JZZ + 10000;						}						else if (MenuItem==7)						{								if (WeightConst_ZD_ == 0)	    Maxval++;								else if (WeightConst_ZD_==1)  Maxval = Maxval + 10;								else if (WeightConst_ZD_==2)	Maxval = Maxval + 100;								else if (WeightConst_ZD_==3)	Maxval = Maxval + 1000;								else if (WeightConst_ZD_==4)	Maxval = Maxval + 10000;						}						else if (MenuItem==8)						{								if (ad_FS<8)	ad_FS++;		else	ad_FS=0;								write_Flash("ad_FS", &ad_FS, sizeof(ad_FS));        						}						else if (MenuItem==9)						{								if (ad_Point<3)	ad_Point++;	else	ad_Point=0;								write_Flash("ad_Point", &ad_Point, sizeof(ad_Point));        						}						else if (MenuItem==10)						{							  if (ad_Inteval== 1) ad_Inteval=2; else if (ad_Inteval==2)  ad_Inteval=5;								else if (ad_Inteval==5) ad_Inteval=1; else ad_Inteval=1;								write_Flash("ad_Inteval", &ad_Inteval, sizeof(ad_Inteval));   						}						else if (MenuItem==11)						{								if (WeightConst_BLE<3)	WeightConst_BLE ++;								else WeightConst_BLE = 0;								write_Flash("BLE", &WeightConst_BLE, sizeof(WeightConst_BLE)); 						}						button_state.b1 = 0;						button_state.b2 = 1;						button_state.b3 = 0;						button_state.b4 = 0;						button_state.b5 = 0;				}				else if ((HAL_GPIO_ReadPin(B3_GPIO_Port, B3_Pin) > 0) && 	button_state.b3 == 0) {						if (MenuItem==6)						{								if (WeightConst_JZZ_==4)	WeightConst_JZZ_ = 0;								else WeightConst_JZZ_++;								beep();						}						else if (MenuItem==7)						{								if (WeightConst_ZD_==4)	WeightConst_ZD_ = 0;								else WeightConst_ZD_++;								beep();						}						button_state.b1 = 0;						button_state.b2 = 0;						button_state.b3 = 1;						button_state.b4 = 0;						button_state.b5 = 0;				}				else if ((HAL_GPIO_ReadPin(B2_GPIO_Port, B2_Pin) > 0) && (WeightConst_SBType == 4) && 	button_state.b4 == 0) {						if (WeightConst_TQ<14)								if (MenuItem==5)	MenuItem = 11;						    else if (MenuItem==11)	MenuItem = 0;								else MenuItem++;						else if (MenuItem==11)	MenuItem = 0;						else MenuItem++;						if (MenuItem==6) WeightConst_JZZ_ = 0;  //切换菜单后重置						else if (MenuItem==7) WeightConst_ZD_ = 0;						if (MenuItem==7)						{        				if (WeightConst_JZZ>0) setFullCal(WeightConst_JZZ);						}	          else if (MenuItem==8)  ArgSave();						beep();						button_state.b1 = 0;						button_state.b2 = 0;						button_state.b3 = 0;						button_state.b4 = 1;						button_state.b5 = 0;				}				else if ((HAL_GPIO_ReadPin(B4_GPIO_Port, B4_Pin) > 0) && (WeightConst_SBType != 4 && WeightConst_SBType != 6) && 	button_state.b4 == 0) {						if (WeightConst_TQ < 14)						{								if (MenuItem == 5)	MenuItem = 11;								else if (MenuItem == 11)	MenuItem = 0;								else MenuItem++;						}						else if (MenuItem==11)	MenuItem = 0;						else MenuItem++;						if (MenuItem == 6) WeightConst_JZZ_ = 0;  //切换菜单后重置						else if (MenuItem == 7) WeightConst_ZD_ = 0;						if (MenuItem==7)		setFullCal(WeightConst_JZZ);						else if (MenuItem==8)					ArgSave();						beep();						button_state.b1 = 0;						button_state.b2 = 0;						button_state.b3 = 0;						button_state.b4 = 1;						button_state.b5 = 0;				}		}		rt_thread_mdelay(200);	}}#define THREAD_PRIORITY         3#define THREAD_TIMESLICE        5static  rt_thread_t tid1 = RT_NULL;void MenuButtonthread(void){    tid1 = rt_thread_create("CheckMB",                            CheckMenuButton_entry, RT_NULL,                            0x400,                            THREAD_PRIORITY, THREAD_TIMESLICE);    /* 如果获得线程控制块,启动这个线程 */    if (tid1 != RT_NULL)        rt_thread_startup(tid1);}static void beep_off(void){	HAL_GPIO_WritePin(beep_GPIO_Port, beep_Pin, GPIO_PIN_RESET);}static void beep_on(void){	HAL_GPIO_WritePin(beep_GPIO_Port, beep_Pin, GPIO_PIN_SET);}void alarm_off(void){	HAL_GPIO_WritePin(alarm_GPIO_Port, alarm_Pin, GPIO_PIN_RESET);}void alarm_on(void){	HAL_GPIO_WritePin(alarm_GPIO_Port, alarm_Pin, GPIO_PIN_SET);}void pwr_lock_off(void){	HAL_GPIO_WritePin(GPIOC, pwr_lock_Pin, GPIO_PIN_RESET);}void pwr_lock_on(void){	HAL_GPIO_WritePin(GPIOC, pwr_lock_Pin, GPIO_PIN_SET);}void output1_off(void){	HAL_GPIO_WritePin(output1_GPIO_Port, output1_Pin, GPIO_PIN_SET);}void output1_on(void){	HAL_GPIO_WritePin(output1_GPIO_Port, output1_Pin, GPIO_PIN_RESET);}void output2_off(void){	HAL_GPIO_WritePin(output2_GPIO_Port, output2_Pin, GPIO_PIN_SET);}void output2_on(void){	HAL_GPIO_WritePin(output2_GPIO_Port, output2_Pin, GPIO_PIN_RESET);}void AT_off(void){	HAL_GPIO_WritePin(ble_c_GPIO_Port, ble_c_Pin, GPIO_PIN_SET);}void AT_on(void){	HAL_GPIO_WritePin(ble_c_GPIO_Port, ble_c_Pin, GPIO_PIN_RESET);}void beep(void){	rt_sem_release(thread_beep_sem); }static void thread_beep_entry(void *parameter){		 while(1)	 {			 rt_sem_take(thread_beep_sem, RT_WAITING_FOREVER);   //等待串口消息       beep_on();		   rt_thread_mdelay(400);		   beep_off();   }}static  rt_thread_t tid_beep = RT_NULL;void thread_beep_init(void){	  thread_beep_sem = rt_sem_create("thread_beep_sem", 0, RT_IPC_FLAG_FIFO);    tid_beep = rt_thread_create("beep",                            thread_beep_entry, RT_NULL,                            0x100,                            THREAD_PRIORITY, THREAD_TIMESLICE);    /* 如果获得线程控制块,启动这个线程 */    if (tid_beep != RT_NULL)        rt_thread_startup(tid_beep);}extern uint8_t  isnewBan; static unsigned int button4_press=0;static unsigned int button4_press_=0;static void CheckButton_entry(void *parameter) {    while (1) {        button4_press_ = 200;        if (WeightConst_SBType == 2 || WeightConst_SBType == 7)        {            uart4_send_data[18]=0;            for (int i = 2; i <18; i++)   //校验和                uart4_send_data[18]=uart4_send_data[18]+uart4_send_data[i];						rt_sem_take(uart4_lock, RT_WAITING_FOREVER);					  HAL_UART_Transmit_DMA(&huart4, uart4_send_data, 19);						rt_sem_release(uart4_lock);        }        if (button_state.b1>0)	button_state.b1 ++;				if (button_state.b2>0)	button_state.b2 ++;				if (button_state.b3>0)	button_state.b3 ++;				if (button_state.b4>0)	button_state.b4 ++;				if (button_state.b7>0)	button_state.b7 ++;				if (button_state.b1>=15)	button_state.b1 = 0;				if (button_state.b2>=15)	button_state.b2 = 0;				if (button_state.b3>=5)	button_state.b3 = 0;				if (button_state.b4>=5)	button_state.b4 = 0;								if (button_state.b7>=15)	button_state.b7 = 0;				if (WeightConst_SBType == 3 && isnewBan==1)				{										if ((HAL_GPIO_ReadPin(pwr_GPIO_Port, pwr_Pin) == 0) ) {						rt_thread_mdelay(2000);						if ((HAL_GPIO_ReadPin(pwr_GPIO_Port, pwr_Pin) == 0) ) {							beep();							pwr_lock_off();						}					}		  	}				        if ((HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin) > 0) && button_state.b1 == 0 && CanButton==1 && iscowweight==0)	{            if (WeightConst_SBType != 2 && WeightConst_SBType != 7) {                if (pf_comp.data.pfsort!=0xFE) {                    if (WeightConst_DELAYON>0)                       {                      //  beep();                       //  WeightConst_DELAYTIME = (pf_comp.data.delaytime*60)+1;    //允许按键跳过搅拌延时                    }                    else if (pf_comp.data.needBegin==1 && WeightConst_WeightHaveBegin==0)                    {                        beep();												rt_sem_take(weight_lock, RT_WAITING_FOREVER);                        WeightConst_WeightBegin = WeightConst_WeightCur;												rt_sem_release(weight_lock);											  CompleteTarget_order = pf_comp.data.pfsort;											  write_Flash("completeorder", &CompleteTarget_order, sizeof(CompleteTarget_order));												  rt_sem_take(setTIME_lock, RT_WAITING_FOREVER);											  write_Flash("begintime", &TimeConst, sizeof(TimeConst));															  rt_sem_release(setTIME_lock);							                        write_Flash("beginweight", &WeightConst_WeightBegin, sizeof(WeightConst_WeightBegin));                         getTargetWeight();                    }                    else if (tsdb_recordcount('p')>0 && delayKeying == 0 && WeightConst_Product_Run)						      	{															rt_sem_release(delay_key_sem); 													                        sendkey1(0xF2, 0);										}                }            }            else            {                beep();                ChancheShow();                XbeeConst_FRemoteTxBuf[0] = 7;                XbeeConst_FRemoteTxBuf[1] = 0x7E;                XbeeConst_FRemoteTxBuf[2] = 0x05;                if (isCC)                    XbeeConst_FRemoteTxBuf[3] = ((XbeeConst_DeviceAddress&0x0F) << 5 ) |(XbeeConst_RemoteAddress&0x1f);                else                    XbeeConst_FRemoteTxBuf[3] = XbeeConst_RemoteAddress&0x1f;                if (XbeeConst_UseAPI==1||XbeeConst_UseAPI==3)                    XbeeConst_FRemoteTxBuf[4] = 0xA2;                else                    XbeeConst_FRemoteTxBuf[4] = 0x14;                XbeeConst_FRemoteTxBuf[5] = 0x01;                XbeeConst_FRemoteTxBuf[6] = XbeeConst_FrameNum++;								HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR3, XbeeConst_FRemoteTxBuf[6]);                XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]] = 0;                for (int i = 1; i < XbeeConst_FRemoteTxBuf[0]; i++) {                    XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]] =                        XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]]+XbeeConst_FRemoteTxBuf[i];                }                XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]] = 0xFF - XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]];                if (XbeeConst_UseAPI>0) {										rt_sem_take(uart2_lock, RT_WAITING_FOREVER);						                    setSendFrame_t(0x01,0x01,0xC1);                    XbeeConst_PTxBuf0 = xBeeApp2MakeFrame(&userSendFrame_t, XbeeConst_FRemoteTxBuf);		                    for (int i = 1; i <= XbeeConst_PTxBuf0[0]; i++) //将缓冲区发出                        usart2_send_data[i-1] = XbeeConst_PTxBuf0[i];	  									HAL_UART_Transmit_DMA(&huart2, usart2_send_data, XbeeConst_PTxBuf0[0]);										rt_sem_release(uart2_lock);                }                else	{	 									 if (iscowweight<1)									 {											rt_sem_take(uart3_lock, RT_WAITING_FOREVER);											for (int i = 1; i <= XbeeConst_FRemoteTxBuf[0]; i++) //将缓冲区发出													usart3_send_data[i-1] = XbeeConst_FRemoteTxBuf[i];											HAL_UART_Transmit_DMA(&huart3, usart3_send_data, XbeeConst_FRemoteTxBuf[0]);											rt_sem_release(uart3_lock);									 }                }            }						button_state.b1 = 1;						button_state.b2 = 0;						button_state.b3 = 0;						button_state.b4 = 0;						button_state.b7 = 0;        }        if ((HAL_GPIO_ReadPin(B2_GPIO_Port, B2_Pin) > 0) && button_state.b2 == 0 && CanButton==1 && iscowweight==0) {					  if (((WeightConst_SBType != 2 && WeightConst_SBType != 7)))            {   							if(WeightConst_DELAYON==0)                {                    if (tsdb_recordcount('k')==0)                        sendkey2(0xF4);                }            }            else {                beep();                ChancheShow();                XbeeConst_FRemoteTxBuf[0] = 7;                XbeeConst_FRemoteTxBuf[1] = 0x7E;                XbeeConst_FRemoteTxBuf[2] = 0x05;                if (isCC)                    XbeeConst_FRemoteTxBuf[3] = ((XbeeConst_DeviceAddress&0x0F) << 5 ) | (XbeeConst_RemoteAddress&0x1f);                else                    XbeeConst_FRemoteTxBuf[3] = XbeeConst_RemoteAddress&0x1f;                if (XbeeConst_UseAPI==1||XbeeConst_UseAPI==3)                    XbeeConst_FRemoteTxBuf[4] = 0xA2;                else                    XbeeConst_FRemoteTxBuf[4] = 0x14;                XbeeConst_FRemoteTxBuf[5] = 0x02;                XbeeConst_FRemoteTxBuf[6] = XbeeConst_FrameNum++;								HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR3, XbeeConst_FRemoteTxBuf[6]);                XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]] = 0;                for (int i = 1; i < XbeeConst_FRemoteTxBuf[0]; i++) {                    XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]] =                        XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]]+XbeeConst_FRemoteTxBuf[i];                }                XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]] = 0xFF - XbeeConst_FRemoteTxBuf[XbeeConst_FRemoteTxBuf[0]];                if (XbeeConst_UseAPI>0) {																			rt_sem_take(uart2_lock, RT_WAITING_FOREVER);	                    setSendFrame_t(0x01,0x01,0xC1);                    XbeeConst_PTxBuf0 = xBeeApp2MakeFrame(&userSendFrame_t, XbeeConst_FRemoteTxBuf);                    for (int i = 1; i <= XbeeConst_PTxBuf0[0]; i++) //将缓冲区发出                        usart2_send_data[i-1] = XbeeConst_PTxBuf0[i];															HAL_UART_Transmit_DMA(&huart2, usart2_send_data, XbeeConst_PTxBuf0[0]);										rt_sem_release(uart2_lock);                }                else									if (iscowweight<1 )									 {											rt_sem_take(uart3_lock, RT_WAITING_FOREVER);											for (int i = 1; i <= XbeeConst_FRemoteTxBuf[0]; i++) //将缓冲区发出													usart3_send_data[i-1] = XbeeConst_FRemoteTxBuf[i];											HAL_UART_Transmit_DMA(&huart3, usart3_send_data, XbeeConst_FRemoteTxBuf[0]);											rt_sem_release(uart3_lock);									 }            }            button_state.b1 = 0;						button_state.b2 = 1;						button_state.b3 = 0;						button_state.b4 = 0;						button_state.b7 = 0;        }        if ((HAL_GPIO_ReadPin(B3_GPIO_Port, B3_Pin) > 0) && button_state.b3 == 0) {            if (WeightConst_SBType == 2 || WeightConst_SBType == 7)            {                if (XbeeConst_RemoteAddress == 1)  XbeeConst_RemoteAddress = WeightConst_ChanCheShu;                else XbeeConst_RemoteAddress--;                //	if ((WeightConst_ChanCheShu==7) && XbeeConst_RemoteAddress>2 && XbeeConst_RemoteAddress<5)                //		setNetAddress_byapi(1);                //	else setNetAddress_byapi(0);                ChancheShow();                if (XbeeConst_UseAPI==3) sendshowCC();                beep();            }             else {             													if (HAL_GPIO_ReadPin(B4_GPIO_Port,B4_Pin) > 0)								{									if(WeightConst_TQ==14)									{											if (button_state.b4>0) button4_press = button4_press + button4_press_;											else button4_press=1;									}									if((button4_press>1500) || (iscowweight==1 && WeightConst_TQ==14)){										beep();										button4_press = 0;										setZero();										setZeroCal();									}								}                                else if (iscowweight==0)                {								  	if (WeightConst_SBType!=3)									    beep();									  rt_thread_mdelay(1000);									  if (HAL_GPIO_ReadPin(B3_GPIO_Port,B3_Pin) > 0 && WeightConst_SBType == 1 && WeightConst_Product_Run==1){											  rt_sem_take(display_lock, RT_WAITING_FOREVER);												for (int i = 0; i <40; i++)													 WeightConst_feed[i] = WeightConst_product[i];   //显示一秒牛舍												rt_sem_release(display_lock);												while(HAL_GPIO_ReadPin(B3_GPIO_Port,B3_Pin) > 0){																											  rt_thread_mdelay(200);													}																								rt_sem_take(display_lock, RT_WAITING_FOREVER);												rt_memset(WeightConst_feed,0x20,40);																							    for (int i = 0; i <= WeightConst_PlantempList[1]-11; i++) {												  WeightConst_feed[i] = WeightConst_PlantempList[i+4];  //饲料名称												}												rt_sem_release(display_lock);									  }									  										else if (WeightConst_SBType!=3)										{																						if (WeightConst_displayTotal == 1) WeightConst_displayTotal = 0;											else WeightConst_displayTotal = 1;										}                }            }            button_state.b1 = 0;						button_state.b2 = 0;						button_state.b3 = 1;						button_state.b4 = 0;						button_state.b7 = 0;        }        if ((HAL_GPIO_ReadPin(B4_GPIO_Port, B4_Pin) > 0) && button_state.b4 == 0  && iscowweight==0) {					  WriteTag();					            if (WeightConst_SBType != 2 && WeightConst_SBType != 7) {							  if (isTag==1)								{									 //if (WriteTag_state <2 && pf_comp.data.needBegin == 1 && WeightConst_WeightHaveBegin==0)									 {										 beep();										 WriteTag();										 									 }								}                if (WeightConst_SBType==6)                {                    if (WeightConst_remoteDisplay==0)                        WeightConst_remoteDisplay = 1;                    else                        WeightConst_remoteDisplay = 0;                    beep();                }								else {								  Planback();								}            }            else            {                if (XbeeConst_RemoteAddress==WeightConst_ChanCheShu)                    XbeeConst_RemoteAddress = 1;                else                    XbeeConst_RemoteAddress++;                //	if ((WeightConst_ChanCheShu==7)  && XbeeConst_RemoteAddress>2 && XbeeConst_RemoteAddress<5)                //		setNetAddress_byapi(1);                //	else setNetAddress_byapi(0);                ChancheShow();                if (XbeeConst_UseAPI==3) sendshowCC();                beep();            }            button_state.b1 = 0;						button_state.b2 = 0;						button_state.b3 = 0;						button_state.b4 = 1;						button_state.b7 = 0;        }        else if (button_state.b4==0)            button4_press = 0;											rt_thread_mdelay(200);    }}void Button_thread(void){    tid1 = rt_thread_create("Button",                            CheckButton_entry, RT_NULL,                            0x400,                            3, 5);    /* 如果获得线程控制块,启动这个线程 */    if (tid1 != RT_NULL)        rt_thread_startup(tid1);}
 |