wwwyyy317 发表于 2017-4-8 20:05:43

LCD12864 翻页显示求助

arduino mega 2560+攀藤 G1(pm2.5传感器)+DHT22+LCD12864

目前可以通过LCD实现单页显示(仅显示中标的pm2.5以及DHT22的温湿度),由于G1可传感数据比较多(中标,美标以及颗粒物数),想通过两个按键来实现LCD上下翻页来实现所有数据的显示。求代码或相关例程!

感谢万分!!!

wwwyyy317 发表于 2017-4-8 20:06:09

自己顶一个,别沉了!

jasonwang1208 发表于 2017-4-8 21:11:08

像這樣嗎?還在測試中,做得不是很好.

wwwyyy317 发表于 2017-4-10 13:44:56

能否看一下代码,学习学习!

wwwyyy317 发表于 2017-4-10 13:45:43

jasonwang1208 发表于 2017-4-8 21:11
像這樣嗎?還在測試中,做得不是很好.

能否看一下代码,学习学习!

jasonwang1208 发表于 2017-4-10 14:07:10

wwwyyy317 发表于 2017-4-10 13:45
能否看一下代码,学习学习!

我的代碼很亂沒整理.


******************************************************************************/

#include <SD.h>
const int chipSelect = 4;
int w=0;
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
String thisMonth = "";
String thisTime = "";
String thisDay="";
#include <dht.h>
#define dht_dpin 3
dht DHT;   
#include "U8glib.h"
#include <SPI.h>
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
#define DUSTpin A0
#define DUSTLEDpin 2
const int delayTime=280;
const int delayTime2=40;
const float offTime=9680;
double dustVal=0;
int count = 0;
int led = 5;
void setup(void) {
pinMode(led, OUTPUT);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    RTC.adjust(DateTime(__DATE__, __TIME__));
}
Serial.begin(9600);
Serial.print("Initializing SD card...");
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)) {
   Serial.println("Card failed, or not present");
   return;
}
}

void loop(void) {

u8g.firstPage();
do {
   draw();
   delay(500);
    }
while( u8g.nextPage() );

int dustLevel = readPM();
double dustVolt = dustLevel*(5.0 / 1024.0);
dustVal = 0.172 * dustVolt - 0.00;
dustVal =dustVal*1000.0 ; //mg to ug
u8g.drawStr(100,47,"0");
}

int readPM(void){
digitalWrite(DUSTLEDpin,LOW);
delayMicroseconds(delayTime);
int Val = analogRead(DUSTpin);
delayMicroseconds(delayTime2);
digitalWrite(DUSTLEDpin,HIGH);
delayMicroseconds(offTime);
return Val;
}

void draw(void) {
digitalWrite(led, LOW);
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (SD.exists("datalog.txt")){
Serial.println("datalog.txt exists.");
if (dataFile) {
u8g.setFontPosTop();
u8g.setFont(u8g_font_profont15);
DateTime now = RTC.now();
thisMonth="";
thisDay= String(now.month(), DEC) + "/";
thisDay=thisDay + String(now.day(), DEC) + "/";
thisDay=thisDay + String(now.year() , DEC);
const char* newDay = (const char*) thisDay.c_str();
u8g.setPrintPos(1,14);
u8g.print(newDay);
thisTime="";
thisTime=String(now.hour()) + ":";
if (now.minute() < 10){ thisTime=thisTime + "0";}
thisTime=thisTime + String(now.minute()) + ":";
thisTime=thisTime + String(now.second());
const char* newTime = (const char*) thisTime.c_str();
u8g.setPrintPos(1,25);
u8g.print(newTime);
int chk = DHT.read11(dht_dpin);
int humi = DHT.humidity+35;
String thishumi1 = String(humi);
const char* thishumi = (const char*) thishumi1.c_str();
u8g.setPrintPos(1,36);
u8g.print(thishumi);
u8g.setPrintPos(15,36);
u8g.print("%/");
int temp = DHT.temperature-2;
String thisTemp1 = String(temp) ;
const char* thisTemp = (const char*) thisTemp1.c_str();
u8g.setPrintPos(30,36);
u8g.print(thisTemp);
u8g.setPrintPos(45,36);
u8g.print("\260C");
u8g.setPrintPos(0,47);
u8g.print(dustVal);
u8g.setPrintPos(50,47);
u8g.print("ug/m3");
if (now.second()==59){
    digitalWrite(led, HIGH);
    dataFile.print(newDay);
    dataFile.print(",");
    dataFile.print(newTime);
    dataFile.print(",");
    dataFile.print(thishumi);
    dataFile.print(",");
    dataFile.print(thisTemp);
    dataFile.print(",");
    dataFile.print(dustVal);
    dataFile.println(",");
    delay(500);
    digitalWrite(led, LOW);
}
       
    dataFile.close();
   
} else {
        digitalWrite(led, HIGH);   
    Serial.println("error opening datalog.txt");
}

}else {
    Serial.println("datalog.txt doesn't exist.");
digitalWrite(led, HIGH);
}

}



wwwyyy317 发表于 2017-4-10 15:41:38

jasonwang1208 发表于 2017-4-10 14:07
我的代碼很亂沒整理.

谢了!你的pm2.5传感器是哪一款?

jasonwang1208 发表于 2017-4-11 09:39:02

wwwyyy317 发表于 2017-4-10 15:41
谢了!你的pm2.5传感器是哪一款?

GP2Y1010AU0F
页: [1]
查看完整版本: LCD12864 翻页显示求助