#include <Arduino.h>
#include "driver/uart.h"
#define RX_PIN 18
#define TX_PIN 17
#define UART_PORT UART_NUM_1
void setup() {
Serial.begin(115200);
uart_config_t uart_config = {
.baud_rate = 9600,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_DEFAULT,
};
uart_driver_install(UART_PORT, 2048, 0, 0, NULL, 0);
uart_param_config(UART_PORT, &uart_config);
// Inversión necesaria para el optoacoplador 6N137
uart_set_line_inverse(UART_PORT, UART_SIGNAL_RXD_INV);
uart_set_pin(UART_PORT, TX_PIN, RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
Serial.println("\n[SISTEMA DE MAPEADO FILTRADO]");
Serial.println("Esperando selección en la máquina...");
}
void loop() {
uint8_t b[256];
int len = uart_read_bytes(UART_PORT, b, 256, 40 / portTICK_PERIOD_MS);
if (len > 0) {
// Buscamos dentro de la ráfaga de datos el patrón de selección que hemos visto en tus logs
for (int i = 0; i < len - 5; i++) {
// Filtramos por el inicio de trama 1E FF o 9E FF que detectó tu ESP32
if ((b == 0x1E || b == 0x9E) && b[i+1] == 0xFF) {
Serial.println("\n========================================");
Serial.println("¡DETECCIÓN DE SELECCIÓN ENCONTRADA!");
// Según tus datos, el ID del muelle está en la posición 3 y 4 de la trama
Serial.printf("ID ESPIRAL (Mapeo): %02X %02X\n", b[i+2], b[i+3]);
Serial.print("TRAMA DE VENTA: ");
for(int j=0; j<6; j++) Serial.printf("%02X ", b[i+j]);
Serial.println("\n========================================");
delay(500); // Evitar duplicados
return;
}
}
}
}