######光敏无法采集
#include "sys.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "ADC.h"
#include "usart3.h"
#include "key.h"
#include "oled.h"
#include "math.h"
#include "dht11.h"
#include "bmp280.h"
#include "gizwits_product.h"
#include "beep.h"
#include "lsens.h"
u32 STM32_xx0=0X4E4C4A;
u32 STM32_xx1=0X364B1322;
u32 STM32_xx2=0X132D13 ;
#define FLASH_SAVE_ADDR 0x08010000
u8 buff[30];//参数显示缓存数组
u8 count;
dataPoint_t currentDataPoint;//云端数据点
u8 wifi_sta;//wifi连接状态标志
u8 mode=0;//模式控制自动和手动
u8 NTP_sta=0;//网诺时间获取状态
u8 display_contrl=0;
u8 Curtain=0;
u8 last_Curtain=0;
extern u8 DHT11_Temp,DHT11_Hum; //温湿度
u16 Pre; //气压检测值
u8 adcx; //光敏
u16 GZ_Value; //光照检测值
u16 MQ2_Value; //烟雾检测值
u16 MQ7_Value; //一氧化碳检测值
u16 MQ135_Value; //空气质量检测值
u16 A_DHT11_Temp=35; //温度阈值
u16 A_DHT11_Hum=20; //湿度阈值
u16 A_pre=1500; //气压阈值
u16 A_GZ_Value=1000; //光照强度阈值
u16 A_MQ2_Value=3500; //烟雾阈值
u16 A_MQ7_Value=3500; //一氧化碳阈值
u16 A_MQ135_Value=500; //空气质量阈值
/************************************************
ALIENTEK精英STM32开发板实验1
跑马灯实验
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司
作者:正点原子 @ALIENTEK
************************************************/
//协议初始化
void Gizwits_Init(void)
{
TIM3_Int_Init(9,7199);//1MS系统定时
usart3_init(9600);//WIFI初始化
memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化
gizwitsInit();//缓冲区初始化
}
//数据采集
void userHandle(void)
{
currentDataPoint.valueLED = !LED0;
currentDataPoint.valueCurtain = Curtain;
currentDataPoint.valueTemp = DHT11_Temp;
currentDataPoint.valueHum = DHT11_Hum;
currentDataPoint.valuePre = Pre;
// currentDataPoint.valueGZ_Value = GZ_Value;
currentDataPoint.valueMQ2_Value = MQ2_Value;
currentDataPoint.valueMQ7_Value = MQ7_Value;
currentDataPoint.valueMQ135_Value = MQ135_Value;
}
void Get_Data(u16 count);//获取传感器数据
void WIFI_Contection(u8 key);//WiFi连接控制
void Canshu_Change(u8 key);//系统参数调节
void Mode_Change(u8 key);//模式切换
void BUJING_Cotrol(u8 mode,u16 time,u16 count);
int main(void)
{
u8 t=0;
int key_value; //按键值
uart_init(115200); //串口初始化为115200
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
Adc1_Channe_Init(); //ADC通道初始化
KEY_Init(); //按键引脚初始化
bmp280Init();
//while(DHT11_Init());
LED_Init(); //初始化与LED连接的硬件接口
OLED_Init(); //OLED初始化
OLED_Clear(); //OLED清屏
Gizwits_Init();
BEEP_Init();
Lsens_Init(); //初始化光敏传感器
while(1)
{
Get_Data(0);
if(GZ_Value<=A_GZ_Value&&mode==0)
{
LED0=0;
Curtain=0;
}else if(GZ_Value>A_GZ_Value&&mode==0){
LED0=1;
Curtain=1;
}
if(last_Curtain!=Curtain&&mode==0)
{
BUJING_Cotrol(Curtain,3,270);
last_Curtain = Curtain;
}
if(last_Curtain!=currentDataPoint.valueCurtain&&mode==1)
{
BUJING_Cotrol(currentDataPoint.valueCurtain,3,270);
Curtain = currentDataPoint.valueCurtain;
last_Curtain = currentDataPoint.valueCurtain;
}
if(mode==1)
{
LED0=!currentDataPoint.valueLED;
BEEP=!BEEP;
}
if(DHT11_Temp>=A_DHT11_Temp||DHT11_Hum<=A_DHT11_Hum||Pre>=A_pre||MQ135_Value<=A_MQ135_Value||MQ2_Value>=A_MQ2_Value||MQ7_Value>=A_MQ7_Value)
{
}else BEEP = 0;
key_value = KEY_Scan(0);
if(key_value==2)
{
display_contrl++;
}
if(display_contrl%2==0&&t>=10)
{
OLED_ShowCHinese(0,0,0);
OLED_ShowCHinese(16,0,2);
sprintf((char*)buff,":%2dC",DHT11_Temp);
OLED_ShowString(32,0,buff,16); //显示温度
OLED_ShowCHinese(64,0,1);
OLED_ShowCHinese(82,0,2);
sprintf((char*)buff,":%2d%%",DHT11_Hum);
OLED_ShowString(96,0,buff,16);//显示湿度
OLED_ShowCHinese(0,2,3);
OLED_ShowCHinese(16,2,4);
sprintf((char*)buff,": %2dhpa",Pre);
OLED_ShowString(32,2,buff,16);//显示气压
OLED_ShowCHinese(0,4,21);
OLED_ShowCHinese(16,4,22);
// OLED_ShowCHinese(32,4,7);
// OLED_ShowCHinese(48,4,8);
adcx=Lsens_Get_Val();
sprintf((char*)buff,":%4dppm ", adcx );
OLED_ShowString(64,4,buff,16);//显示光照强度
OLED_ShowCHinese(0,6,9);
OLED_ShowCHinese(16,6,10);
OLED_ShowCHinese(32,6,11);
OLED_ShowCHinese(48,6,12);
sprintf((char*)buff,":%4dppm",MQ135_Value);
OLED_ShowString(64,6,buff,16);//显示空气质量
}else if(display_contrl%2==1&&t>=10)
{
OLED_ShowCHinese(0,0,13);
OLED_ShowCHinese(16,0,14);
OLED_ShowCHinese(32,0,15);
OLED_ShowCHinese(48,0,16);
sprintf((char*)buff,":%4dppm",MQ2_Value);
OLED_ShowString(64,0,buff,16);//显示M2数据
OLED_ShowCHinese(0,2,17);
OLED_ShowCHinese(16,2,18);
OLED_ShowCHinese(32,2,19);
OLED_ShowCHinese(48,2,20);
sprintf((char*)buff,":%4dppm",MQ7_Value);
OLED_ShowString(64,2,buff,16);//显示M7数据
OLED_ShowCHinese(0,4,21);
OLED_ShowCHinese(16,4,22);
// OLED_ShowCHinese(32,4,7);
// OLED_ShowCHinese(48,4,8);
adcx=Lsens_Get_Val();
sprintf((char*)buff,":%4dppm ", adcx );
OLED_ShowCHinese(0,6,9);
OLED_ShowCHinese(16,6,10);
OLED_ShowCHinese(32,6,11);
OLED_ShowCHinese(48,6,12);
sprintf((char*)buff,":%4dppm",MQ135_Value);
OLED_ShowString(64,6,buff,16);//显示M135数据
}
userHandle(); //用户数据采集
WIFI_Contection(key_value);//WiFi连接控制
gizwitsHandle((dataPoint_t *)¤tDataPoint);//机智云协议处理
Canshu_Change(key_value);
t++;
delay_ms(100);
}
}
void WIFI_Contection(u8 key)//WiFi连接控制
{
if(key==4)
{
printf("WIFI进入AirLink连接模式\r\n");
gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入
}
if(key==3)
{
printf("WIFI复位,请重新配置连接\r\n");
gizwitsSetMode(WIFI_RESET_MODE);//WIFI复位
}
}
void Canshu_Change(u8 key)
{
u8 obj=7;
if(key==1)
{
BEEP=0;
OLED_Clear();
while(1)
{
key = KEY_Scan(0);
if(key==1)
{
obj++;
if(obj>=8)
{
obj=0;
}
}
sprintf((char *)buff,"Working md:%4d",mode);
OLED_ShowString(8,0,buff,12);
sprintf((char *)buff,"A_Temp :%4d",A_DHT11_Temp);
OLED_ShowString(8,1,buff,12);
sprintf((char *)buff,"A_Hum :%4d",A_DHT11_Hum);
OLED_ShowString(8,2,buff,12);
sprintf((char *)buff,"A_pre :%4d",A_pre);
OLED_ShowString(8,3,buff,12);
sprintf((char *)buff,"A_gz_val :%4d",A_GZ_Value);
OLED_ShowString(8,4,buff,12);
sprintf((char *)buff,"A_m2_val :%4d",A_MQ2_Value);
OLED_ShowString(8,5,buff,12);
sprintf((char *)buff,"A_m7_val :%4d",A_MQ7_Value);
OLED_ShowString(8,6,buff,12);
sprintf((char *)buff,"A_m135_val:%4d",A_MQ135_Value);
OLED_ShowString(8,7,buff,12);
if(obj==0)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1,">",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==1)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2,">",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==2)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3,">",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==3)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4,">",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==4)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5,">",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==5)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6,">",12);
OLED_ShowString(0,7," ",12);
}
if(obj==6)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7,">",12);
}
if(obj==7)
{
OLED_ShowString(0,0,">",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==0)
{
if(key==3)
{
A_DHT11_Temp+=1;
}
if(key==4)
{
A_DHT11_Temp-=1;
}
}
if(obj==1)
{
if(key==3)
{
A_DHT11_Hum+=1;
}
if(key==4)
{
A_DHT11_Hum-=1;
}
}
if(obj==2)
{
if(key==3)
{
A_pre+=20;
}
if(key==4)
{
A_pre-=20;
}
}
if(obj==3)
{
if(key==3)
{
A_GZ_Value+=50;
}
if(key==4)
{
A_GZ_Value-=50;
}
}
if(obj==4)
{
if(key==3)
{
A_MQ2_Value+=50;
}
if(key==4)
{
A_MQ2_Value-=50;
}
}
if(obj==5)
{
if(key==3)
{
A_MQ7_Value+=50;
}
if(key==4)
{
A_MQ7_Value-=50;
}
}
if(obj==6)
{
if(key==3)
{
A_MQ135_Value+=50;
}
if(key==4)
{
A_MQ135_Value-=50;
}
}
if(obj==7)
{
if(key==3)
{
mode+=1;
}
if(key==4)
{
mode-=1;
}
if(mode >= 2) mode = 0;
}
if(key==2)
{
OLED_Clear();
break;
}
}
}
}
void Get_Data(u16 count)//获取传感器数据
{
static float bmp280_press,bmp280; //气压
DHT11_Read_Data(&DHT11_Temp,&DHT11_Hum);
bmp280GetData(&bmp280_press,&bmp280,&bmp280);
Pre = bmp280_press;
adcx = Lsens_Get_Val();
// GZ_Value = 4096 - get_Adc_Value(0x04);
MQ2_Value = get_Adc_Value(0x07);
MQ7_Value = get_Adc_Value(0x05);
MQ135_Value = 4096 - get_Adc_Value(0x06);
}
//void Mode_Change(u8 key)
//{
// if(key==2)
// {
// mode++;
// if(mode>=2) mode = 0;
// }
// if(mode==0) OLED_ShowString(0,0,"MODE:Auto",12); //HM
// if(mode==1) OLED_ShowString(0,0,"MODE:H_M_",12); //HM
//}
void BUJING_Cotrol(u8 mode,u16 time,u16 count)
{
if(mode==0)
{
while(count--)
{
BUJ1=1; BUJ2=0; BUJ3=0;BUJ4=0;
delay_ms(time);
BUJ1=0; BUJ2=1; BUJ3=0;BUJ4=0;
delay_ms(time);
BUJ1=0; BUJ2=0; BUJ3=1;BUJ4=0;
delay_ms(time);
BUJ1=0; BUJ2=0; BUJ3=0;BUJ4=1;
delay_ms(time);
}
}
if(mode==1)
{
while(count--)
{
BUJ1=0; BUJ2=0; BUJ3=0;BUJ4=1;
delay_ms(time);
BUJ1=0; BUJ2=0; BUJ3=1;BUJ4=0;
delay_ms(time);
BUJ1=0; BUJ2=1; BUJ3=0;BUJ4=0;
delay_ms(time);
BUJ1=1; BUJ2=0; BUJ3=0;BUJ4=0;
delay_ms(time);
}
}
}