Я використовую лічильник циклу, оголошений у заголовку:
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
повністю перешкодити роботі належним чином?
EDIT : Ось частина основного файлу, яка постала перед проблемою (ну, доклавши до неї найбільше (використовуючи занадто багато пам'яті)):
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);
}
}
Ось "літери.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 коротка літера_a [ nrows ] [ ncols ] = {{ 0 , 1 , 1 , 0 }, { 1 , 0 , 0 , 1 }, { 1 , 1 , 1 , 1 }, { 1 , 0 , 0 , 1 } }; const короткий letter_b [ nrows ] [ ncols ] = {{ 1 , 0 , 0 , 0 }, { 1 , 1 , 1 , 0 }, { 1 , 0 , 1 , 0 }, { 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 short * data ; 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()
), не відповідає мені?