Documentos de Académico
Documentos de Profesional
Documentos de Cultura
III. DISEÑO
#define TFT_RST 2 //Definición del PIN digital del arduino uno para RST (RESET)
#define TFT_DC 4 //Definición del PIN digital del arduino uno para RS (COMMAND, RS=0, O RS=1)
#define TFT_CS 15 //Definición del PIN digital del arduino uno para CS (CHIP SELECTION PIN)
#define TFT_MOSI 13 //Definición del PIN digital del arduino uno para SDI (MOSI, MASTER OUTPUT SLAVE IN)
#define TFT_CLK 14 //Definición del PIN digital del arduino uno para CLK (RELOJ)
#define TFT_MISO 12 //Definición pin miso
#define ECO 0
#define Triger 5
int d;
float distancia; //Definición del PIN analógico de entrada de la señal del LM35 (Sensor de temperatura)
int tiempo=0;
int i; //Variable auxiliar para iteración del bucle for
int sentido=4; //Variable que define el sentido de la pantalla (0=Vertical)
int pos[31]; //Inicialización del vector posición para dibujar el porcentajte de nivel en el eje Y
int disi=0; //Variable para almacenar la posición temporalmente
int porcentaje; //variable para almacenar la variable porcentaje temporalmente
void setup() {
tft.begin(); //Inicialización de la pantalla TFT
pinMode(Triger,OUTPUT); //definición del pin de disparo del sensor
pinMode(ECO,INPUT); //definición del pin que recibe la señal cuando regresó la onda
Serial.begin(115200); //Inicialización del puerto serial para comunicación entre el arduino y el computador
tft.fillScreen(ILI9341_BLACK); //se inicia la pantalla en color negro
Laboratorio Instrumentación electrónica 4
Preinforme IV – LIR (Level Indicator Recorder)
}
void loop() {
tiempo=0;
for(i=0;i<31;i++){ //Primer for para incializar todo el vector en la posición 0%
pos[i]=259;
}
tft.setRotation(sentido); //Definición del sentido de la pantalla
tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
for(i=0;i<11;i++){ //for que permite escribir los valores de porcentaje en el eje y cada 10%
tft.setCursor(30,252-(20*i));
tft.print(i*10);
tft.print("%");
}
for(i=0;i<7;i++){ //for que permite escribir el tiempo cada 5 egundos
tft.setCursor(201-(i*25),263);
tft.print(i*-5);
tft.print("s");
}
for (i=0; i<31; i++){ //Segundo for para borrar los datos anteriores
tft.drawPixel((201-5*i),(pos[i]),ILI9341_BLACK); //Como el fondo es negro, se deben borrar los datos anteriores
//pintandolos en la misma posición de negro
d=(i+1)*5;
tft.fillCircle((201-5*i),(pos[i]),1,ILI9341_BLACK);
//tft.drawLine((201-5*i),(pos[i]),(201-d),(pos[i+1]),ILI9341_BLACK);
}
for (i=30; i>0; i--){ //El objetivo de este tecer for es iterar para correr el regsitro
//actual en un posición (Valor en T=0 pasa a ser el de T=1 y así sucesivamente)
int posa=pos[i-1]; //la iteración se realiza desde el penultimo valor hacia adelante
pos[i]=posa; //Se asigna el valor que en el tiempo está más reciente, a un instante de tiempo después
}
pos[0]=disi; //Dependiendo el valor tomado, se asigna la posición en pixeles para graficarlo cuando T=0.
for (i=0;i<31;i++){ //El último for permite dibujar el valor del pixel que representa la temperatura.
//Dichos valores están en un vector que almacena la posición en y.
d=(i+1)*5;
tft.drawPixel((201-5*i),(pos[i]),ILI9341_MAGENTA);
tft.fillCircle((201-5*i),(pos[i]),1,ILI9341_MAGENTA); //gráfica un circulo en en la posición determinado de radio 1 pixel.
//tft.drawLine((201-5*i),(pos[i]),(201-d),(pos[i+1]),ILI9341_MAGENTA);
}
Laboratorio Instrumentación electrónica 6
Preinforme IV – LIR (Level Indicator Recorder)
if(distancia>=16.5)distancia=16.5; //limita el valor superior de distancia
if(distancia<=6.5)distancia=6.5; //limita el valor inferior de distancia
porcentaje=(-10*distancia)+165; // conversión de distancia en porcentaje
if (porcentaje<=0)porcentaje=0; //limitación del valor de porcentaje inferior
if (porcentaje>=100)porcentaje=100; //limitación del valor de porcentaje superior
delay(1000); //retardo que determina el tiempo de muestreo
tft.fillRect(83, 35, 34, 15, ILI9341_BLACK); //rectangulo que refresca el valor de porcentaje mostrado
}
}