/*
Forum: https://forum.arduino.cc/t/gelesene-messwerte-mit-variabler-range-auf-ein-oled-display-skalieren/1353190
Wokwi: https://wokwi.com/projects/422698408752327681
ec2021
*/
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
constexpr byte TFT_DC {9};
constexpr byte TFT_CS {10};
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
constexpr byte potiX {A0};
constexpr byte potiY {A1};
constexpr int radius {20};
unsigned long lastTime = 0;
int dispWidth;
int dispHeight;
class CircleClass {
private:
int _x;
int _y;
int _rad = -1;
void paint(uint16_t color) {
tft.drawCircle(_x, _y, _rad, color);
}
public:
void set(int dx, int dy, int rad) {
if (_rad > -1) {
paint(ILI9341_BLACK);
}
_x = dx;
_y = dy;
_rad = rad;
paint(ILI9341_RED);
}
};
CircleClass c1;
void setup() {
Serial.begin(115200);
Serial.println("Graphics Example");
tft.begin();
tft.setRotation(1);
dispWidth = tft.width();
dispHeight = tft.height();
Serial.println(dispWidth);
Serial.println(dispHeight);
clearScreen();
}
void loop(void) {
if (millis() - lastTime > 100) {
lastTime = millis();
handleData();
}
}
void clearScreen() {
tft.fillScreen(ILI9341_BLACK);
}
void handleData() {
int val = analogRead(potiX);
int xPos = map(val,0,1023,radius,dispWidth-radius);
val = analogRead(potiY);
int yPos = map(val,0,1023,radius,dispHeight-radius);
c1.set(xPos,yPos,radius);
}