Se me reinicia el arduino

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);
  
}

Su tema ha sido movido; por favor utilice el idioma inglés en las secciones en inglés del foro.

Hola @camingo ,

Qué placa estás usando?

Saludos.

Gaby.//

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

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.