Напечатать выход датчика 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) более четко описать проблему (2) описать, что вы пробовали (3) показать нам вашу схему (диаграмму), (4) сократить код до минимального примера, воспроизводящего проблему, (5) не устанавливать крайний срок для помощи незнакомцам. Не пишите вопрос в заголовке и не выкладывайте неформатированный, длинный код. Обратитесь к https://arduino.stackexchange.com/help/how-to-ask, @Maximilian Gerhardt

ужасный, повторяющийся код. .... вам действительно нужно взглянуть на functions, @jsotola


1 ответ


1

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

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

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

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

,

Для ясности: автоматическое переключение в режим ведомого устройства при подаче низкого уровня на вход SS осуществляется аппаратно., @KIIV