Buenos dias.
Estoy aprendiendo y procuro resolver las dudas leyendo o con la ayuda de la IA, pero en este caso me esta sobrepasando.
Tengo un proyecto donde tengo una ESP32S3 Matrix a la que tambien tengo conectada una Oled de 32x128 y un modulo M1101s (CC1101). El proyecyo tiene un menu general para que haga varia cosas a partir de un menu. Quiero recibir y emitir señales con el modulo para hacer un mando. Estoy probando con un codigo simple para leugo agregarlo al codigo general, pero no me pasa de la linea ELECHOUSE_cc1101.Init(); , por lo que el problema es ese. En los leds me muestra OK en la deteccion del modulo, pero cuando intento iniciarle no lo hace. He leido "cambiar cable", "iniciar con reset presionado el monitor", etc, y nada.
Algun consejo?, os dejo el codigo:
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <ELECHOUSE_CC1101_SRC_DRV.h>
// Pines para la matriz NeoPixel
#define MATRIX_PIN 14 // Cambia este pin según tu conexión
// Pines del CC1101
//#define PIN_GDO0 35
#define PIN_CS 36
#define PIN_SCK 37
#define PIN_MOSI 38
#define PIN_MISO 39
//#define PIN_GDO2 40
// Configura la matriz NeoPixel (8x8)
Adafruit_NeoMatrix Matrix = Adafruit_NeoMatrix(8, 8, MATRIX_PIN,
NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
NEO_GRB + NEO_KHZ800);
byte buffer[61] = {0}; // Buffer para almacenar los datos recibidos
// Función para mostrar texto desplazándose en la matriz
void mostrarScroll(String texto, uint16_t color) {
int anchoTexto = texto.length() * 6; // Ancho del texto (6 píxeles por carácter)
for (int x = 8; x >= -anchoTexto; x--) {
Matrix.clear();
Matrix.setCursor(x, 0);
Matrix.setTextColor(color);
Matrix.print(texto);
Matrix.show();
delay(50); // Ajusta la velocidad del scroll
}
}
void setup() {
// Inicializar matriz
Matrix.begin();
Matrix.setBrightness(25); // Ajusta la intensidad de los LEDs
Matrix.setTextWrap(false);
// Inicializar serial y CC1101
Serial.begin(115200); // Opcional, para depuración futura
mostrarScroll("Init...", Matrix.Color(255, 255, 0)); // Mostrar mensaje de inicio
// Configurar pines SPI del CC1101
//ELECHOUSE_cc1101.setSpiPin(PIN_SCK, PIN_MISO, PIN_MOSI, PIN_CS);
ELECHOUSE_cc1101.setSpiPin(37, 39, 38, 36);
// Verifica si el CC1101 está conectado
if (ELECHOUSE_cc1101.getCC1101()) {
mostrarScroll("CC OK", Matrix.Color(0, 255, 0)); // Verde si OK
printf("CC1101 detectado correctamente.\n");
} else {
mostrarScroll("CC ERR", Matrix.Color(255, 0, 0)); // Rojo si error
printf("ERROR: No se detectó el CC1101.\n");
while (1); // Detener si hay error
}
// Configuración del CC1101
printf("Llamando a Init...\n");
ELECHOUSE_cc1101.Init();
printf("Init completado.\n");
printf("Estableciendo CCMode...\n");
ELECHOUSE_cc1101.setCCMode(1);
printf("CCMode establecido.\n");
printf("Estableciendo Modulation...\n");
ELECHOUSE_cc1101.setModulation(0);
printf("Modulation establecido.\n");
printf("Estableciendo frecuencia...\n");
ELECHOUSE_cc1101.setMHZ(433.92);
printf("Frecuencia establecida.\n");
printf("Estableciendo SyncMode...\n");
ELECHOUSE_cc1101.setSyncMode(2);
printf("SyncMode establecido.\n");
printf("Estableciendo SyncWord...\n");
ELECHOUSE_cc1101.setSyncWord(211, 145);
printf("SyncWord establecido.\n");
printf("Activando CRC...\n");
ELECHOUSE_cc1101.setCrc(1);
printf("CRC activado.\n");
printf("Configuración CC1101 completada.\n");
// Esperar 1 segundo para asegurar que el CC1101 esté listo
delay(10000);
// Mostrar el valor de getMode() en el monitor serial
int mode = ELECHOUSE_cc1101.getMode();
printf("Modo del CC1101 después de configuración: %d\n", mode);
if (mode == 0) {
printf("Modo: Transmisión (Tx)\n");
} else if (mode == 1) {
printf("Modo: Recepción (Rx)\n");
} else if (mode == 2) {
printf("Modo: Espera (Idle)\n");
} else {
printf("Modo desconocido\n");
}
mostrarScroll("Rx Mode", Matrix.Color(0, 0, 255)); // Azul: modo recepción
}
void loop() {
// Verifica y muestra el modo en cada ciclo
int mode = ELECHOUSE_cc1101.getMode();
printf("Modo actual del CC1101: %d\n", mode);
if (ELECHOUSE_cc1101.CheckRxFifo(100)) { // Verifica si hay datos en el FIFO
if (ELECHOUSE_cc1101.CheckCRC()) { // Verifica si el CRC es válido
String mensaje = "";
// Obtén los datos recibidos
int len = ELECHOUSE_cc1101.ReceiveData(buffer);
buffer[len] = '\0'; // Agrega el terminador de cadena
mensaje += String((char *)buffer); // Convierte los datos a texto
// Mostrar mensaje en scroll (amarillo)
mostrarScroll("Msg: " + mensaje, Matrix.Color(255, 255, 0));
} else {
// Si el CRC es inválido, mostrar error (rojo)
mostrarScroll("CRC ERR", Matrix.Color(255, 0, 0));
}
}
}