- unsigned long zhongduan1=6000;
- #include <LiquidCrystal.h>
- #include <SD.h>
- // CS引脚为pin4,这里也沿用官方默认设置
- const int chipSelect = 4; //设定CS接口
- int GP2D12 = 0;//把夏普GP2D12红外测距传感器连接在模拟量端口0
- int val; //存储从GP2D12红外测距传感器读到的值
- float temp;//存储由传感器读取值,通过算式处理后的浮点型距离值
- int distance;//存储由传感器读取值,通过算式处理后的整数型距离值
- float dataString;
- LiquidCrystal lcd(10,6,5,7,3,2);//构造一个LiquidCrystal的类成员。使用数字IO ,12,11,5,4,3,2
- void setup()
- {
- lcd.begin(16,2);//初始化LCD1602
- lcd.setCursor(4, 0);
- lcd.print("YANG WEN QI ");//液晶显示
- lcd.setCursor(3, 1);
- lcd.print("IS SO COOl");
- delay(5000); //延时5000ms
- lcd.clear(); //液晶清屏
- Serial.begin(9600); //设置串口通信波特率为9600
- Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card...
- if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present
- Serial.println("Card failed, or not present");
- return;
- }
- Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized.
- }
- void loop()
- {
- unsigned long nowtime=millis(); //获取当前的系统运行时间长度
- if(nowtime>zhongduan1) //检测系统运行时间长度
- {
- // 读取1个传感器值,写入数组
- for (int GP2D12 = 0; GP2D12 < 1; GP2D12++) {
- int sensor = analogRead(GP2D12);
- dataString = 2547.8/((float)val*0.49-10.41)-0.42;
- }
- // 打开文件,注意在同一时间只能有一个文件被打开
- // 如果你要打开另一个文件,就需要先关闭前一个
- File dataFile = SD.open("datalog.txt", FILE_WRITE);
- // 打开datalog.txt文件,读写状态,位置在文件末尾。
- if (dataFile)
- {
- dataFile.println(dataString);
- dataFile.close();
- // 数组dataString输出到串口
- Serial.println(dataString);
- }
- // 如果无法打开文件,串口输出错误信息error opening datalog.txt
- else {
- Serial.println("error opening datalog.txt");
- }
- zhongduan1=nowtime+60000;
- }
- lcd.clear();
- //读取GP2D12红外测距传感器模拟量数据
- val = analogRead(GP2D12);
- //通过以下算式,把传感器读取值处理成浮点型距离值
- temp=2547.8/((float)val*0.49-10.41)-0.42;
- //lcd.clear();//LCD清屏
- // 定位光标在LCD第0行、第0列
- //lcd.setCursor(0, 0);
- //在LCD第0行第0列开始显示"Distance:"
- // lcd.print("Distance:");
- // 定位光标在LCD第1行、第7列
- //lcd.setCursor(7, 1);
- //如果传感器读取值大于80或者小于10,
- // if(temp>80||temp<10)
- // {
- //则在LCD第1行、第7列开始显示"OverRange"
- // lcd.print("OverRange");
- // }
- //如果传感器读取值在10到80之间,
- //else
- // {
- //把浮点型距离值取整
- //distance=temp;
- //则在LCD第1行、第7列开始显示距离值
- // lcd.print(distance);
- //在距离值后显示单位"cm"
- //lcd.print("cm");
- lcd.setCursor(0, 0);
- //在LCD第0行第0列开始显示"Distance:"
- lcd.print(dataString);
- // 定位光标在LCD第1行、第7列
- lcd.setCursor(7, 1);
- //则在LCD第1行、第7列开始显示距离值
- lcd.print(temp);
- //在距离值后显示单位"cm"
- lcd.print("cm");
- delay(1000);
- }
复制代码
|