Good afternoon.
Maybe someone can tell me where the problem is?
And show how to fix it!
TFT display prints over an over ....
#include <TFT.h>
#include <SPI.h>
#include <CAN.h>
#define TFT_cs 3
#define TFT_dc 5
#define TFT_rst 4
// create an instance of the library
TFT TFTscreen = TFT(TFT_cs, TFT_dc, TFT_rst);
const bool useStandardAddressing = true;
void setup() {
TFTscreen.begin();
TFTscreen.background(0, 0, 0);
TFTscreen.setTextSize(1);
TFTscreen.stroke(254, 210, 7);
TFTscreen.text("Engine Temp.C", 5, 7);
TFTscreen.text("Engine RPM", 5, 19);
TFTscreen.text("Batt.Voltage", 5, 31);
Serial.begin(9600);
Serial.println("CAN OBD-II engine RPM");
CAN.setClockFrequency(8e6);
if (!CAN.begin(500E3)) {
Serial.println("Starting CAN failed!");
while (1);
}
// add filter to only receive the CAN bus ID's we care about
if (useStandardAddressing)
CAN.filter(0x7e8);
}
void loop() {
if (useStandardAddressing)
CAN.beginPacket(0x7df, 8);
Please post your entire sketch.
What you are observing is a 'standard feature'.
That area needs to be overwritten with a 'filled rectangle' (of the background color) before printing new data.
//Sorry...
#include <TFT.h>
#include <SPI.h>
#include <CAN.h>
#define TFT_cs 3
#define TFT_dc 5
#define TFT_rst 4
// create an instance of the library
TFT TFTscreen = TFT(TFT_cs, TFT_dc, TFT_rst);
const bool useStandardAddressing = true;
void setup() {
TFTscreen.begin();
TFTscreen.background(0, 0, 0);
TFTscreen.setTextSize(1);
TFTscreen.stroke(254, 210, 7);
TFTscreen.text("Engine Temp.C", 5, 7);
TFTscreen.text("Engine RPM", 5, 19);
TFTscreen.text("Batt.Voltage", 5, 31);
Serial.begin(9600);
Serial.println("CAN OBD-II engine RPM");
CAN.setClockFrequency(8e6);
if (!CAN.begin(500E3)) {
Serial.println("Starting CAN failed!");
while (1);
}
// add filter to only receive the CAN bus ID's we care about
if (useStandardAddressing)
CAN.filter(0x7e8);
}
void loop() {
if (useStandardAddressing)
CAN.beginPacket(0x7df, 8);
CAN.write(0x02); // number of additional bytes
CAN.write(0x01); // show current data
CAN.write(0x0c); // engine RPM
CAN.endPacket();
// wait for response
while (CAN.parsePacket() == 0 ||
CAN.read() != 4 || // correct length
CAN.read() != 0x41 || // correct mode
CAN.read() != 0x0c); // correct PID
float rpm = ((CAN.read() * 256.0) + CAN.read()) / 4.0;
Serial.print("Engine RPM = ");
Serial.println(rpm);
TFTscreen.setCursor(125, 19);
TFTscreen.println(rpm); //...............................................PROBLEM?
delay(500);
}
For example, just add more spaces to this print line, to erase what what there before... you are using cursor positioning commands, so the value won't be printed after the spaces. It will overwrite them.
system
Closed
December 23, 2022, 1:44pm
6
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.