Sto usando un contatore di loop, dichiarato in un'intestazione:
int loop_counter = 0;
Uso questo contatore per attivare un evento ogni tanto. Utilizzavo un modulo per questo stesso tipo di comportamento, ma l'ho semplificato in modo che sia più facile lavorare con (comporta comunque lo stesso comportamento)
void loop() {
if(loop_counter > 100) loop_counter = 0;
else loop_counter++;
//Serial.println("hey");
if(loop_counter == 0) {
//do_something_important();
}
}
Va tutto bene, finché non provo a comunicare con il Serial
commento //Serial.println("hey");
( "hey"
in questo esempio perché, per me, questo comportamento è assurdo).
Ciò si traduce in loop_counter
non attivare mai la do_something_important();
sezione di codice. Ho provato dichiarando loop_counter
come volatile
, che non cambia nulla. Ho provato Serial.print
ing loop_counter
, e mi è stato anche sempre un comportamento strano (sarebbe congelare la loop). Serial.println("hey");
funziona nel senso che nel monitor seriale ottengo un sacco di "ehi", (cioè rapidamente molto più di 100 "ehi", il numero di iterazioni in cui dovrebbe attivarsi l'altra sezione di codice)
Cosa potrebbe causare l'utilizzo di Serial
, con dati che non sono (per quanto posso dire) legati per loop_counter
impedirne il corretto funzionamento?
EDIT : Ecco la parte del file principale che ha finito per porre il problema (beh, contribuendo maggiormente ad esso (usando troppa 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);
}
}
Ecco "lettere.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;loop_counter = 0 ; short led_matrix [num_rows] [num_cols];short led_matrix [ num_rows ] [ num_cols ];
const short letter_a [nrows] [ncols] = {{0,1,1,0}, short letter_a [ nrows ] [ ncols ] = {{ 0 , 1 , 1 , 0 }, {1,0,0,1},{ 1 , 0 , 0 , 1 }, {1,1,1,1},{ 1 , 1 , 1 , 1 }, {1,0,0,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_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_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} };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 { struct letter_node { const * brevi dati;const * brevi dati ; letter_node * successivo;* successivo ; int x;int x ; int y;int y ; } letter_node;} letter_node ;
letter_node aa = {& letter_a [0] [0], NULL, 1,1}; = {& 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 ]; #finisci se
Qualche informazione in più: - Sto usando uno (ATMega328)
loop()
funzione. Come devo dipingere il mio stack se l'unico metodo di output che ho ( Serial.print()
) mi sta fallendo?