Напечатать выход датчика 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
Для ясности: автоматическое переключение в режим ведомого устройства при подаче низкого уровня на вход SS осуществляется аппаратно., @KIIV
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Если вам нужна реальная помощь, вам нужно (1) более четко описать проблему (2) описать, что вы пробовали (3) показать нам вашу схему (диаграмму), (4) сократить код до минимального примера, воспроизводящего проблему, (5) не устанавливать крайний срок для помощи незнакомцам. Не пишите вопрос в заголовке и не выкладывайте неформатированный, длинный код. Обратитесь к https://arduino.stackexchange.com/help/how-to-ask, @Maximilian Gerhardt
ужасный, повторяющийся код. .... вам действительно нужно взглянуть на
functions
, @jsotola