From ed47b8eeaa45688760861d5664873314cc0e19d2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 5 Aug 2019 22:29:05 -0400 Subject: [PATCH] OK test for ppd and mega and tft --- .../text_entry_lcd_test_mega2ino.ino | 43 ++++-- .../text_entry_lcd_test_mega3.ino | 130 ++++++++++++++++++ 2 files changed, 162 insertions(+), 11 deletions(-) create mode 100644 Air_Quality_Sensor_PPD42/code/text_entry_lcd_test_mega3/text_entry_lcd_test_mega3.ino diff --git a/Air_Quality_Sensor_PPD42/code/text_entry_lcd_test_mega2ino/text_entry_lcd_test_mega2ino.ino b/Air_Quality_Sensor_PPD42/code/text_entry_lcd_test_mega2ino/text_entry_lcd_test_mega2ino.ino index 971c2ec..3a0b83b 100644 --- a/Air_Quality_Sensor_PPD42/code/text_entry_lcd_test_mega2ino/text_entry_lcd_test_mega2ino.ino +++ b/Air_Quality_Sensor_PPD42/code/text_entry_lcd_test_mega2ino/text_entry_lcd_test_mega2ino.ino @@ -16,14 +16,15 @@ MCUFRIEND_kbv tft; #include -int DustSensePin = 13; +int DustSensePin = 31; //globals for ppd42 dust sensor -//let's start with 100 readings. (copy and paste) -unsigned int airreading[100] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + +//unsigned int airreading[100] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; unsigned long starttime = 0; -unsigned long sampletime_ms = 60000;//sample 60s == 60000 ; +unsigned long sampletime_ms = 10000;//sample 60s == 60000 ; unsigned long lowpulseoccupancy = 0; +unsigned long duration = 0; float ratio = 0; float concentration = 0; unsigned int x = 0; @@ -38,6 +39,9 @@ int brightnessread = 0; int cat = 0; int resultsread1 = 0; +int screenreadyforprint = 0; +double count = 0; + void setup(void) { Serial.begin(9600); @@ -59,32 +63,49 @@ void loop(void) - + if(screenreadyforprint == 0){ tft.fillScreen(BLACK); tft.WriteCmdData(0x51, 0x0000); tft.setTextColor(0XFFFF); tft.setTextSize(2); tft.setCursor(0, 36); - tft.println("running sensor now"); + tft.println("Starting Sensor"); + screenreadyforprint = 1; + } + + duration = pulseIn(DustSensePin, LOW, 500000); - airreading[x] = pulseIn(DustSensePin, LOW, 500000); - tft.println("Results are in:"); + lowpulseoccupancy = lowpulseoccupancy + duration; + //tft.println(airreading) - if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s - { + if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s + { + tft.fillScreen(BLACK); + tft.WriteCmdData(0x51, 0x0000); + tft.setTextColor(0XFFFF); + tft.setTextSize(2); + tft.setCursor(0, 36); + ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve + tft.print("Count: "); + tft.println(count); tft.println(lowpulseoccupancy); //tft.print(","); tft.println(ratio); - //Serial.print(","); + //tft.print(","); + tft.print("Concentration is: "); tft.println(concentration); lowpulseoccupancy = 0; starttime = millis(); + //tft.println("Results printed."); + count++; + } + } void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg) diff --git a/Air_Quality_Sensor_PPD42/code/text_entry_lcd_test_mega3/text_entry_lcd_test_mega3.ino b/Air_Quality_Sensor_PPD42/code/text_entry_lcd_test_mega3/text_entry_lcd_test_mega3.ino new file mode 100644 index 0000000..3a0b83b --- /dev/null +++ b/Air_Quality_Sensor_PPD42/code/text_entry_lcd_test_mega3/text_entry_lcd_test_mega3.ino @@ -0,0 +1,130 @@ +#include // Core graphics library +#include // Hardware-specific library +MCUFRIEND_kbv tft; + +#include +#include +#include + +#include + +#define BLACK 0x0000 +#define RED 0xF800 +#define GREEN 0x07E0 +#define WHITE 0xFFFF +#define GREY 0x8410 + +#include + +int DustSensePin = 31; + +//globals for ppd42 dust sensor + +//unsigned int airreading[100] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +unsigned long starttime = 0; +unsigned long sampletime_ms = 10000;//sample 60s == 60000 ; +unsigned long lowpulseoccupancy = 0; +unsigned long duration = 0; +float ratio = 0; +float concentration = 0; +unsigned int x = 0; +unsigned int toplimit = 0; +unsigned long sum = 0; //highest number possible - 32 bit unsigned, so 4 billion +unsigned int average = 0; +//end ppd42 + + +int brightnessread = 0; + +int cat = 0; +int resultsread1 = 0; + +int screenreadyforprint = 0; +double count = 0; + +void setup(void) +{ + Serial.begin(9600); + uint16_t ID = tft.readID(); + if (ID == 0xD3) ID = 0x9481; + tft.begin(ID); + tft.setRotation(1); + tft.WriteCmdData(0x51, 0x00); + //resultsread1 = tft.readReg(0x52); + //writeData(0x51); + pinMode(DustSensePin,INPUT); + starttime = millis();//get the current time; + + +} + +void loop(void) +{ + + + + if(screenreadyforprint == 0){ + tft.fillScreen(BLACK); + tft.WriteCmdData(0x51, 0x0000); + tft.setTextColor(0XFFFF); + tft.setTextSize(2); + tft.setCursor(0, 36); + tft.println("Starting Sensor"); + screenreadyforprint = 1; + } + + + duration = pulseIn(DustSensePin, LOW, 500000); + + lowpulseoccupancy = lowpulseoccupancy + duration; + + //tft.println(airreading) + if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s + { + tft.fillScreen(BLACK); + tft.WriteCmdData(0x51, 0x0000); + tft.setTextColor(0XFFFF); + tft.setTextSize(2); + tft.setCursor(0, 36); + + ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 + concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve + tft.print("Count: "); + tft.println(count); + tft.println(lowpulseoccupancy); + //tft.print(","); + tft.println(ratio); + //tft.print(","); + tft.print("Concentration is: "); + tft.println(concentration); + lowpulseoccupancy = 0; + starttime = millis(); + //tft.println("Results printed."); + count++; + + } + + + +} + +void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg) +{ + int16_t x1, y1; + uint16_t wid, ht; + tft.drawFastHLine(0, y, tft.width(), WHITE); + tft.setFont(f); + tft.setCursor(x, y); + tft.setTextColor(GREEN); + tft.setTextSize(sz); + tft.print(msg); + delay(1000); +} + + +uint32_t readReg32(uint16_t reg) +{ + uint16_t h = tft.readReg(reg, 0); + uint16_t l = tft.readReg(reg, 1); + return ((uint32_t) h << 16) | (l); +}