我在做一个神秘的东西,欢迎参与,做好了送给你

[复制链接]
13452|97
 楼主| gaoyang9992006 发表于 2015-11-2 09:11 | 显示全部楼层 |阅读模式
CD, LCD, pi, AC, IO
本帖最后由 gaoyang9992006 于 2015-12-11 14:46 编辑

这么好的内容,不仅要回复可见,而且要连载,我一步一步做,然后一楼一楼的帖。。。之所以神奇是因为百度找不到这样的例子,我逛了几家的论坛也没有找到,那个LCD如何驱动显示字符串啊,显示单个字符啊,同时读取DHT11和MQ-2了。哈哈,是不是感觉像国产凌凌漆里的达文西。。。要你命3000


  这个是基于去年参加活动送的板子:STM32F429i discovery 的板子做的。目前刚刚写了显示代码,读取DHT11,这个是温湿度传感器,下面的电压是MQ-2的。刚做个初步,希望大家回复给我个动力啊,后面我要干大事了。代码什么的,我先把这个板子研究透了,每一步我都发帖,代码在宿舍,晚上回去慢慢改,然后我上代码,谢谢,第一个图,是我刚调试好DHT11时候的情况,第二个是测MQ-2有害气体传感器时候的,这个无污染情况是0.3以下,刚开始没有开窗户,一下2.26,严重污染,其实不然,是因为电压接错了,应该接5V供电才行,这个MQ-2模块要接5V,因为内部要加热,3,3肯定不行。不过也是挺高的,当时是超过了1,我开了一晚上的窗户,空气跟外边一样了,是0.43,这说明南京的空气也是有一定污染的。



2015年,11,23更新



这次不隐藏了,感兴趣的,帮我完善功能,比如增加触摸按键。。。--------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------
今晚又画了个供电系统图,毕竟是DIY嘛,我们要画的形象好懂。


------------------------------------------------------------------
因为没有专业的容器,考虑用的是电脑CPU的风扇,我已经狠心把我台式机的CPU风扇拆了,我是不是太狠心了??
----------------------------------------------------------------------
考虑到如果没有水了或者发生烟雾了,比如电路起火了。要报警啊,来个警报器,我拆了个警报器的蜂鸣器。
---------------------------------
完善一下。
-------------------------------------------------


按键处理程序,一个按键搞定所有。靠谱吗?--------------------------------------------------
贴上我这很矬的代码
  1. #include "stm32f4xx.h"
  2. #include <stdio.h>
  3. #include "delay.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "stm32f429i_discovery_lcd.h"
  7. #include "dht11.h"
  8. #include "adc.h"

  9. RCC_ClocksTypeDef RCC_Clocks;


  10. #define LED0 PGout(13)
  11. #define LED1 PGout(14)
  12. #define BUTTON PAin(0)
  13. #define MESSAGE0   "shutdown---!"
  14. #define MESSAGE1   "wendu:  ^C"
  15. #define MESSAGE2   "shidu:   %"
  16. #define MESSAGE3   "  Working---!"
  17. #define MESSAGE4   "DHT11(GPIO-PG9)"
  18. #define MESSAGE5   "MQ-2 (GPIO-PA5)"
  19. #define MESSAGE6   "voltage:    V"
  20. #define FONTSIZE         Font12x12
  21.         
  22. Point oPoint1={10,10};
  23. unsigned char on_off=0;
  24. //        PG13、PG14分别对应绿、红LED?

  25. void LED_Init(void)
  26. {

  27. GPIO_InitTypeDef  GPIO_InitStructure;
  28.          
  29. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG , ENABLE);        
  30.         
  31. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14;                                
  32. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                 
  33. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;               
  34. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  35. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  36. GPIO_Init(GPIOG, &GPIO_InitStructure);                                         
  37.         
  38. GPIO_ResetBits(GPIOG,GPIO_Pin_13);                                                
  39. GPIO_ResetBits(GPIOG,GPIO_Pin_14);        
  40. }





  41. static void Display_Init(void)
  42. {
  43.   /* Initialize the LCD */
  44.   LCD_Init();
  45.   LCD_LayerInit();
  46.   /* Enable the LTDC */
  47.   LTDC_Cmd(ENABLE);
  48.   /* Set LCD Background Layer  */
  49.   LCD_SetLayer(LCD_BACKGROUND_LAYER);
  50.   /* Clear the Background Layer */
  51.   LCD_Clear(LCD_COLOR_WHITE);  
  52.   /* Configure the transparency for background */
  53.   LCD_SetTransparency(255);

  54.   // Set LCD Foreground Layer
  55.         
  56.   LCD_SetLayer(LCD_FOREGROUND_LAYER);
  57.   //Configure the transparency for foreground
  58.   LCD_SetTransparency(127);  
  59. // Clear the Foreground Layer
  60. // LCD_Clear(LCD_COLOR_WHITE);
  61.         LCD_Clear(LCD_COLOR_BLACK);
  62. /*

  63. //  Set the LCD Text size */
  64.   LCD_SetColors(LCD_COLOR_WHITE,LCD_COLOR_BLACK);
  65.   LCD_SetFont(&Font16x24);

  66.         

  67. }

  68. //按键程序,开机后默认红绿灯不亮,红绿灯分别对应风扇和雾化器。当按下后就翻转状态。
  69. void Button(void)
  70. {
  71. if(BUTTON) {on_off=~on_off;while(BUTTON);}         //按下后翻转标志变量,之后等待松手信号。
  72.         
  73.         if(on_off)   {LED0=1;LED1=1;                LCD_DisplayStringLine(LCD_LINE_1, (uint8_t*)MESSAGE3); } //开机
  74.         else         {LED0=0;LED1=0;          LCD_DisplayStringLine(LCD_LINE_1, (uint8_t*)MESSAGE0);}  //关机

  75. }
  76. int main(void)
  77. {
  78. int wendu_x=0;
  79. int shidu_x=0;
  80. u16 adcx,adcx_temp;        
  81. u8 temperature;              
  82. u8 humidity;  

  83. delay_init();
  84. LED_Init();
  85. Display_Init();
  86. Adc_Init();
  87. DHT11_Init();


  88. while (1)
  89.   {


  90.   {

  91.                 LCD_DisplayStringLine(LCD_LINE_3, (uint8_t*)MESSAGE4);         
  92.     LCD_DisplayStringLine(LCD_LINE_7, (uint8_t*)MESSAGE5);
  93.                 DHT11_Read_Data(&temperature,&humidity);        
  94.           wendu_x=temperature;
  95.           shidu_x=humidity;


  96.   LCD_DisplayStringLine(LCD_LINE_4, (uint8_t*)MESSAGE1);
  97.   LCD_DisplayStringLine(LCD_LINE_5, (uint8_t*)MESSAGE2);                        
  98.                   LCD_DisplayChar(LCD_LINE_4, 16*6, '0'+wendu_x/10);
  99.                         LCD_DisplayChar(LCD_LINE_4, 16*7, '0'+wendu_x%10);
  100.                   LCD_DisplayChar(LCD_LINE_5, 16*6, '0'+shidu_x/10);
  101.                         LCD_DisplayChar(LCD_LINE_5, 16*7, '0'+shidu_x%10);

  102.         }        

  103.         adcx=Get_Adc_Average(ADC_Channel_5,20);
  104.   adcx=(float)adcx*(3.3*1000/4096);
  105.   
  106. if(((adcx)%10)>=5) adcx=adcx+10;                   //四舍五入到百分位
  107.   adcx=adcx/10;                                    //变换为三位数整数
  108.         adcx_temp=adcx;
  109.         
  110.   LCD_DisplayStringLine(LCD_LINE_8, (uint8_t*)MESSAGE6);
  111.         LCD_DisplayChar(LCD_LINE_8, 16*8, '0'+adcx_temp/100);           //显示个位
  112.         LCD_DisplayChar(LCD_LINE_8, 16*9, '.');
  113.         adcx_temp%=100;
  114.         LCD_DisplayChar(LCD_LINE_8, 16*10, '0'+adcx_temp/10);         //显示十分位        
  115.   LCD_DisplayChar(LCD_LINE_8, 16*11, '0'+adcx_temp%10); // 显示百分位

  116.         Button();
  117. /*                LED0=1;                                                
  118.                 LED1=0;
  119.                 delay_ms(500);
  120.                 LED0=0;                                                
  121.                 LED1=1;
  122.                 delay_ms(500);
  123.                 */
  124.   }
  125. }



  126. #ifdef  USE_FULL_ASSERT


  127. void assert_failed(uint8_t* file, uint32_t line)
  128. {

  129.   while (1)
  130.   {
  131.   }
  132. }
  133. #endif

//按键程序,开机后默认红绿灯不亮,红绿灯分别对应风扇和雾化器。当按下后就翻转状态。
void Button(void)
{
if(BUTTON) {on_off=~on_off;while(BUTTON);}         //按下后翻转标志变量,之后等待松手信号。
        
        if(on_off)   {LED0=1;LED1=1;                LCD_DisplayStringLine(LCD_LINE_1, (uint8_t*)MESSAGE3); } //开机
        else         {LED0=0;LED1=0;          LCD_DisplayStringLine(LCD_LINE_1, (uint8_t*)MESSAGE0);}  //关机

}我来说说我这个执行代码,人家按键都搞神马中断了,延时防抖了,我为何不搞,我的不靠谱吗?非也非也。
首先我没有对BUTTON进行初始化,这就错了吗?非也非也,实际上好多IO口默认就是IO口,默认就是准双向。所以我使用这个输入功能是不需要初始化可以直接使用的。
我先判断是否为1,也就是是否触发,如果触发进入函数段,翻转开关标志,接下来人家有的人估计会判断是不是抖动啊,我想说,抖动个毛线啊,我直接while锁死该变量,直到你释放按键,释放后,你抖动就不管我的事情了,我已经进入后面的程序了,等你抖动完了,我还在后面执行别的程序呢。哈哈哈,是不是?

差不多做好了,觉得报警多余就没有上,因为我这水箱很大的。全部用跳线连接到那个STM32F429i discovery上。





专门去超市买的水箱。。然后用电烙铁和刀子挖了个洞







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
dirtwillfly 发表于 2015-11-2 09:12 | 显示全部楼层
通宵敲代码 发表于 2015-11-2 09:17 | 显示全部楼层
:L还回复可见!
lvyunhua 发表于 2015-11-2 09:18 | 显示全部楼层
:lol,过来凑热闹。
cooran 发表于 2015-11-2 09:50 | 显示全部楼层
真的这么神?
雨落沉轩 发表于 2015-11-2 09:55 | 显示全部楼层
没事,瞅瞅
00750 发表于 2015-11-2 10:30 | 显示全部楼层
楼主搞的这么神密
fzy_666 发表于 2015-11-2 12:32 | 显示全部楼层
lyf08 发表于 2015-11-2 12:36 | 显示全部楼层
看看什么东西
天高任鸟飞 发表于 2015-11-2 13:24 | 显示全部楼层
天高任鸟飞 发表于 2015-11-2 13:28 | 显示全部楼层
楼主的
XC456 发表于 2015-11-2 15:06 | 显示全部楼层
:loveliness:
XC456 发表于 2015-11-2 15:08 | 显示全部楼层
回复了也没看见,隐藏的深啊
aaa制 发表于 2015-11-2 15:56 | 显示全部楼层
 楼主| gaoyang9992006 发表于 2015-11-2 16:21 | 显示全部楼层
XC456 发表于 2015-11-2 15:08
回复了也没看见,隐藏的深啊

系统出了故障,我源码和过程没有上传呢,今晚更新,到时候更新后,通知你。
 楼主| gaoyang9992006 发表于 2015-11-2 16:21 | 显示全部楼层

:lol这个符号不在标准的字码里面
明眸 发表于 2015-11-2 16:27 | 显示全部楼层
111111111111111111111111111111
silong1123 发表于 2015-11-2 16:29 | 显示全部楼层
什么东东,没看懂
 楼主| gaoyang9992006 发表于 2015-11-2 16:31 | 显示全部楼层

图片是不是挂了,我这显示挂了,我上传了两次了。
ningling_21 发表于 2015-11-2 16:34 | 显示全部楼层
不会是两个相同的图片吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2049

主题

16376

帖子

221

粉丝
快速回复 在线客服 返回列表 返回顶部