Напечатать выход датчика PMS7003 на 1.8 TFT. Мой код работает нормально без слияния части TFT

#include <SoftwareSerial.h> 
#include <SD.h>
#include <TFT.h>  
#include <SPI.h>
//#include <Adafruit_ST7735.h>
//#include  <Adafruit_GFX.h>
//
//#include <Wire.h>
// pin definition for Arduino UNO
#define cs   6
#define dc   9
#define rst  8
TFT TFTscreen = TFT(cs, dc, rst);
//Adafruit_ST7735 tft = Adafruit_ST7735(cs,  dc, rst);
SoftwareSerial Serial12(10, 11); // serial ports RX, TX
// input byte variables
int inputHigh = 0;


int inputLow = 0;
// variable to caclulate checksum input variables
uint16_t inputChecksum = 0;
// sensor variables
uint16_t concPM1_0_CF1;
uint16_t concPM2_5_CF1;
uint16_t concPM10_0_CF1;
uint16_t concPM1_0_amb;
uint16_t concPM2_5_amb;
uint16_t concPM10_0_amb;
uint16_t rawGt0_3um;
uint16_t rawGt0_5um;
uint16_t rawGt1_0um;
uint16_t rawGt2_5um;
uint16_t rawGt5_0um;
uint16_t rawGt10_0um;
uint8_t  version;
uint8_t  errorCode;
uint16_t checksum;
void setup() {
  Serial.begin(9600);
    TFTscreen.begin();
   TFTscreen.background(0, 0, 0);
  //set the text size
    TFTscreen.setRotation(1);
    TFTscreen.setTextSize(1); 

    while (!Serial) {
    }
   // Serial.println("Serial port ready");
    Serial12.begin(9600);
    while (!Serial12) {
    }
    while (Serial12.read()!=-1) {};  //clear buffer
   // Serial.println("Sensor port ready");



}
bool pms7003ReadData() {
  int startt = micros();
   // while (Serial12.read()!=-1) {};  //clear buffer
    if (Serial12.available() < 32) {
     // Serial.println("hello");

      if (Serial12.available() == 0) {
        delay(150);
        return;
      };
      if (Serial12.available() > 16) {
        delay(10);
        return;
      };
      if (Serial12.available() > 0) {
        delay(30);
        return;
      };
      delay(100);
      return;
    }
    if (Serial12.read() != 0x42) return;
    if (Serial12.read() != 0x4D) return;
    inputChecksum = 0x42 + 0x4D;
    inputHigh = Serial12.read();
    //String sensorVal = Serial12.readString();
    inputLow = Serial12.read();
    //String sensorVal1 = Serial12.readString();
    inputChecksum += inputHigh + inputLow;
    if (inputHigh != 0x00) return; 
    if (inputLow != 0x1c) return;    
    inputHigh = Serial12.read();//
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    concPM1_0_CF1 = inputLow+(inputHigh<<8);
    inputHigh = Serial12.read();  
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    concPM2_5_CF1 = inputLow+(inputHigh<<8);
    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    concPM10_0_CF1 = inputLow+(inputHigh<<8);
    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    concPM1_0_amb = inputLow+(inputHigh<<8);



    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    concPM2_5_amb = inputLow+(inputHigh<<8);

    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    concPM10_0_amb = inputLow+(inputHigh<<8);
    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    rawGt0_3um = inputLow+(inputHigh<<8);
    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    rawGt0_5um = inputLow+(inputHigh<<8);
    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    rawGt1_0um = inputLow+(inputHigh<<8);
    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    rawGt2_5um = inputLow+(inputHigh<<8);
    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    rawGt5_0um = inputLow+(inputHigh<<8);
    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    inputChecksum += inputHigh + inputLow;
    rawGt10_0um = inputLow+(inputHigh<<8);
    inputLow = Serial12.read();
    inputChecksum += inputLow;
    version = inputLow;
    inputLow = Serial12.read();
    inputChecksum += inputLow;
    errorCode = inputLow;

   /* Serial.println("PMS7003 "); 
    Serial.print("PM1.0CF1  ");
    Serial.println(concPM1_0_CF1);*/
     /*Serial.print("PM25CF1 ");
    Serial.print(concPM2_5_CF1,1);
    Serial.print(" PM10CF1 ");
    Serial.print(concPM10_0_CF1,1);*/
   //Serial.print("PMS7003 PM1.0amb ");



   Serial.print("PMS7003_1 ");

    Serial.print(concPM1_0_amb,1);

    //Serial.print(" PM2.5amb ");
    Serial.print(" ");
    Serial.print(concPM2_5_amb,1);
     Serial.print(" ");
    Serial.print(concPM10_0_amb,1);


      /* Serial.print("rawGt0_3um ");
    Serial.println(rawGt0_3um);
     Serial.print("rawGt0_5um ");
    Serial.println(rawGt0_5um);
    Serial.print("rawGt1_0um ");
    Serial.println(rawGt1_0um);

    Serial.print("rawGt2_5um ");
    Serial.println(rawGt2_5um);
    Serial.print("rawGt5_0um ");
    Serial.println(rawGt5_0um);
   Serial.print("rawGt10_0um ");
    Serial.println(rawGt10_0um);*/

    //Serial.print(version);


    //Serial.print(errorCode);
    inputHigh = Serial12.read();
    inputLow = Serial12.read();
    checksum = inputLow+(inputHigh<<8);




    if(checksum != inputChecksum) {
      Serial.print(';'); 
      Serial.print(checksum); 
      Serial.print(';'); 
      Serial.print(inputChecksum); 
    }
 Serial.print('\n');


  //String tempVal = doubleToString(concPM1_0_amb,0);
  //tempVal.toCharArray(tempPrintout,6);
  int endd = micros(); 
    int timee = (endd - startt);
    Serial.println(timee);
    delay(676);// higher will get you checksum errors
    return true;
}
void displayy(uint16_t concPM1_0_amb,uint16_t concPM2_5_amb,uint16_t concPM10_0_amb){
    TFTscreen.stroke(255,0,0);
    TFTscreen.text("PM_1.0    ", 6, 30);
    TFTscreen.print(concPM1_0_amb);
    TFTscreen.text("PM_2.5    ", 6, 60);
    TFTscreen.print(concPM2_5_amb);
    TFTscreen.text("PM_10.0    ", 6, 90);
    TFTscreen.print(concPM10_0_amb); 
    return;
}

void loop () {
    pms7003ReadData();
    displayy(concPM1_0_amb,concPM2_5_amb,concPM10_0_amb);





  // set a random font color





}

, 👍-2


1 ответ


1

TFT использует SPI на контактах 11, 12, 13, и вам следует установить контакт 10 как выход. (используйте его как контакт CS).

Вы не можете использовать контакт 11 для SoftwareSerial, а контакт 10 — как вход или RX.

(если контакт 10 является входным, библиотека SPI переключается в подчиненный режим.)

прочитайте документацию: TFT, SPI

,