ฉันใช้ตัวนับลูปที่ประกาศในส่วนหัว:
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
ไอเอ็นจีloop_counter
และฉันยังได้รับพฤติกรรมแปลก ๆ (มันจะหยุดวน) Serial.println("hey");
ทำงานในแง่ที่ว่าใน Serial Monitor ฉันได้รับ "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 ; led_matrix สั้น[ num_rows ] [ num_cols ];
const สั้นletter_a [ nrows ] [ ncols ] = {{ 0 , 1 , 1 , 0 }, { 1 , 0 , 0 , 1 }, { 1 , 1 , 1 , 1 }, { 1 , 0 , 0 , 0 , 1 0 , 0 , 0 }, { 1 , 1 , 1 , 0 }, { 1 } }; const สั้นletter_b [ nrows ] [ ncols ] = {{ 1 , , 0 , 1 , 0 }, { 1 , 1 , 1 , 1 , 0 }}; const สั้นletter_c [ nrows ] [ ncols ] = {{ 0 , 1 , 1 , 1 }, { 1 , 0 , 0 , 0 }, { 1 , 0 , 0 , 0 }, { 0 , 1 , 1 , 1 }}}; const สั้น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 สั้น* ข้อมูล; letter_node * ถัดไป; 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 #
ข้อมูลเพิ่มเติม: - ฉันใช้ Uno (ATMega328)
loop()
ฟังก์ชั่นเท่านั้น ฉันควรทาสีสแต็กของฉันอย่างไรหากผลลัพธ์ที่ฉันมี ( Serial.print()
) มีเพียงวิธีเดียวที่ทำให้ฉันทำงานล้มเหลว