系统功能:
系统分为自动和手动模式,自动模式下根据获取到的土壤湿度值和设定的土壤湿度值
对比来自动开关水泵,手动模式下通过按键手动开关水泵。
系统上电后OLED显示如下:
第一行显示获取到的温湿度
第二行显示获取到的光照和和土壤湿度值
第三行显示设定的土壤湿度值
第四行显示系统模式和水泵开关状态
自动模式下短按SW1开关水泵
短按SW2增加土壤湿度设定值
短按SW3减小土壤湿度设定值
短按SW4切换系统模式(手动或自动模式切换)
蓝牙连接后,如果系统处于自动状态则每隔5秒钟上报一次系统状态。
如果系统处于手动状态下则可通过蓝牙下发控制命令,
发送字符P开关继电器系统功能框图:
主要功能模块原理图:
系统主要功能模块代码
初始化代码:
//========================================================================
// 系统初始化
//========================================================================
void InitSystem(void)
{
InitVar();
InitGPIO();
InitTimer();
InitUart();
InitADC();
ResetDHT11();
InitOled();
InitOledDisp();
DelayMs(50);
EA = 1;
}
系统控制代码:
//系统信息更新
void SystemControl(void)
{
static uint8_t updateCnt = 0;
updateCnt++;
if(updateCnt>=SYSTEM_UPDATE_INTER)
{
updateCnt = 0;
if(DHT11ReadData()==0) //DHT11温湿度读取OK
{
;
}
}
ReadSensorVal();
//自动模式下定时上报系统信息
if(sysMode==AUTO_MODE)
{
UpdateBleData();
}
}
按键检测代码:
/*********************************************************************************
* @brief Scan key board
* @param None
* @retval None
*********************************************************************************/
void ScanKeyBoard(void)
{
uint8_t keyVal;
keyVal = CheckKeyVal();
if(KeyInfo.OldVal!=keyVal) //first time enter after key changed
{
KeyInfo.ReleaseCnt = 0; //clear key release time count
if(keyVal!=NO_KEY_PRESSED_DEF)
{
KeyInfo.HoldCnt = 0;
}
KeyInfo.OldVal = keyVal;
}
else
{
if(keyVal!=NO_KEY_PRESSED_DEF) //have key press
{
// if(KeyInfo.HoldDelayCnt<254)
if(KeyInfo.HoldCnt<1000)
{
KeyInfo.HoldCnt++;
}
if(KeyInfo.HoldCnt==SHORT_PRESS_TIME_DEF) //pressed for a short time
{
KeyInfo.TempNewVal = KeyInfo.OldVal;
}
}
else //release
{
if(KeyInfo.ReleaseCnt<254)
{
KeyInfo.ReleaseCnt++;
}
if(KeyInfo.ReleaseCnt==RELEASE_TIME_DEF)
{
if(KeyInfo.HoldCnt>=LONG_PRESS_TIME_DEF) //长按键
{
KeyInfo.LongPress = KEY_LONG_PRESS;
}
else //短按键
{
KeyInfo.LongPress = KEY_SHORT_PRESS;
}
KeyInfo.ConfirmVal = KeyInfo.TempNewVal;
KeyInfo.HoldCnt = 0;
KeyInfo.TempNewVal = NO_KEY_PRESSED_DEF;
}
}
}
}
实物图片:
此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。