查看: 5809|回复: 18

双呆的无聊之作——电子温度计

[复制链接]
  • TA的每日心情
    无聊
    2017-1-24 10:00
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2013-1-1 00:00 | 显示全部楼层 |阅读模式
    本帖最后由 槑小子 于 2013-1-1 00:09 编辑

    这几天是学校冷家里热,大冬天热一点当然好,但是宿舍冷着实受不了呀。于是乎,想做一个电子温度计,看看宿舍到底有多少度。

    很多人肯定会说,直接带个水银温度计不就好了么。可是,谁叫我无聊了呢。就是想做一个电子温度计。我觉得这样度数方便,晚上可以有背光。这样该有多好呀。(直接说是想到学校也玩Arduino好啦)

    于是乎,我就翻了翻我那不多的家当。找到了如下的材料。

    Zduino UNO(Arduino UNO以及他的兼容板都可以的啦,其实什么2560呀1280呀都是大同小异,有的很多都不用改代码)
    电子温度模块(我在这里用的是DHT11,可以量温度和湿度,要是直接用热敏或者别的什么的,稍微改改代码就好)
    然后就是12864LCD模块(OJ的不带字库,搞死我了,挨个取得模 %>_<%)
    然后我还是吃饱了撑的加了个扩展板,为的是接线方便。其实不用也完全无所谓╮(╯_╰)╭

    然后先来上图



    其实接线什么的都好弄得,每个人的接法习惯都不一样。但是要说明的一点,这里的DHT11接的是数字2好口。因为程序里定义的是2好口。LCD接的是ISP接法。什么的。。。。。。

    然后就是程序了,没有什么厉害的,无非就是把各种示例加到了一块而已。。

    上程序

    kittenblock中小学创客名师推荐的图形化编程软件

    #include <SPI.h>
    #include <Lcd12864.h>
    #include <dht11.h>
    
    #define DHT11PIN 2
    
    unsigned char  char_CEC2[32] ={                        //温
      0x10,0x22,0x64,0x0C,0x80,0x00,0xFE,0x92,
      0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,
      0x04,0x04,0xFE,0x01,0x40,0x7E,0x42,0x42,
      0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00
    };
    
    unsigned char  char_B6C8[32] ={                                //度
      0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5,
      0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00,
      0x40,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A,
      0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00
    };
    
    unsigned char  char_CAAA[32] ={                                        //湿
      0x10,0x22,0x64,0x0C,0x80,0xFE,0x92,0x92,
      0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,
      0x04,0x04,0xFE,0x41,0x44,0x48,0x50,0x7F,
      0x40,0x40,0x7F,0x50,0x48,0x64,0x40,0x00
    };
    
    unsigned char  char_A3BA[32] ={                        //:
      0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x31,0x7B,0x7B,0x31,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A3AE[32] ={                        //.
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x30,0x78,0x78,0x30,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A1E6[32] ={                        //℃
      0x00,0x06,0x09,0x09,0xE6,0xF0,0x18,0x08,
      0x08,0x08,0x18,0x30,0x78,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x07,0x0F,0x18,0x30,
      0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00
    };
    
    unsigned char  char_A3B1[32] ={                                //1
      0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xF8,
      0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,
      0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A3B2[32] ={                                //2
      0x00,0x00,0x00,0x00,0x30,0x38,0x0C,0x04,
      0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x20,0x30,0x38,0x2C,
      0x26,0x23,0x21,0x38,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A3B3[32] ={                                //3
      0x00,0x00,0x00,0x00,0x10,0x18,0x0C,0x84,
      0x84,0xCC,0x78,0x30,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x08,0x18,0x30,0x20,
      0x20,0x31,0x1F,0x0E,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A3B4[32] ={                        //4
      0x00,0x00,0x00,0x00,0x80,0xC0,0x70,0x18,
      0xFC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x06,0x07,0x05,0x04,0x24,
      0x3F,0x3F,0x24,0x04,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A3B5[32] ={                                //5
      0x00,0x00,0x00,0x00,0xFC,0xFC,0xC4,0x44,
      0x44,0xC4,0x84,0x04,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x08,0x18,0x30,0x20,
      0x20,0x30,0x1F,0x0F,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A3B6[32] ={                                //6
      0x00,0x00,0x00,0x00,0xF0,0xF8,0x8C,0x44,
      0x44,0xCC,0x98,0x10,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x0F,0x1F,0x30,0x20,
      0x20,0x30,0x1F,0x0F,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A3B7[32] ={                                //7
      0x00,0x00,0x00,0x00,0x1C,0x0C,0x0C,0x0C,
      0xCC,0xEC,0x3C,0x1C,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,
      0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A3B8[32] ={                        //8
      0x00,0x00,0x00,0x00,0x30,0x78,0xCC,0x84,
      0x84,0xCC,0x78,0x30,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x0E,0x1F,0x31,0x20,
      0x20,0x31,0x1F,0x0E,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A3B9[32] ={                                //9
      0x00,0x00,0x00,0x00,0xF0,0xF8,0x0C,0x04,
      0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x08,0x19,0x33,0x22,
      0x22,0x33,0x1F,0x0F,0x00,0x00,0x00,0x00
    };
    
    unsigned char  char_A3B0[32] ={                                //0
      0x00,0x00,0x00,0x00,0xF0,0xF8,0x0C,0x04,
      0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x0F,0x1F,0x30,0x20,
      0x20,0x20,0x30,0x1F,0x0F,0x00,0x00,0x00
    };
    
    unsigned char char_A3A5[32]={              //%
      0x00,0x00,0x00,0x18,0x24,0x24,0x18,0x00,
      0x80,0x40,0x20,0x10,0x08,0x04,0x00,0x00,
      0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,
      0x00,0x00,0x0C,0x12,0x12,0x0C,0x00,0x00
    };
    
    unsigned char  bmp[1024] ={
    };
    
    lcd12864 lcd;
    dht11 DHT11;
    
    void setup(){
      lcd.LcmInit();
      //Serial.begin(9600);
    
      echochar(1,1,char_CEC2);
      echochar(1,2,char_B6C8);
      echochar(1,3,char_A3BA);
      echochar(1,6,char_A3AE);
      echochar(1,8,char_A1E6);
      echochar(2,1,char_CAAA);
      echochar(2,2,char_B6C8);
      echochar(2,3,char_A3BA);
      echochar(2,6,char_A3AE);
      echochar(2,8,char_A3A5);
    }
    
    void loop(){
      echodata(1,DHT11.temperature);
      echodata(2,DHT11.humidity);
    
      /*
      int chk = DHT11.read(DHT11PIN);
    
      Serial.print("Read sensor: ");
      switch (chk)
      {
      case DHTLIB_OK: 
        Serial.println("OK"); 
        break;
      case DHTLIB_ERROR_CHECKSUM: 
        Serial.println("Checksum error"); 
        break;
      case DHTLIB_ERROR_TIMEOUT: 
        Serial.println("Time out error"); 
        break;
      default: 
        Serial.println("Unknown error"); 
        break;
      }
      
      Serial.print("Humidity (%): ");
      Serial.println((float)DHT11.humidity, 2);
    
      Serial.print("Temperature (oC): ");
      Serial.println((float)DHT11.temperature, 2);
    
    */
    
      delay(1000);
    }
    
    void echochar(int y, int x,unsigned char *charin){
    
      if(x<9 && x>0 &&  y<5  &&  y>0){
        int beg = 16*x+256*y-272;
        for(int i = 0; i < 16; i++){
          bmp[beg+i] = charin;
          bmp[beg+128+i] = charin[i+16];
        }
        lcd.PUTBMP(bmp);
      }
    }
    
    
    
    void echodata(int y, double i){
      if(i < 0.0)
        i = 0.0;
      if(i > 99.9)
        i = 99.9;
        
      int st = (int)(i/10.0);
      int nd = (int)((i-st*10));
      int ls = (int)((i-st*10-nd)*10);
    
      if(y < 5  &&  y>0){
        switch(st){
        case 1:
          echochar(y,4,char_A3B1);
          break;
        case 2:
          echochar(y,4,char_A3B2);
          break;
        case 3:
          echochar(y,4,char_A3B3);
          break;
        case 4:
          echochar(y,4,char_A3B4);
          break;
        case 5:
          echochar(y,4,char_A3B5);
          break;
        case 6:
          echochar(y,4,char_A3B6);
          break;
        case 7:
          echochar(y,4,char_A3B7);
          break;
        case 8:
          echochar(y,4,char_A3B8);
          break;
        case 9:
          echochar(y,4,char_A3B9);
          break;
        case 0:
          echochar(y,4,char_A3B0);
          break;
        }
        switch(nd){
        case 1:
          echochar(y,5,char_A3B1);
          break;
        case 2:
          echochar(y,5,char_A3B2);
          break;
        case 3:
          echochar(y,5,char_A3B3);
          break;
        case 4:
          echochar(y,5,char_A3B4);
          break;
        case 5:
          echochar(y,5,char_A3B5);
          break;
        case 6:
          echochar(y,5,char_A3B6);
          break;
        case 7:
          echochar(y,5,char_A3B7);
          break;
        case 8:
          echochar(y,5,char_A3B8);
          break;
        case 9:
          echochar(y,5,char_A3B9);
          break;
        case 0:
          echochar(y,5,char_A3B0);
          break;
        }
    
        switch(ls){
        case 1:
          echochar(y,7,char_A3B1);
          break;
        case 2:
          echochar(y,7,char_A3B2);
          break;
        case 3:
          echochar(y,7,char_A3B3);
          break;
        case 4:
          echochar(y,7,char_A3B4);
          break;
        case 5:
          echochar(y,7,char_A3B5);
          break;
        case 6:
          echochar(y,7,char_A3B6);
          break;
        case 7:
          echochar(y,7,char_A3B7);
          break;
        case 8:
          echochar(y,7,char_A3B8);
          break;
        case 9:
          echochar(y,7,char_A3B9);
          break;
        case 0:
          echochar(y,7,char_A3B0);
          break;
        }
      }
    }




    (貌似直接弄成程序模式会丢东西,格式也会变得奇奇怪怪,主要是因为有""这么个东西,系统就认为他是引用的东西了%>_<%)


    然后就上电试试吧。

    程序前面都是各种需要的字模。然后开辟了一个1024的显存。程序初始化的时候建立了lcd对象。串口是我测试时候用的。现在注释掉了,不会再编译的时候占地方。之后就是显示一些固定不变的内容(省的loop的时候一遍一遍刷,太慢了)。

    loop里面是我自己编的函数,这个函数的功能就是把一个双浮点精度的数据显示在指定的行上面(为了配合小数点,我做了特殊的处理——空开一行)设定的是只显示小数点前两位和后一位。并且只显示0~99.9

    【主要是因为负数我还没有弄好】

    然后就是一个吧字模显示出来的函数

    海参的库里没有显示字模用的函数,所以只能自己来。

    然后就是最笨的通过数字调用字模。。。。。。就是轮询法我觉得。。。。。。。

    好了。。。没什么神奇的了。。。就是这么简单了。。。。我就是新手。。。。所以做得很白痴

    然后

    下一步的打算就是加入自动检测最低值和最高值并记录到EEPROM里面。。。。。。

    嗯。。。明天再奋斗
    IMG_2154.JPG

    评分

    参与人数 2金币 +9 贡献 +1 收起 理由
    coloz + 9 赞一个!
    奈何col + 1

    查看全部评分

  • TA的每日心情
    奋斗
    2019-7-12 18:42
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2013-1-1 00:21 | 显示全部楼层
    2013年第一帖
  • TA的每日心情
    无聊
    2017-1-24 10:00
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2013-1-1 00:40 来自手机 | 显示全部楼层
    谢谢奈何~~~来自: iPhone客户端
  • TA的每日心情
    开心
    2016-11-3 13:00
  • 签到天数: 52 天

    [LV.5]常住居民I

    发表于 2013-1-1 09:52 | 显示全部楼层
    全部都是switch...........
  • TA的每日心情
    无聊
    2017-1-24 10:00
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2013-1-1 10:31 | 显示全部楼层
    PPeach 发表于 2013-1-1 09:52
    全部都是switch...........

    不然呢。。。。。。。桃枝有什么好办法么。。。。%>_<%

    该用户从未签到

    发表于 2013-1-1 13:34 | 显示全部楼层
    我买的板子还没有到,等到了试试看

    该用户从未签到

    发表于 2013-1-3 01:10 | 显示全部楼层
    8错。支持一个

    该用户从未签到

    发表于 2013-1-3 14:48 | 显示全部楼层
    顶一下 哈哈
  • TA的每日心情
    无聊
    2017-1-24 10:00
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2013-1-8 21:32 | 显示全部楼层
    myvioletchen 发表于 2013-1-3 14:48
    顶一下 哈哈

    谢谢啦~~~
  • TA的每日心情
    无聊
    2017-1-24 10:00
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2013-1-8 21:37 | 显示全部楼层
    holleW 发表于 2013-1-3 01:10
    8错。支持一个

    谢谢啦~~~
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    为拍月亮而生的便携望远镜系统。
    为拍月亮而生的便携望远镜
    参赛项目: 便携望远镜系统 参赛组员: 1人 布丁:嵌入式软件、上位机软件、电路、结
    基于机器视觉的智能分拣机械臂
    基于机器视觉的智能分拣机
    本作品是一个基于机器视觉的智能机械臂操作平台,其采用atmega32单片机作为主控制系统
    小白求助
    小白求助
    也许我这个问题也许看起来有些幼稚。。。 还在入门的路上打滚,在看《爱上Arduino》这
    SpiderRobot 蜘蛛
    SpiderRobot 蜘蛛
    关于SpiderRobot 项目实行方案 之前有人推荐我做这个项目,于是乎就有了这个 h
    没有合适的模块,想到自己焊接芯片
    没有合适的模块,想到自己
    有些模块没有加工过的模块销售,想着自己要是能把芯片焊在一起也是一样的。只是这个尺
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表