我正在使用在标头中声明的循环计数器:
int loop_counter = 0;
我经常使用此计数器触发事件。我曾经对这种类型的行为使用模,但是我简化了它,因此使用起来更容易(它仍然会导致相同的行为)
void loop() {
if(loop_counter > 100) loop_counter = 0;
else loop_counter++;
//Serial.println("hey");
if(loop_counter == 0) {
//do_something_important();
}
}
一切都很好,直到我尝试Serial
取消注释//Serial.println("hey");
("hey"
在此示例中,因为对我而言,这种行为是荒谬的)来与之交流。
这将导致loop_counter
永远不会触发do_something_important();
代码部分。我尝试声明loop_counter
为volatile
,但没有任何改变。我尝试了Serial.print
ing loop_counter
,而且我也得到了奇怪的行为(它将冻结循环)。 Serial.println("hey");
在串行监视器中,我得到很多“嘿”的意思(即很快超过100个“嘿”,这是另一部分代码应触发的迭代次数)
是什么原因导致的使用Serial
,而数据(据我所知)并未loop_counter
完全阻止其正常运行?
编辑:这是最终导致问题的主文件部分(嗯,为它做出了最大的贡献(使用过多的内存)):
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);
}
}
这是“ 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 ; 简短的led_matrix [ num_rows ] [ num_cols ];
常量短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 }}; 常量短letter_c [ NROWS ] [ NCOLS ] = {{ 0 ,1 ,1 ,1 },{ 1 ,0 ,0 ,0 },{ 1 , 0 ,0 ,0 },{ 0 ,1 ,1 ,1 }}; 常量短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 ; letter_node * 下一个;整数x ; INT ÿ ; } 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 ]; #万一
一些更多信息:-我正在使用Uno(ATMega328)
loop()
函数中使用它。如果我只有(Serial.print()
)的输出方法使我失败,我应该如何绘画我的堆栈?