版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
參考文獻(xiàn)[1]
胡振山,江振青,呂海燕.
基于GSM的垃圾桶溢出報(bào)警系統(tǒng)設(shè)計(jì).
物聯(lián)網(wǎng)技術(shù).2022.[2]
于雯,王艷,張佳佳,陳思思.
多功能智能垃圾桶結(jié)構(gòu)設(shè)計(jì)和功能實(shí)現(xiàn)[C],
工業(yè)儀表與自動化裝置.2022.[3]
張河,
張桂梅,
段磊鵬,
王婷婷.
基于51單片機(jī)的智能垃圾桶系統(tǒng)開發(fā)[C],
科技創(chuàng)新與應(yīng)用.2021.[4]
王睿錚,趙意如,石義
.
基于
STM89C51
的防雨魚塘浮標(biāo)自動監(jiān)測系統(tǒng)設(shè)計(jì)
[J].
電子制作,2020.[5]
黃國維.
基于深度學(xué)習(xí)的城市垃圾桶智能分類研究[J].
安徽理工大學(xué),2019.[6]
朱瑩.
智能垃圾桶的設(shè)計(jì)與研究[M].
中國礦業(yè)大學(xué),2019.[7]
肖茜月,李代偉,劉田俊睿
.
基于
GSM
模塊的家庭智能報(bào)警系統(tǒng)設(shè)計(jì)與研究
[J].
電腦知識與技術(shù),2021.[8]
劉炳海
.
從零開始學(xué)電子電路設(shè)計(jì)
[M].化學(xué)工業(yè)出版社,2019[9]
陳鐸,盧元爍,張幽彤.
語音控制智能垃圾桶設(shè)計(jì)[J].
電子技術(shù)與軟件工程.2022[10]
楊帆,
秦智鵬.
基于STM32的語音分類垃圾桶設(shè)計(jì)[M].
武漢工程大學(xué)學(xué)報(bào).2020[11]
王熹.
基于YOLOv5的垃圾溢出檢測研究[D].江漢大學(xué),2022.[12]
胡振山,江振青,呂海燕.
基于GSM的垃圾桶溢出報(bào)警系統(tǒng)設(shè)計(jì)[J].
物聯(lián)網(wǎng)技術(shù),2022,12(01):4-6.[13]
司徒凌云,王林章,李宣東,劉楊.
基于應(yīng)用視角的緩沖區(qū)溢出檢測技術(shù)與工具[J].
軟件學(xué)報(bào),2019,30(06):1721-1741.[14]
張國強(qiáng),殷博,邱宇,王偉靜.
基于概率層次分析的緩沖區(qū)溢出檢測工具評估[J].
計(jì)算機(jī)應(yīng)用與軟件,2018,35(07):27-32+103.[15]
李智超.
多層無縫的防破壞防盜防火報(bào)警系統(tǒng)的設(shè)計(jì)[D].東華理工大學(xué),2017.[16]
T.
Vairam;S.
Sarathambekai.
Proficient
smart
trash
can
management
using
internet
of
things
and
SDN
architecture
approach.[M].2022[17]
Jia
Gangyong;Zhu
Yujie;Han
Guangjie;Chan
Sammy;Shu
Lei.
STM:
an
intelligent
trash
can
system
based
on
both
NB-IoT
and
edge
computing
for
smart
cities.2020.[18]
Tremblay,
Ken.
Sprinkler
douses
fire
started
by
ignition
of
oily
rags
in
trash
can.2019[19]
Juan
Guo;Xiaoying
Yu.
The
Design
of
Intelligent
Wastebin
Based
on
AT89S52
[P].
Journal
of
Information
Hiding
and
Privacy
Protection.2021[20]
Design
of
Household
Items
Delivery
Robot.
Design
of
Household
Items
Delivery
Robot
[J].
IOP
Conference
Series:
Earth
and
Environmental
Science
.2019
附錄電路圖源代碼#include"sys.h"#include"delay.h"#include"oled.h"#include"tim.h"#include"port.h"#include"app.h"#include"bsp_gsm_usart.h"#include"bsp_gsm_gprs.h"#include"hcsr04.h"#include"timer.h"#include"HX711.h"intmain(void){ delay_init(); //延時(shí)函數(shù)初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級 system_Time_Init(9,7199); sys_gpio_init(); key_init(10,500,1100,3000); OLED_Init(); //初始化OLED OLED_Clear();OLED_ShowString(0,0,"nihao",12); hsr04_init();TIM3_PWM_Init();Init_HX711pin(); GSM_USART_Config();//u2 while(gsm_cmd("AT\r","OK",1000)!=GSM_TRUE); while(IsInsertCard()!=GSM_TRUE){ delay_ms(500); } while(1) { app(); } }/*********************************************************************************@fileGPIO/IOToggle/stm32f10x_it.c*@authorMCDApplicationTeam*@versionV3.5.0*@date08-April-2011*@briefMainInterruptServiceRoutines.*Thisfileprovidestemplateforallexceptionshandlerandperipherals*interruptserviceroutine.*******************************************************************************@attention**THEPRESENTFIRMWAREWHICHISFORGUIDANCEONLYAIMSATPROVIDINGCUSTOMERS*WITHCODINGINFORMATIONREGARDINGTHEIRPRODUCTSINORDERFORTHEMTOSAVE*TIME.ASARESULT,STMICROELECTRONICSSHALLNOTBEHELDLIABLEFORANY*DIRECT,INDIRECTORCONSEQUENTIALDAMAGESWITHRESPECTTOANYCLAIMSARISING*FROMTHECONTENTOFSUCHFIRMWAREAND/ORTHEUSEMADEBYCUSTOMERSOFTHE*CODINGINFORMATIONCONTAINEDHEREININCONNECTIONWITHTHEIRPRODUCTS.**<h2><center>©COPYRIGHT2011STMicroelectronics</center></h2>*******************************************************************************//*Includes*/#include"stm32f10x_it.h"voidNMI_Handler(void){}voidHardFault_Handler(void){/*GotoinfiniteloopwhenHardFaultexceptionoccurs*/while(1){}}voidMemManage_Handler(void){/*GotoinfiniteloopwhenMemoryManageexceptionoccurs*/while(1){}}voidBusFault_Handler(void){/*GotoinfiniteloopwhenBusFaultexceptionoccurs*/while(1){}}voidUsageFault_Handler(void){/*GotoinfiniteloopwhenUsageFaultexceptionoccurs*/while(1){}}voidSVC_Handler(void){}voidDebugMon_Handler(void){}voidPendSV_Handler(void){}voidSysTick_Handler(void){}/******************************************************************************//*STM32F10xPeripheralsInterruptHandlers*//*AddheretheInterruptHandlerfortheusedperipheral(s)(PPP),forthe*//*availableperipheralinterrupthandler'snamepleaserefertothestartup*//*file(startup_stm32f10x_xx.s).*//******************************************************************************/#include"delay.h"http:////////////////////////////////////////////////////////////////////////////////// //如果需要使用OS,則包括下面的頭文件即可.#ifSYSTEM_SUPPORT_OS#include"includes.h" //ucos使用 #endifstaticu8fac_us=0; //us延時(shí)倍乘數(shù) staticu16fac_ms=0; //ms延時(shí)倍乘數(shù),在ucos下,代表每個(gè)節(jié)拍的ms數(shù) #ifSYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS定義了,說明要支持OS了(不限于UCOS).//當(dāng)delay_us/delay_ms需要支持OS的時(shí)候需要三個(gè)與OS相關(guān)的宏定義和函數(shù)來支持//首先是3個(gè)宏定義://delay_osrunning:用于表示OS當(dāng)前是否正在運(yùn)行,以決定是否可以使用相關(guān)函數(shù)//delay_ostickspersec:用于表示OS設(shè)定的時(shí)鐘節(jié)拍,delay_init將根據(jù)這個(gè)參數(shù)來初始哈systick//delay_osintnesting:用于表示OS中斷嵌套級別,因?yàn)橹袛嗬锩娌豢梢哉{(diào)度,delay_ms使用該參數(shù)來決定如何運(yùn)行//然后是3個(gè)函數(shù)://delay_osschedlock:用于鎖定OS任務(wù)調(diào)度,禁止調(diào)度//delay_osschedunlock:用于解鎖OS任務(wù)調(diào)度,重新開啟調(diào)度//delay_ostimedly:用于OS延時(shí),可以引起任務(wù)調(diào)度.//本例程僅作UCOSII和UCOSIII的支持,其他OS,請自行參考著移植//支持UCOSII#ifdef OS_CRITICAL_METHOD //OS_CRITICAL_METHOD定義了,說明要支持UCOSII #definedelay_osrunning OSRunning //OS是否運(yùn)行標(biāo)記,0,不運(yùn)行;1,在運(yùn)行#definedelay_ostickspersec OS_TICKS_PER_SEC //OS時(shí)鐘節(jié)拍,即每秒調(diào)度次數(shù)#definedelay_osintnesting OSIntNesting //中斷嵌套級別,即中斷嵌套次數(shù)#endif//支持UCOSIII#ifdef CPU_CFG_CRITICAL_METHOD //CPU_CFG_CRITICAL_METHOD定義了,說明要支持UCOSIII #definedelay_osrunning OSRunning //OS是否運(yùn)行標(biāo)記,0,不運(yùn)行;1,在運(yùn)行#definedelay_ostickspersec OSCfg_TickRate_Hz //OS時(shí)鐘節(jié)拍,即每秒調(diào)度次數(shù)#definedelay_osintnesting OSIntNestingCtr //中斷嵌套級別,即中斷嵌套次數(shù)#endif//us級延時(shí)時(shí),關(guān)閉任務(wù)調(diào)度(防止打斷us級延遲)voiddelay_osschedlock(void){#ifdefCPU_CFG_CRITICAL_METHOD //使用UCOSIII OS_ERRerr; OSSchedLock(&err); //UCOSIII的方式,禁止調(diào)度,防止打斷us延時(shí)#else //否則UCOSII OSSchedLock(); //UCOSII的方式,禁止調(diào)度,防止打斷us延時(shí)#endif}//us級延時(shí)時(shí),恢復(fù)任務(wù)調(diào)度voiddelay_osschedunlock(void){ #ifdefCPU_CFG_CRITICAL_METHOD //使用UCOSIII OS_ERRerr; OSSchedUnlock(&err); //UCOSIII的方式,恢復(fù)調(diào)度#else //否則UCOSII OSSchedUnlock(); //UCOSII的方式,恢復(fù)調(diào)度#endif}//調(diào)用OS自帶的延時(shí)函數(shù)延時(shí)//ticks:延時(shí)的節(jié)拍數(shù)voiddelay_ostimedly(u32ticks){#ifdefCPU_CFG_CRITICAL_METHOD OS_ERRerr; OSTimeDly(ticks,OS_OPT_TIME_PERIODIC,&err); //UCOSIII延時(shí)采用周期模式#else OSTimeDly(ticks); //UCOSII延時(shí)#endif}//systick中斷服務(wù)函數(shù),使用ucos時(shí)用到voidSysTick_Handler(void){ if(delay_osrunning==1) //OS開始跑了,才執(zhí)行正常的調(diào)度處理 { OSIntEnter(); //進(jìn)入中斷 OSTimeTick(); //調(diào)用ucos的時(shí)鐘服務(wù)程序 OSIntExit(); //觸發(fā)任務(wù)切換軟中斷 }}#endif //初始化延遲函數(shù)//當(dāng)使用OS的時(shí)候,此函數(shù)會初始化OS的時(shí)鐘節(jié)拍//SYSTICK的時(shí)鐘固定為HCLK時(shí)鐘的1/8//SYSCLK:系統(tǒng)時(shí)鐘voiddelay_init(){#ifSYSTEM_SUPPORT_OS //如果需要支持OS. u32reload;#endif SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //選擇外部時(shí)鐘HCLK/8 fac_us=SystemCoreClock/8000000; //為系統(tǒng)時(shí)鐘的1/8#ifSYSTEM_SUPPORT_OS //如果需要支持OS. reload=SystemCoreClock/8000000; //每秒鐘的計(jì)數(shù)次數(shù)單位為M reload*=1000000/delay_ostickspersec; //根據(jù)delay_ostickspersec設(shè)定溢出時(shí)間 //reload為24位寄存器,最大值:16777216,在72M下,約合1.86s左右 fac_ms=1000/delay_ostickspersec; //代表OS可以延時(shí)的最少單位 SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //開啟SYSTICK中斷 SysTick->LOAD=reload; //每1/delay_ostickspersec秒中斷一次 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //開啟SYSTICK#else fac_ms=(u16)fac_us*1000; //非OS下,代表每個(gè)ms需要的systick時(shí)鐘數(shù)#endif} #ifSYSTEM_SUPPORT_OS //如果需要支持OS.//延時(shí)nus//nus為要延時(shí)的us數(shù). voiddelay_us(u32nus){ u32ticks; u32told,tnow,tcnt=0; u32reload=SysTick->LOAD; //LOAD的值 ticks=nus*fac_us; //需要的節(jié)拍數(shù) tcnt=0; delay_osschedlock(); //阻止OS調(diào)度,防止打斷us延時(shí) told=SysTick->VAL; //剛進(jìn)入時(shí)的計(jì)數(shù)器值 while(1) { tnow=SysTick->VAL; if(tnow!=told) { if(tnow<told)tcnt+=told-tnow; //這里注意一下SYSTICK是一個(gè)遞減的計(jì)數(shù)器就可以了. elsetcnt+=reload-tnow+told; told=tnow; if(tcnt>=ticks)break; //時(shí)間超過/等于要延遲的時(shí)間,則退出. } }; delay_osschedunlock(); //恢復(fù)OS調(diào)度 }//延時(shí)nms//nms:要延時(shí)的ms數(shù)voiddelay_ms(u16nms){ if(delay_osrunning&&delay_osintnesting==0) //如果OS已經(jīng)在跑了,并且不是在中斷里面(中斷里面不能任務(wù)調(diào)度) { if(nms>=fac_ms) //延時(shí)的時(shí)間大于OS的最少時(shí)間周期 { delay_ostimedly(nms/fac_ms); //OS延時(shí) } nms%=fac_ms; //OS已經(jīng)無法提供這么小的延時(shí)了,采用普通方式延時(shí) } delay_us((u32)(nms*1000)); //普通方式延時(shí)}#else//不用OS時(shí)//延時(shí)nus//nus為要延時(shí)的us數(shù). voiddelay_us(u32nus){ u32temp; SysTick->LOAD=nus*fac_us; //時(shí)間加載 SysTick->VAL=0x00; //清空計(jì)數(shù)器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //開始倒數(shù) do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待時(shí)間到達(dá) SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //關(guān)閉計(jì)數(shù)器 SysTick->VAL=0X00; //清空計(jì)數(shù)器 }//延時(shí)nms//注意nms的范圍//SysTick->LOAD為24位寄存器,所以,最大延時(shí)為://nms<=0xffffff*8*1000/SYSCLK//SYSCLK單位為Hz,nms單位為ms//對72M條件下,nms<=1864voiddelay_ms(u16nms){ u32temp; SysTick->LOAD=(u32)nms*fac_ms; //時(shí)間加載(SysTick->LOAD為24bit) SysTick->VAL=0x00; //清空計(jì)數(shù)器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //開始倒數(shù) do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待時(shí)間到達(dá) SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //關(guān)閉計(jì)數(shù)器 SysTick->VAL=0X00; //清空計(jì)數(shù)器 }#endif#include"port.h"Keykey_in[KEY_NUM];void_key_init(Key*_key_ptr,u32_filter,u32_click_times,u32_clicks_times,u32_long_press_times){ _key_ptr->status=0; _key_ptr->up=1; _key_ptr->down=0; _key_ptr->filter_start_timing=0; _key_ptr->filter_times=_filter; _key_ptr->click_times=_click_times; _key_ptr->clicks_times=_clicks_times; _key_ptr->long_press_times=_long_press_times;}voidkey_init(u32_filter,u32_click_times,u32_clicks_times,u32_long_press_times){ u8i; for(i=0;i<KEY_NUM;i++) { _key_init(&key_in[i],_filter,_click_times,_clicks_times,_long_press_times); kin[i]=0; }}u8key_update(Key*_key_ptr,u16_s)//適用于觸發(fā)為低電平邏輯{ u8status; if(_s) status=1; else status=0; if(status!=_key_ptr->status) { if(_key_ptr->filter_start_timing==0) { _key_ptr->filter_time=sys_running_timer.ms; _key_ptr->filter_start_timing=1;//開始計(jì)時(shí),去抖 } else { if((sys_running_timer.ms-_key_ptr->filter_time)>_key_ptr->filter_times) { _key_ptr->filter_start_timing=0; if(status==KEY_ACTIVE) { _key_ptr->up=0; _key_ptr->down=1; _key_ptr->click_time=sys_running_timer.ms; _key_ptr->long_press_time=sys_running_timer.ms; } else { _key_ptr->long_press=0; _key_ptr->up=1; _key_ptr->down=0; if((sys_running_timer.ms-_key_ptr->click_time)<_key_ptr->click_times) { if(_key_ptr->clicks==0) _key_ptr->clicks++; elseif((sys_running_timer.ms-_key_ptr->clicks_time)<_key_ptr->clicks_times) { _key_ptr->clicks++; } _key_ptr->clicks_time=sys_running_timer.ms; } } _key_ptr->status=status; } } } else { if(status==KEY_ACTIVE&&(sys_running_timer.ms-_key_ptr->long_press_time)>_key_ptr->long_press_times) { _key_ptr->long_press=1; } } if((sys_running_timer.ms-_key_ptr->clicks_time)>=_key_ptr->clicks_times) { _key_ptr->key_clicks=_key_ptr->clicks; _key_ptr->clicks=0; } return_key_ptr->status;}u8key_begin_timing=0;sys_timkey_tim;u8kin[KEY_NUM]={0};voidkey_logic(void){ u8i;for(i=0;i<KEY_NUM;i++){kin[i]=key_update(&key_in[i],*IO.keys[i]);}}/***************************短信功能****************************/uint8_tgsm_sms(char*num,char*smstext);//發(fā)送短信(支持中英文,中文為GBK碼)char*gsm_waitask(uint8_twaitask_hook(void));//等待有數(shù)據(jù)應(yīng)答,返回接收緩沖區(qū)地址uint8_t IsReceiveMS (void);uint8_t readmessage (uint8_tmessadd,char*num,char*str);/***************************GPRS功能***************************/uint8_t gsm_gprs_init (void); //GPRS初始化環(huán)境uint8_tgsm_gprs_tcp_link (char*localport,char*serverip,char*serverport); //TCP連接uint8_tgsm_gprs_udp_link (char*localport,char*serverip,char*serverport); //UDP連接uint8_tgsm_gprs_send (constchar*str); //發(fā)送數(shù)據(jù)uint8_tgsm_gprs_link_close (void); //IP鏈接斷開uint8_tgsm_gprs_shut_close (void); //關(guān)閉場景uint8_t PostGPRS(void);/*調(diào)試用串口*/#defineGSM_DEBUG_ON 0#defineGSM_DEBUG_ARRAY_ON0#defineGSM_DEBUG_FUNC_ON 0//Logdefine#defineGSM_INFO(fmt,arg...)printf("<<-GSM-INFO->>"fmt"\n",##arg)#defineGSM_ERROR(fmt,arg...)printf("<<-GSM-ERROR->>"fmt"\n",##arg)#defineGSM_DEBUG(fmt,arg...)do{\if(GSM_DEBUG_ON)\printf("<<-GSM-DEBUG->>[%d]"fmt"\n",__LINE__,##arg);\ }while(0)#defineGSM_DEBUG_ARRAY(array,num)do{\int32_ti;\
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新版華東師大版八年級數(shù)學(xué)下冊《16.1.2分式的基本性質(zhì)通分》聽評課記錄3
- 五年級數(shù)學(xué)下冊聽評課記錄《3.1 分?jǐn)?shù)乘法(一)》(3)-北師大版
- 2025年自返式取樣器合作協(xié)議書
- 蘇科版七年級數(shù)學(xué)上冊《2.6.2有理數(shù)的乘法與除法》聽評課記錄
- 小學(xué)二年級數(shù)學(xué)口算題大全
- 七年級上冊歷史第10課《秦末農(nóng)民大起義》聽課評課記錄
- 五年級下冊口算練習(xí)
- 人教版數(shù)學(xué)八年級下冊《一次函數(shù)的概念》聽評課記錄1
- 白酒銷售工作計(jì)劃書范本
- 聚合支付渠道服務(wù)協(xié)議書范本
- 2025年汽車加氣站作業(yè)人員安全全國考試題庫(含答案)
- 化工過程安全管理導(dǎo)則安全儀表管理課件
- 高三日語一輪復(fù)習(xí)日語助詞「に」和「を」的全部用法課件
- 【化學(xué)】高中化學(xué)手寫筆記
- 中國高血壓防治指南-解讀全篇
- 2024年監(jiān)控安裝合同范文6篇
- 2024年山東省高考政治試卷真題(含答案逐題解析)
- 煙葉復(fù)烤能源管理
- 食品安全管理員考試題庫298題(含標(biāo)準(zhǔn)答案)
- 執(zhí)業(yè)醫(yī)師資格考試《臨床執(zhí)業(yè)醫(yī)師》 考前 押題試卷絕密1 答案
- 非ST段抬高型急性冠脈綜合征診斷和治療指南(2024)解讀
評論
0/150
提交評論