Hola! Soy nuevo en arduino y viejo en programación. Quiero hacer un proyecto donde se lee un registro que contiene números en un archivo de texto en una tarjeta SD que tiene las conexiones:
** MISO - pin 12
** MOSI - pin 11
** CLK - pin 13
** CS - pin 10
La lógica funciona muy bien hasta que incluí el código para manejar un panel max7219 con las siguientes conexiones:
#include "LedControl.h"
const int DATAIN = 7; // PIN 7
const int CLK=6; // PIN 6
const int LOAD=5; // PIN 5
int maxMatrix=2;
//LedControl lc=LedControl(DATAIN,CLK,LOAD,maxMatrix);
Si observan, la creación del objeto lc esta en comentarios. Así funciona muy bien la lógica para leer y cargar el archivo de números. Si la habilito, la lógica se comporta extraña. Solo carga el primero de los números.
Este es el código completo:
/*-- Librerías para el manejo de SD Card --*/
#include <SD.h>
#include <SPI.h>
/*-- Conexiones de la tarjeta SD --*/
int CS_PIN = 10;
/*--
MISO -> PIN 12
MOSI -> PIN 11
SCK -> PIN 13
CS -> PIN 10
--*/
/*-- Declaraciones para cargar las ciudades desde el archivo default 00.txt --*/
File file; // define un objeto file
String fName="00.txt"; // nombre default del archivo
const int MAX_CIUDADES=512; // Máximo número de ciudaes que se pueden manejar
int Ciudades[MAX_CIUDADES]; // Arreglo que contiene los números de ciudad
int nCiudades; // Cantidad de ciudades cargadas nCiudades <=MAX_CIUDADES
int parseCiudades(String datos) {
int indice = 0;
int i = 0;
int ciudad;
while (datos.length() > 0 && i < MAX_CIUDADES) {
ciudad = datos.toInt(); // Convierte la parte inicial de la cadena a un entero
Serial.println(ciudad);
Ciudades[i++] = ciudad; // Almacena la ciudad en el arreglo
indice = datos.indexOf(','); // Busca la próxima coma en la cadena
if (indice != -1) {
datos = datos.substring(indice + 1); // Recorta la cadena desde la posición siguiente a la coma
} else {
datos = ""; // Si no hay más comas, termina el bucle
}
}
return i; // Retorna la cantidad de ciudades leídas
}
void setup()
{ Serial.begin(9600);
initializeSD();
openFile("00.txt");
String cdStr=readBulk();
Serial.println("----------");
Serial.println("String ciudades = "+cdStr);
nCiudades=parseCiudades(cdStr);
Serial.print("Total de ciudades cargadas "); Serial.println(nCiudades);
}
/*-- Declaraciones para configuar matrices LED --*/
#include "LedControl.h"
const int DATAIN = 7; // PIN 7
const int CLK=6; // PIN 6
const int LOAD=5; // PIN 5
int maxMatrix=2;
//LedControl lc=LedControl(DATAIN,CLK,LOAD,maxMatrix);
const int retardo = 500;// Contiene la cantidad de milisegundos de suspensión para producir parpadeo
void loop()
{
}
/*-- Rutinas para el manejo de la tarjeta SD --*/
void initializeSD()
{ Serial.println("Initializing SD card...");
pinMode(CS_PIN, OUTPUT);
if (SD.begin()){Serial.println("SD card is ready to use.");}
else { Serial.println("SD card initialization failed");
return;}
}
int createFile(char filename[]){
file = SD.open(filename, FILE_WRITE);
if (file){
Serial.println("File created successfully.");
return 1;}
else {Serial.println("Error while creating file.");
return 0;}
}
int writeToFile(char text[])
{ if (file)
{ file.println(text);
Serial.println("Writing to file: ");
Serial.println(text);
return 1;}
else {Serial.println("Couldn't write to file");
return 0;}
}
void closeFile()
{ if (file){file.close();
Serial.println("File closed");}
}
int openFile(char filename[])
{ file = SD.open(filename);
if (file) { Serial.println("File opened with success!");
return 1; }
else { Serial.println("Error opening file...");
return 0; }
}
String readLine()
{ String received = "";
char ch;
while (file.available())
{ ch = file.read();
if (ch == '\n'){ return String(received); }
else {received += ch;}
}
return "";
}
String readBulk()
{ String received = "";
char ch;
while (file.available())
{ ch = file.read();
received += ch;}
received.replace("\r\n",",");
ch = received.charAt(received.length() - 1); // Obtener el último carácter del String
if (ch == ',') {
received.remove(received.length()-1);} // Verificar si el último carácter es una coma se remueve
return String(received);
}
¿Interfiere la librería LedControl.h con las librerías SD.h y SPI.h?
¿Alguien me puede orientar?
Moderador
Lineas editadas porque toda línea de código debe ir con etiquetas, aunque solo sea 1.