Para adaptar el código de Arduino y Processing para mostrar la información en un
display TFT de resolución 240x320 utilizando las librerías Adafruit_GFX y
Adafruit_ILI9341, necesitaremos modificar el código de Arduino para enviar los
datos al display TFT y ajustar el código de Processing para que refleje esos cambios. A
continuación se muestra cómo puedes hacer esto.
Código de Arduino
Primero, agrega las librerías necesarias y define los pines del TFT en el código de
Arduino:
cpp
Copiar código
#include <Servo.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
// Definición de pines para el TFT
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
const int trigPin = 10;
const int echoPin = 9;
long duration;
int distance;
Servo myServo;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
myServo.attach(12);
// Inicializar el display
tft.begin();
tft.setRotation(1); // Rotar la pantalla si es necesario
tft.fillScreen(ILI9341_BLACK); // Limpiar la pantalla
}
void loop() {
for(int i = 15; i <= 165; i++) {
myServo.write(i);
delay(30);
distance = calculateDistance();
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
drawOnTFT(i, distance);
}
for(int i = 165; i > 15; i--) {
myServo.write(i);
delay(30);
distance = calculateDistance();
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
drawOnTFT(i, distance);
}
}
int calculateDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58.2;
return distance;
}
void drawOnTFT(int angle, int distance) {
tft.fillScreen(ILI9341_BLACK); // Limpiar la pantalla antes de
dibujar
// Dibujar el radar
tft.drawCircle(120, 160, 120, ILI9341_GREEN);
tft.drawCircle(120, 160, 90, ILI9341_GREEN);
tft.drawCircle(120, 160, 60, ILI9341_GREEN);
tft.drawCircle(120, 160, 30, ILI9341_GREEN);
for(int i = 0; i <= 180; i += 30) {
int x = 120 + 120 * cos(radians(i));
int y = 160 - 120 * sin(radians(i));
tft.drawLine(120, 160, x, y, ILI9341_GREEN);
}
// Dibujar la línea del radar
int x = 120 + 120 * cos(radians(angle));
int y = 160 - 120 * sin(radians(angle));
tft.drawLine(120, 160, x, y, ILI9341_RED);
// Dibujar el objeto detectado
if(distance <= 400) {
int objX = 120 + (distance / 4.0) * cos(radians(angle));
int objY = 160 - (distance / 4.0) * sin(radians(angle));
tft.fillCircle(objX, objY, 5, ILI9341_RED);
}
// Dibujar texto
tft.setCursor(0, 0);
tft.setTextColor(ILI9341_GREEN);
tft.setTextSize(2);
tft.print("Angle: ");
tft.print(angle);
tft.print(" Distance: ");
tft.print(distance);
}
Código de Processing
El código de Processing no necesita cambios significativos ya que el enfoque principal
es actualizar el Arduino para que maneje el display TFT. Sin embargo, si deseas
mantener el procesamiento original para visualización en la PC, asegúrate de que el
código de Arduino siga enviando datos por el puerto serie.
Notas Adicionales
1. Pinout: Asegúrate de que los pines TFT_CS, TFT_RST, y TFT_DC estén
correctamente asignados según tu configuración de hardware.
2. Library Installation: Asegúrate de tener instaladas las librerías Adafruit_GFX
y Adafruit_ILI9341 en tu entorno de Arduino.
Este ajuste en el código permite que los datos del radar se muestren tanto en la pantalla
TFT conectada al Arduino como en el entorno de Processing si se sigue utilizando.