极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13162|回复: 3

这个设计问题请给与解答,实在是不明白

[复制链接]
发表于 2016-3-24 18:06:09 | 显示全部楼层 |阅读模式

这个是程序的问题还是硬件的问题?

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2016-3-24 20:12:15 | 显示全部楼层
程序的问题 .第一个说明你 硬件没问题..你把你要显示的字符加上48  试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-25 14:46:15 | 显示全部楼层
nepu2015 发表于 2016-3-24 20:12
程序的问题 .第一个说明你 硬件没问题..你把你要显示的字符加上48  试试

disp[0]=0x30+(i/10);
disp[1]=0x30+((i/10)%10);
是这样搞吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-25 14:50:34 | 显示全部楼层
#include <LiquidCrystal.h> //调用Arduino自带的LiquidCrystal库
#include <dht11.h>         //调用Dht库
const int PM_LV_A = 35; //定义优质空气质量级别
const int PM_LV_B = 75; //定义良好空气质量级别
const int PM_LV_C = 115; //定义通常空气质量级别
const int PM_LV_D = 150; //定义轻度污染空气质量级别
const int PM_LV_E = 250;// 定义轻中重度污染空气质量级别//温湿度传感器库,定义PM2.5污染指数级别
//设定控制LED的数字IO脚
int ledPin1=7;
int ledPin2=8;
int ledPin3=9;
int ledPin4=10;
//颗粒物传感器接口定义
const int dustPin=A1; //设置arduino模拟信号接口A1为pm2.5传感器采集口
int dustvA1=0; //设置pm2.5传感器初始值
const int Sharp=6; //设置arduino数字信号接口2为pm2.5传感器LED发射口
int delayTime=280; //设置传感器延时
int delayTime2=40; //设置传感器延时
float offTime=9680; //设置pm2.5传感器采样时间
float pm25_vA1 = 0; //设置pm2.5传感器初始值,0.5v电压相当于每立方米0.1mg颗粒物含量:0.1mg/m3
//LCD1602液晶屏接口对arduino端口定义,采用4bit传送,数据分别从D4、D5、D6、D7传输
const int RS = 12; //-------------
const int EN = 11; //-------------
const int D4 = 5; //-------------数据分别从D4、D5、D6、D7传输
const int D5 = 4; //-------------
const int D6 = 3; //-------------
const int D7 = 2;
; //-------------
//设置LCD1602液晶接口
LiquidCrystal lcd(RS,EN, D4, D5, D6, D7);
//快速刷新模式定义
const int FAST_REFRESH_MODE=9; //定义打开/关闭快速读取(最快3秒)的引脚:支持2种模式,即快速开关模式或者平均值模式
boolean FAST_REFRESH = true; //快速刷新模式(Off)
const int AVG_COUNTS = 2; //定义平均值模式每次平均采样次数,例如定义为10,即为每30s获取一次平均值(每3秒读一次)
int pm_list[AVG_COUNTS]; //缓存数组(实际并未使用),可扩展为将历史数据记录在设备中供设备读取
int  pm_list_sum; //平均值模式的累积合计变量
int pm_avg ; //PM25平均值
//DHT11温湿度传感器
dht11 DHT11;
#define DHT11_PIN A0 //重新定义A0为获取DHT11的数据引脚(使用模拟量输入口,可以改为其它温度传感器,例如LM35)
//Arduino初始化函数setup()
void setup(){
  Serial.begin(9600); //串口通讯速率9600
pinMode(ledPin1,OUTPUT);//设定数字IO口的模式,OUTPUT 为输出
pinMode(ledPin2,OUTPUT);//设定数字IO口的模式,OUTPUT 为输出
pinMode(ledPin3,OUTPUT);//设定数字IO口的模式,OUTPUT 为输出
pinMode(Sharp,OUTPUT); //设置ledpower接都为信号输出
pinMode(10, OUTPUT); //设置arduino数字4口为输出端,此处作为10口为开时亮灯
pinMode(FAST_REFRESH_MODE,INPUT); //设置arduino数字10口为输入端
  lcd.begin(16, 2); //初始化LCD
  delay(1000); //延时1000ms
  pm_list_sum = 0; //初始化
}
//Arduino循环执行函数loop()
void loop(){
  int pm25int = 0; //设置pm2.5初始值
  //--get temperature and humdity
  if (digitalRead(FAST_REFRESH_MODE) == HIGH) //PM2.5传感器控制程序
  {
    FAST_REFRESH = true;
  }
  else
  {
    FAST_REFRESH = false;
  }
  int chk = DHT11.read(DHT11_PIN);
  switch (chk) //检测数值串口输出信息
  {
  case 0:
    Serial.print("OK,\t"); //如果数据为0,串口输出采集正常。
    break;
  case -1:
    Serial.print("Checksum error,\t"); //如果数据为-1,串口输出--错误。
    break;
  case -2:
    Serial.print("Time out error,\t"); //如果数据为0,串口输出时间溢出。
    break;
  default:
    Serial.print("Unknown error,\t"); //串口输出未知错误。
    break;
  }
  //-------------------------------------------------------------------------------
  if (!FAST_REFRESH)
  {
    pm_list_sum = 0; //---------------
    pm_avg = 0; //---------------
    for(int i=0;i<AVG_COUNTS;i++)
    {
      // ledPower is any digital pin on the arduino connected to Pin 3 on the sensor
      digitalWrite(Sharp,LOW); //接通颗粒物传感器led灯电源
      delayMicroseconds(delayTime); //延时
      dustvA1=analogRead(dustPin); //读取颗粒物传感器第五模拟口电压数值
      delayMicroseconds(delayTime2); //延时
      digitalWrite(Sharp,HIGH); //关闭颗粒物传感器led灯电源
      delayMicroseconds(offTime); //延时
      pm25_vA1 = dustvA1 * 0.83984375 - 99.9 ; //计算pm2.5采集数值
      int pm25int = dustvA1 * 0.83984375 - 99.9 ; //------------------
      if (pm25int < 0) //------------------
      {
        pm25int = 20; //给Pm2.5int变量赋初始值
      }
      pm_list_sum = pm_list_sum + pm25int; //------------------
      delay(3000); //延时3000ms
    }
    pm_avg = pm_list_sum / AVG_COUNTS; //计算pm2.5数据平均值
  }
  else
  {
    // 颗粒物传感器LED电源引脚接在arduino的第D3接口
    digitalWrite(Sharp,LOW); //接通颗粒物传感器led灯电源
    delayMicroseconds(delayTime); //延时
    dustvA1=analogRead(dustPin); //读取颗粒物传感器第五模拟口电压数值
    delayMicroseconds(delayTime2); //延时
    digitalWrite(Sharp,HIGH); //关闭颗粒物传感器led灯电源
    delayMicroseconds(offTime); //延时
    pm25_vA1 = dustvA1 * 0.83984375 - 99.9 ; //------------------
    pm25int = dustvA1 * 0.83984375 - 99.9 ; //------------------
    delay(3000); //延时3000ms
  }
  
  {
    if (!FAST_REFRESH)
    Serial.print("Tmp:"); //串口发送“Temperature:”字符
    Serial.print(DHT11.temperature); //串口发送温度数值
    Serial.print("[C]"); //串口发送“[C]”字符
    Serial.print(","); //串口发送“,”字符
    Serial.print("Hum:"); //串口发送“Humdity:”字符
    Serial.print(DHT11.humidity); //串口发送湿度数值
    Serial.print("%"); //串口发送“%”字符
    Serial.print(","); //串口发送“,”字符
    Serial.print("PM2.5:"); //串口发送“PM25:”字符
    Serial.print(pm25_vA1); //串口发送PM2.5数值
    Serial.println(pm_avg); //串口发送PM2.5平均
    Serial.println("[ug/m3]"); //串口发送“[ug/m3]”字符
    //LCD液晶显示信息
    lcd.clear(); //LCD1602液晶清屏
    lcd.setCursor(0,0); //设置LCD1602光标在第一行第一格
    lcd.print("PM2.5:"); //LCD1602输出“D=”
    lcd.print(pm_avg); //LCD1602输出PM2.5平均采样值
    lcd.print(" ug/m3"); //LCD1602输出“D=”
    //选择输出空气污染指数级别
   
    if (PM_LV_A > pm_avg) //判断采集的平均值是否小于污染A级别
      {
        lcd.print(" Fine"); //LCD1602输出优信息
        digitalWrite(ledPin1,HIGH); //设定PIN8脚为HIGH = 5V左右
        digitalWrite(ledPin2,LOW); //设定PIN8脚为LOW = 0V
        digitalWrite(ledPin3,LOW); //设定PIN8脚为LOW = 0V
      }
    else if (PM_LV_B > pm_avg) //判断采集的平均值是否小于污染D级别
     {
      lcd.print(" Good"); //LCD1602输出好信息
      digitalWrite(ledPin2,HIGH); //设定PIN8脚为HIGH = 5V左右
      digitalWrite(ledPin1,LOW); //设定PIN8脚为LOW = 0V
      digitalWrite(ledPin3,LOW); //设定PIN8脚为LOW = 0V
     }
    else if (PM_LV_C > pm_avg) //判断采集的平均值是否小于污染C级别
     {
      lcd.print(" Normal"); //LCD1602输出良信息
      digitalWrite(ledPin3,HIGH); //设定PIN8脚为HIGH = 5V左右
      digitalWrite(ledPin2,LOW); //设定PIN8脚为LOW = 0V
      digitalWrite(ledPin1,LOW); //设定PIN8脚为LOW = 0V
     }
    else if (PM_LV_D > pm_avg) //判断采集的平均值是否小于污染D级别
      {
        lcd.print(" Bad"); //LCD1602输出轻度污染信息
        digitalWrite(ledPin4,HIGH); //设定PIN8脚为HIGH = 5V左右
        delay(100); //设定延时时间,1000 = 1秒
        digitalWrite(ledPin4,LOW); //设定PIN8脚为LOW = 0V
        delay(100); //设定延时时间,1000 = 1秒
        digitalWrite(ledPin1,LOW); //设定PIN8脚为LOW = 0V
        digitalWrite(ledPin2,LOW); //设定PIN8脚为LOW = 0V
        digitalWrite(ledPin3,LOW); //设定PIN8脚为LOW = 0V

      }
    else if (PM_LV_E> pm_avg) //判断采集的平均值是否小于污染E级别
     {
       lcd.print(" Hell"); //LCD1602输出重度污染信息
       digitalWrite(ledPin4,HIGH); //设定PIN8脚为HIGH = 5V左右
       delay(100); //设定延时时间,1000 = 1秒
       digitalWrite(ledPin4,LOW); //设定PIN8脚为LOW = 0V
       delay(100); //设定延时时间,1000 = 1秒
       digitalWrite(ledPin1,LOW); //设定PIN8脚为LOW = 0V
       digitalWrite(ledPin2,LOW); //设定PIN8脚为LOW = 0V
       digitalWrite(ledPin3,LOW); //设定PIN8脚为LOW = 0V
     }      
    //LCD液晶显示信息
    lcd.setCursor(0,1); //设置光标在第二行第一格
    lcd.print("Tmp:"); //LCD1602输出“Tmp:”字符
    lcd.print(DHT11.temperature); //LCD1602输出温度值
    lcd.print("C"); //LCD1602输出“C”字符
    lcd.print(" "); //LCD1602输出“ ”字符
    lcd.print("Hum:"); //LCD1602输出“Hum:”字符
    lcd.print(DHT11.humidity); //LCD1602输出湿度值
    lcd.print("%"); //LCD1602输出“%字符
  }
}



该怎么加显示部分的48??
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 18:59 , Processed in 0.048072 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表