Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <TFT_eSPI.h>
- #include <SPI.h>
- #include "Adafruit_MAX31855.h"
- #define MAXDO 35
- #define MAXCS 22
- #define MAXCLK 27
- Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);
- TFT_eSPI tft = TFT_eSPI(); // TFT instance
- #define CENTER_X 160
- #define CENTER_Y 120
- #define RADIUS 100
- #define NEEDLE_LEN 80
- float angleMin = 180; // Angle for -20
- float angleMax = 0; // Angle for +80
- int valueMin = -20;
- int valueMax = 80;
- int prevX = CENTER_X;
- int prevY = CENTER_Y;
- void setup() {
- thermocouple.begin();
- Serial.begin(115200);
- tft.init();
- tft.setRotation(1);
- tft.fillScreen(TFT_BLACK);
- drawGauge();
- updateNeedle(0);
- tft.fillCircle(160, 120, 3, TFT_BLUE);
- }
- void loop() {
- float c = thermocouple.readCelsius();
- Serial.print("$");
- Serial.print(c);
- Serial.print(";");
- delay(250);
- float val=c;
- if (val >= valueMin && val <= valueMax) {
- updateNeedle(val);
- }
- }
- void drawGauge() {
- // Draw major and minor ticks
- for (int i = valueMin; i <= valueMax; i++) {
- float angle = map(i, valueMin, valueMax, angleMin, angleMax) * DEG_TO_RAD;
- int xStart = CENTER_X + cos(angle) * (RADIUS - (i % 10 == 0 ? 10 : 5));
- int yStart = CENTER_Y + sin(angle) * (RADIUS - (i % 10 == 0 ? 10 : 5));
- int xEnd = CENTER_X + cos(angle) * RADIUS;
- int yEnd = CENTER_Y + sin(angle) * RADIUS;
- tft.drawLine(xStart, yStart, xEnd, yEnd, (i % 10 == 0) ? TFT_BLUE : TFT_GREEN);
- if (i % 10 == 0) {
- // Draw label
- int xLabel = CENTER_X + cos(angle) * (RADIUS - 20);
- int yLabel = CENTER_Y + sin(angle) * (RADIUS - 20);
- tft.setTextColor(TFT_WHITE, TFT_BLACK);
- tft.setTextDatum(MC_DATUM);
- tft.drawString(String(i), xLabel, yLabel);
- }
- }
- }
- void updateNeedle(int value) {
- // Erase previous needle
- tft.drawLine(CENTER_X, CENTER_Y, prevX, prevY, TFT_BLACK);
- float angle = map(value, valueMin, valueMax, angleMin, angleMax) * DEG_TO_RAD;
- int x = CENTER_X + cos(angle) * NEEDLE_LEN;
- int y = CENTER_Y + sin(angle) * NEEDLE_LEN;
- // Draw new needle
- tft.drawLine(CENTER_X, CENTER_Y, x, y, TFT_RED);
- // Update label
- tft.fillRect(150, 90, 40, 20, TFT_BLACK); // Clear previous label
- tft.setTextFont(7);
- tft.setTextColor(TFT_RED, TFT_BLACK);
- tft.setTextSize(1);
- tft.setCursor(130, 40);
- tft.print(String(value) + " C");
- // Save previous needle position
- prevX = x;
- prevY = y;
- }
Add Comment
Please, Sign In to add comment