Напечатать выход датчика 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
}
@Sarah Khan, 👍-2
1 ответ
▲ 1
TFT использует SPI на контактах 11, 12, 13, и вам следует установить контакт 10 как выход. (используйте его как контакт CS).
Вы не можете использовать контакт 11 для SoftwareSerial, а контакт 10 — как вход или RX.
(если контакт 10 является входным, библиотека SPI переключается в подчиненный режим.)
прочитайте документацию: TFT, SPI
,
@Juraj
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату