#include <TFT_eSPI.h>
#include <SPI.h> // this is needed for display
#define TFT_WIDTH 240 //altura do display em pixels
#define TFT_HEIGHT 320 // largura do display em pixels
// Não é nescessaria esta definição mas defini como parametro para que possa ser usado nos calculos de proporção da onda
#define GRID_WIDTH (TFT_WIDTH-20)
#define GRID_HEIGHT (TFT_HEIGHT)
// tambem não é necessario, vou estudar ainda se seria melhor usar o tamanho da tela decrementando em 300 / 20
#define GRID_COLOR 0x4208 // cor da grade
uint8_t hOffset = (TFT_WIDTH - GRID_WIDTH)/2;
uint8_t vOffset = (TFT_HEIGHT - GRID_HEIGHT)/2;
uint8_t dHeight = GRID_HEIGHT/8;
TFT_eSPI tft = TFT_eSPI();
unsigned long total = 0;
unsigned long tn = 0;
float seno;
int seno_i;
int buffer[GRID_HEIGHT];
int j =0;
int ativo = 0;
void setup() {
tft.init();
tft.fillScreen(TFT_BLACK);
tft.setRotation(2);
//desenhaQuadro();
//tft.invertDisplay(1);
desenhaGrade();
}
void loop(void) {
for(int i = 0; i < GRID_HEIGHT+vOffset; i++){ //10 -> 310
if (ativo){
tft.drawPixel( buffer[i - 1],i,TFT_BLACK); //para abagar a linha ja desenhada
}
seno = sin(5*j * 3.1415/180.0);
seno_i = 120+(seno*50/2);
desenhaGrade();
tft.drawPixel(seno_i, i, TFT_YELLOW);
buffer[i-1]=seno_i;
ativo = 1;
j+=1;
if (j>180) j=-180;
}
}
void desenhaQuadro(){
tft.drawRect(0, 0, 240, 320, TFT_WHITE);
}
void desenhaGrade() {
int limX = 10, limY = 16;
uint8_t hPacing = GRID_WIDTH / limX;
uint8_t vPacing = GRID_HEIGHT / limY;
for(int i = 1; i < limX; i++) //desenha linha da grade vertical
tft.drawFastVLine(i * hPacing + hOffset, vOffset, GRID_HEIGHT, GRID_COLOR);
for(int i = 0; i < GRID_HEIGHT; i+=10)// mini cotas da linha vertical
tft.drawFastHLine(hOffset + GRID_WIDTH/2 -3, i, 7, GRID_COLOR);
for(int i = 1; i < 16; i++)
tft.drawFastHLine(hOffset, i * vPacing + vOffset, GRID_WIDTH, GRID_COLOR);
for(int i = 0; i < GRID_HEIGHT; i+=22)
tft.drawFastVLine(i, GRID_HEIGHT/2 - 3, 7, GRID_COLOR);
tft.drawRect(hOffset, vOffset, GRID_WIDTH, GRID_HEIGHT, ILI9341_WHITE);
}