헤더에 선언 된 루프 카운터를 사용하고 있습니다.
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");
직렬 모니터에서 많은 "hey"(즉, 100 개 이상의 "heys", 다른 코드 섹션이 트리거해야하는 반복 횟수)를 얻는다는 의미에서 작동합니다.
(내가 알 수있는 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;loop_counter = 0 ; 짧은 led_matrix [num_rows] [num_cols];짧은 led_ 행렬 [ num_rows ] [ num_cols ];
const short letter_a [nrows] [ncols] = {{0,1,1,0}, 짧은 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 short * data;const short * data ; letter_node * 다음;* 다음 ; 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_b [ 0 ] [ 0 ], NULL , 1 , 1 }; letter_node cc = {& letter_c [0] [0], NULL, 1,1};= {& letter_c [ 0 ] [ 0 ], NULL , 1 , 1 }; letter_node tt = {& letter_t [0] [0], NULL, 1,1};= {& letter_t [ 0 ] [ 0 ], NULL , 1 , 1 };
letter_node letter_map [NUMBER_OF_CHARACTERS];[ NUMBER_OF_CHARACTERS ]; #endif#endif
추가 정보 :-Uno (ATMega328)를 사용하고 있습니다.
loop()
기능 에서만 사용합니다 . 내가 가지고있는 유일한 출력 방법 ( Serial.print()
)이 실패 하면 어떻게 스택을 페인트해야 합니까?