hola a todos, tengo un problema y no hallo por que me sucede, el código debe sumar de uno en uno y mostrar dichos contadores en una matriz 8x8 de 4, pero cuando los contadores están en 25 aproximadamente se reinicia el Arduino, no se si es por memoria o por que sucede, en cuanto a las conexiones solo se esta alimentando por el display, mediante el cable usb
//Incluimos las librerias que se van a usar
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
// defino el tipo de modulo matriz que vamos a usar, el FC16
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//defino la cantidad de matrices que vamos a utilizar
#define MAX_DEVICES 4
//defino los pines que iran conectados al modulo matriz
#define DATA_PIN 11 //DIN
#define CS_PIN 10 //CS
#define CLK_PIN 12 //CLK
//Defino objeto P cuyos parametros son(tipo de matriz, DIN, CLK, CS)
MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
//declaro pines de los pulsadores
const int pulsador1=3;
const int pulsador2=4;
const int pulsreset=5;
//declaro variables
bool pulsador1ahora=1;
bool pulsador1anterior=1;
bool pulsador2ahora=1;
bool pulsador2anterior=1;
int contador1=0;
int contador2=0;
void setup(){
Serial.begin(9600); //Inicio comunicacion serial
//Serial.print("Escriba un texto para mostrar en la matriz. ");
P.begin(); //Inicio el objeto P (del modulo matriz 8x8 de 4)
//P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
P.setTextAlignment(PA_CENTER); //Defino posicion estatica (LEFT,RIGHT,UP,DOWN)
P.print(String(contador1) + " " + String(contador2)); //Mensaje a mostrar
pinMode(pulsador1, INPUT_PULLUP);
pinMode(pulsador2, INPUT_PULLUP);
pinMode(pulsreset, INPUT_PULLUP);
}
void loop(){
//funcion para pulsador 1
pulsador1ahora=digitalRead(pulsador1); //lee el pulsador
if (pulsador1ahora==0 && pulsador1anterior == 1){ //entra si detecta que el pulsador entro y que el estado anterior estaba sin presionar
contador1++; //aumenta en uno el contador
P.setTextAlignment(PA_CENTER); //Defino posicion estatica (LEFT,RIGHT,UP,DOWN)
P.print(String(contador1) + " " + String(contador2)); //Mensaje a mostrar
delay(100);
Serial.println("1");
//Limpia la matriz
P.displayReset();
}
pulsador1anterior=pulsador1ahora; // actualiza el estado anterior
//funcion para pulsador 2
pulsador2ahora=digitalRead(pulsador2); //lee el pulsador
if (pulsador2ahora==0 && pulsador2anterior == 1){ //entra si detecta que el pulsador entro y que el estado anterior estaba sin presionar
contador2++; //aumenta en uno el contador
P.setTextAlignment(PA_CENTER); //Defino posicion estatica (LEFT,RIGHT,UP,DOWN)
P.print(String(contador1) + " " + String(contador2)); //Mensaje a mostrar
delay(100);
Serial.println("2");
//Limpia la matriz
P.displayReset();
}
pulsador2anterior=pulsador2ahora; // actualiza el estado anterior
if (contador1 > 99) {contador1 = 99;}
if (contador2 > 99) {contador2 = 99;}
//reset
if(digitalRead(pulsreset)==0){
contador1=0;
contador2=0;
P.setTextAlignment(PA_CENTER); //Defino posicion estatica (LEFT,RIGHT,UP,DOWN)
P.print(String(contador1) + " " + String(contador2)); //Mensaje a mostrar
Serial.println("resetear");
//Limpia la matriz
P.displayReset();
}
delay(100);
}
Parece que usa un UNO/NANO
Las definiciones del SPI lo delatan, concuerdo contigo en que se queda sin RAM. NOTA: No era RAM
Compilé el código y me arrojó estos datos
El Sketch usa 22918 bytes (71%) del espacio de almacenamiento de programa. El máximo es 32256 bytes.
Las variables Globales usan 296 bytes (14%) de la memoria dinámica, dejando 1752 bytes para las variables locales. El máximo es 2048 bytes.
Voy a probar con algún simulador
Tienes mal el CK_PIN, lo pusiste en 13 y es 12
Este código funciona
//Incluimos las librerias que se van a usar
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 8 // Número de módulos en cascada
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
//declaro pines de los pulsadores
const int pulsador1 = 3;
const int pulsador2 = 4;
const int pulsreset = 5;
//declaro variables
bool pulsador1ahora = 1;
bool pulsador1anterior = 1;
bool pulsador2ahora = 1;
bool pulsador2anterior = 1;
int contador1 = 0;
int contador2 = 0;
void setup() {
Serial.begin(9600); //Inicio comunicacion serial
//Serial.print("Escriba un texto para mostrar en la matriz. ");
P.begin(); //Inicio el objeto P (del modulo matriz 8x8 de 4)
//P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
P.setTextAlignment(PA_CENTER); //Defino posicion estatica (LEFT,RIGHT,UP,DOWN)
P.print(String(contador1) + " " + String(contador2)); //Mensaje a mostrar
pinMode(pulsador1, INPUT_PULLUP);
pinMode(pulsador2, INPUT_PULLUP);
pinMode(pulsreset, INPUT_PULLUP);
}
void loop() {
//funcion para pulsador 1
pulsador1ahora = digitalRead(pulsador1); //lee el pulsador
if (pulsador1ahora == 0 && pulsador1anterior == 1) { //entra si detecta que el pulsador entro y que el estado anterior estaba sin presionar
contador1++; //aumenta en uno el contador
P.setTextAlignment(PA_CENTER); //Defino posicion estatica (LEFT,RIGHT,UP,DOWN)
P.print(String(contador1) + " " + String(contador2)); //Mensaje a mostrar
delay(100);
Serial.println("1");
//Limpia la matriz
P.displayReset();
}
pulsador1anterior = pulsador1ahora; // actualiza el estado anterior
//funcion para pulsador 2
pulsador2ahora = digitalRead(pulsador2); //lee el pulsador
if (pulsador2ahora == 0 && pulsador2anterior == 1) { //entra si detecta que el pulsador entro y que el estado anterior estaba sin presionar
contador2++; //aumenta en uno el contador
P.setTextAlignment(PA_CENTER); //Defino posicion estatica (LEFT,RIGHT,UP,DOWN)
P.print(String(contador1) + " " + String(contador2)); //Mensaje a mostrar
delay(100);
Serial.println("2");
//Limpia la matriz
P.displayReset();
}
pulsador2anterior = pulsador2ahora; // actualiza el estado anterior
if (contador1 > 99) {
contador1 = 99;
}
if (contador2 > 99) {
contador2 = 99;
}
//reset
if (digitalRead(pulsreset) == 0) {
contador1 = 0;
contador2 = 0;
P.setTextAlignment(PA_CENTER); //Defino posicion estatica (LEFT,RIGHT,UP,DOWN)
P.print(String(contador1) + " " + String(contador2)); //Mensaje a mostrar
Serial.println("resetear");
//Limpia la matriz
P.displayReset();
}
delay(100);
}
Muestra un tablero 0 - 0
He agregado dos botones, supongo que el 3ro limpia o borra los contadores y funciona
Te dejo link del simulador