Estoy usando un contador de bucle, declarado en un encabezado:
int loop_counter = 0;
Uso este contador para activar un evento cada cierto tiempo. 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 (todavía 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á bien, hasta que trato de comunicarme sin Serial
comentar el //Serial.println("hey");
( "hey"
en este ejemplo porque, para mí, este comportamiento es absurdo).
Esto da como resultado que loop_counter
nunca se active la do_something_important();
sección de código. Traté de declarar loop_counter
que volatile
eso no cambió nada. Probé Serial.print
ing loop_counter
, y también estaba recibiendo un comportamiento extraño (que congelaría el bucle). Serial.println("hey");
funciona en el sentido de que en el monitor de serie obtengo un montón de "hey" (es decir, rápidamente más de 100 "heys", la cantidad de iteraciones en las que debería activarse la otra sección del código)
¿Qué podría estar causando el uso de Serial
, con datos que no están (por lo que puedo decir) vinculados para loop_counter
evitar que funcione correctamente?
EDITAR : Aquí está la parte del archivo principal que terminó presentando el problema (bueno, contribuyendo al máximo (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á "cartas.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 short * data ; letra_nodo * siguiente ; int x ; int y ; } letra_nodo ;
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 };
carta_nodo carta_mapa [ NUMBER_OF_CHARACTERS ]; #terminara si
Alguna información más: - Estoy usando un Uno (ATMega328)
loop()
función. ¿Cómo debo pintar mi pila si el único método de salida que tengo ( Serial.print()
) me falla?