Subo librería de voltimetro TFT con aguja
Es una reforma de uno que hice hace mas de 20 años para PC con msdos......viejos tiempos.
Adaptado a TFT y Arduino sirve. No es excesivamente correcto el código pero funciona bien.
Se puede modificar a gusto y adaptarlo.
Subo un ejemplo con cuatro distintos instrumentos para que se pueda ver el uso.
Solo pido un favor, a quien lo mejore, modifique , o cambien para usarlo en otras TFTS que suba el código cuando este probado.
Subo el código en varios post porque es largo
volt_cir.h
// nombre(puntero a tft, x inicio, y inicio, diametro, max_valor_impreso, max (escala), divisiones , rojo, emp angulo, fin angulo, simetrico);
//puntero es un puntero a la pantalla TFT que vamos a utilizar
// x inicio - Y inicio son las coordenadas de posicion del instrumnto en pantalla TFT
//diametro es el diametro del circulo de medida
//max_valor_impreso es el valor maximo de la escala impresa del instrumento
//max es el valor maximo a representar por la aguja del instrumento (fondo de escala)
//divisiones es el numero de segmentos de la representacion de la escala del instrumento
// rojo es el numero de segmentos de escala que estaran indicados en rojo como de alerta , si es simetrico lo representara en la parte negativa y la positiva
//emp angulo es el angulo en grados de inicio del circulo de medida
//fin angulo es el angulo en grados del final del circulo de medida
//simetrico == 1 es un instrumento de medida simetrico con el cero central
#pragma once
#ifndef Volt_cir_h
#define Volt_cir_h
#if defined(__AVR__)
#include "Arduino.h"
#elif defined(__PIC32MX__)
#include "WProgram.h"
#elif defined(__arm__)
#include "Arduino.h"
#endif
#include <UTFT.h>
#include <UTFT_Geometry.h>
#if ((!defined(UTFT_VERSION)) || (UTFT_VERSION<241))
#error : You will need UTFT v2.41 or higher to use this add-on library...
#endif
extern uint8_t SmallFont[];
extern uint8_t SevenSegNumFont[];
extern uint8_t BigFont[];
extern uint8_t Dingbats1_XL[];
class VOLT_CIR
{
public:
VOLT_CIR(UTFT *ptrUTFT, int posicion_x, int posicion_y, int diametro, double max_valor, double max_escala, int numero_divisiones, int valor_rojo, double emp_ang, double fin_ang, int simetrico);
void chasis(void);
void aguja(double valor);
private:
int xcentro, ycentro, vol_x, vol_y;
int tamano, escala;
int radio, radio_aguja;
double divisiones, rojo, color, max;
int sim;
double posx, posy, old_posx, old_posy;
double ro, startAngle, endAngle, start_rad, end_rad, start_rad_rojo, recorrido_aguja;
protected:
UTFT *_UTFT;
word _color_background, _color_border, _color_hilite;
};
#endif