#include <TM1637Display.h>
#include <TM1637.h>
#define CLK 3//pins definitions for TM1637 and can be changed to other ports
#define DIO 2
TM1637 tm1637(CLK, DIO);
int dustPin = 0; // 夏普灰尘传感器黑色线,传感器输出到nano 的A0 端
float dustVal = 0; // 灰尘传感器输出到nano 的电压值,与灰尘浓度成函数关系,
int ledPower = 2;
// 夏普灰尘传感器绿色线, nano 的D2 输出作为夏普灰尘传感器激光头电源,激光头发
// 射激光遇到灰尘散射,散射越厉害,灰尘传感器向外输出电压越高
int delayTime = 280;
int delayTime2 = 40;
float offTime = 9680;
void setup (void)
{
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);
Serial.begin(9600); // 串口初始化,电脑可以和nano 交互
pinMode(ledPower, OUTPUT); // A0 give 传感器5 号
pinMode(dustPin, INPUT); // Digital pin 2 give 传感器3 号
}
void loop (void)
{
digitalWrite(ledPower, LOW);
delayMicroseconds(delayTime);
dustVal = analogRead(dustPin);// 读取灰尘传感器的模拟电压输出到nano 的A0 端
delayMicroseconds(delayTime2);
digitalWrite(ledPower, HIGH);
delayMicroseconds(offTime);
delay(1000);
// Serial.println(dustVal);// 电脑作为显示设备看输出的电压,数值越高灰尘越多
dustVal = dustVal * (5.0 / 1023);
// 电压换算 ,Arduino A0-A5 口为ADC引脚,其分辨率为10 位,也就是
//1024 级,输出数值为0-1023,默认以输入电压5V 作为基准电压。
dustVal = 0.17 * dustVal - 0.1;// 电压值转换为灰尘浓度线性函数关系
dustVal=dustVal*1000;//mg 和ug 的换算
Serial.println(dustVal);// 串口通信写
int num = dustVal;
// 4位数显示
tm1637.display(0, num / 1000);
tm1637.display(1, (num % 1000) / 100);
tm1637.display(2, (num % 100) / 10);
tm1637.display(3, num % 10);
delay(500);
} |