Estoy usando un contador de bucles, declarado en un encabezado:
int loop_counter = 0;
Utilizo este contador para activar un evento de vez en cuando. Solía usar un módulo para este mismo tipo de comportamiento, pero lo simplifiqué para que sea más fácil trabajar con él (aún resulta en el mismo comportamiento)
void loop() {
if(loop_counter > 100) loop_counter = 0;
else loop_counter++;
//Serial.println("hey");
if(loop_counter == 0) {
//do_something_important();
}
}
Todo está muy bien, hasta que trato de comunicarme con Serial
descomentando el //Serial.println("hey");
( "hey"
en este ejemplo porque, para mí, este comportamiento es absurdo).
Esto da como resultado que loop_counter
nunca active la sección do_something_important();
del código. Intenté declarar loop_counter
como volatile
, eso no cambió nada. Intenté Serial.print
ing loop_counter
, y también estaba teniendo un comportamiento extraño (congelaría el ciclo). Serial.println("hey");
funciona en el sentido de que en el monitor Serial obtengo un montón de "hey", (es decir, mucho más de 100 "heys", el número de iteraciones a las que se debe activar la otra sección de código)
¿Qué podría estar causando el uso de Serial
, con datos que no están vinculados a loop_counter
(por lo que puedo decir) relacionados con %code% ?
EDIT : Aquí está la parte del archivo principal que terminó planteando el problema (bueno, contribuyendo más a él (usando demasiada memoria)):
void display_state() {
int i,j,index=0;
short alive[256][2];
for(i=0;i<num_rows;i++) {
for(j=0;j<num_cols;j++) {
if(led_matrix[i][j]==1) {
alive[index][0]=i;
alive[index][1]=j;
index++;
}
}
}
alive[index][0]=NULL; //Null-terminate.
alive[index][1]=NULL;
//383 is a great number
for(int idx=0;idx < index; idx++) {
display(alive[idx][0],alive[idx][1]);
delayMicroseconds(283);
}
}
Aquí está "letters.h":
#ifndef _MY_LETTERS_H
#define _MY_LETTERS_H
#define nrows 4
#define ncols 4
#define num_rows 16
#define num_cols 16
#define MAX_WORD_LENGTH 16
#define NUMBER_OF_CHARACTERS 26
#include <stdlib.h>
int loop_counter = 0; short led_matrix [num_rows] [num_cols];
const short letter_a [nrows] [ncols] = {{0,1,1,0}, {1,0,0,1}, {1,1,1,1}, {1,0,0,1}}; const short letter_b [nrows] [ncols] = {{1,0,0,0}, {1,1,1,0}, {1,0,1,0}, {1,1,1,0} }; const short letter_c [nrows] [ncols] = {{0,1,1,1}, {1,0,0,0}, {1,0,0,0}, {0,1,1,1} }; const short letter_t [nrows] [ncols] = {{1,1,1,1}, {0,1,0,0}, {0,1,0,0}, {0,1,0,0} };
typedef struct letter_node { const corta * datos; letter_node * next; int x; int y } letter_node;
letter_node aa = {& letter_a [0] [0], NULL, 1,1}; letter_node bb = {& letter_b [0] [0], NULL, 1,1}; letter_node cc = {& letter_c [0] [0], NULL, 1,1}; letter_node tt = {& letter_t [0] [0], NULL, 1,1};
letter_node letter_map [NUMBER_OF_CHARACTERS]; #endif
Un poco más de información: - Estoy usando un Uno (ATMega328)