Другая либа - это хорошо, но почему же все-таки исходный код глючит?
На моё скромное ИМХО, проблема скорее аппаратная.
Я бы другую UNO подкинул
Я библиотеку не видел, но если там динамическая память используется - вполне крах по ней может быть.
Я “подкинул” в Протеусе, всё норм.
В протеусе и короткое замыкание «норм»…
Специально не проверял, позже проверю. Но выход за адрес памяти всегда показывал.
Там скетч то - “10 циферок по SPI передать”))
Это вся библиотека?
Нет конечно. Но разве вся библиотека должна обязательно загружаться и использоваться?
Не вся, только взаимосвязанные части.
Вот и я о том. В любом случае, я лишь высказываю
Так и я «истину в единой инстанции» не утверждал.
В общем, у меня есть нано (чем не уно? ). В “быстром доступе” (что я использую для чего-то быстро проверить) у меня только на 168 чипе. По флэш влезает.
Скетч использует 3758 байт (26%) памяти устройства. Всего доступно 14336 байт.
Глобальные переменные используют 288 байт (28%) динамической памяти, оставляя 736 байт для локальных переменных. Максимум: 1024 байт.
Загружаю вот такой код туда (добавил вывод в сериал и помигать диодом на 13 пине):
Сам код
//UNO
//Подключение библиотеки max7219
#include "LedControl.h" // Бибилотека то хоть та? Брал тут: https://github.com/brodykenrick/MAX72xx_SPI_Arduino
#define LED 13
//создаём объект класса LedControl (din,clk,cs,X) X - количество модулей. Провода: din-оранжевый, clk-зеленый, cs-желтый, vcc-коричневый, gnd-красный
LedControl lc_test = LedControl(11, 9, 10, 3);
uint32_t old;
void setup() {
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
//Инициализация max7219
lc_test.shutdown(0, false); //Выводим из спящего режима
lc_test.setIntensity(0, 4); //Яркость дисплея на 4. Всего возможных режимов яркости от 0 до 15
lc_test.clearDisplay(0); //Очистить дисплей
lc_test.shutdown(1, false); //Выводим из спящего режима
lc_test.setIntensity(1, 4); //Яркость дисплея на 4. Всего возможных режимов яркости от 0 до 15
lc_test.clearDisplay(1); //Очистить дисплей
lc_test.shutdown(2, false); //Выводим из спящего режима
lc_test.setIntensity(2, 4); //Яркость дисплея на 4. Всего возможных режимов яркости от 0 до 15
lc_test.clearDisplay(2); //Очистить дисплей
//===========
Serial.begin(9600);
old = millis();
pinMode (LED, OUTPUT);
digitalWrite(LED, HIGH);
}
void loop() {
if (millis() - old >= 1000) {
old = millis();
digitalWrite(LED, !digitalRead(LED));
Serial.print("Seconds:");
Serial.println((millis() % 1000));
}
lc_test.setDigit(0, 7, 0, true);
delay(500);
lc_test.setDigit(0, 6, 1, true);
delay(500);
lc_test.setDigit(0, 5, 2, true);
delay(500);
lc_test.setDigit(0, 4, 3, true);
delay(500);
lc_test.setDigit(0, 3, 4, true);
delay(500);
lc_test.setDigit(0, 2, 5, true);
delay(500);
lc_test.setDigit(0, 1, 6, true);
delay(500);
lc_test.setDigit(0, 0, 7, true);
delay(500);
lc_test.clearDisplay(0); //Очистить дисплей
lc_test.setDigit(1, 7, 8, true);
delay(500);
lc_test.setDigit(1, 6, 9, true);
delay(500);
lc_test.setDigit(1, 5, 0, true);
delay(500);
lc_test.setDigit(1, 4, 1, true);
delay(500);
lc_test.setDigit(1, 3, 2, true);
delay(500);
lc_test.setDigit(1, 2, 3, true);
delay(500);
lc_test.setDigit(1, 1, 4, true);
delay(500);
lc_test.setDigit(1, 0, 5, true);
delay(500);
lc_test.clearDisplay(1); //Очистить дисплей
lc_test.setDigit(2, 7, 6, true);
delay(500);
lc_test.setDigit(2, 6, 7, true);
delay(500);
lc_test.setDigit(2, 5, 8, true);
delay(500);
lc_test.setDigit(2, 4, 9, true);
delay(500);
lc_test.setDigit(2, 3, 0, true);
delay(500);
lc_test.setDigit(2, 2, 1, true);
delay(500);
lc_test.setDigit(2, 1, 2, true);
delay(500);
lc_test.setDigit(2, 0, 3, true);
delay(500);
lc_test.clearDisplay(2); //Очистить дисплей
}
Это “тупо” скажите вы, и будете правы. Особенно с миллис среди делеев. Но он работает.
Посмотри что будет дальше…
Напомню - в 168 чипе 16кб флэшь и 1 кб ОЗУ.
Пока так:
Seconds:65
Seconds:105
Seconds:147
Seconds:187
Seconds:228
Seconds:269
Seconds:310
Оставляю на время…
Результат мне не понятен, но он имеется и не в пользу протеуса…
Обратите внимание на строки 23 и 24, а так же 48 и 49.
Seconds:65
Seconds:105
Seconds:147
Seconds:187
Seconds:228
Seconds:269
Seconds:310
Seconds:351
Seconds:392
Seconds:432
Seconds:473
Seconds:514
Seconds:555
Seconds:596
Seconds:636
Seconds:677
Seconds:719
Seconds:759
Seconds:800
Seconds:840
Seconds:881
Seconds:923
Seconds:963
Seconds:4
Seconds:44
Seconds:85
Seconds:127
Seconds:167
Seconds:208
Seconds:249
Seconds:289
Seconds:331
Seconds:371
Seconds:412
Seconds:453
Seconds:494
Seconds:535
Seconds:576
Seconds:616
Seconds:657
Seconds:698
Seconds:739
Seconds:780
Seconds:820
Seconds:861
Seconds:903
Seconds:943
Seconds:984
Seconds:24
Seconds:65
Seconds:107
Похоже в мк произошел “сброс”. Почему?
Почему похоже - так и есть
Не знаю только - библиотека то та или нет?
Ну int везде (где и не надо) присутствует
Не для спора, а для “истины”))
Однако, не совсем корректный пример, т.к.
- Памяти в два раза меньше
- У ТС сериала нет, а он сам “жрёт” не мало
Но я же привел данные «входные»:
Если отсюда, то та
- Однако ее хватает за глаза
- Ну не настолько же ))
А вот и описанный автором «косяк», который я не сразу заметил…
Видно, что по сериалу прошло больше 2000 секунд вроде как. А это ПОЛЧАСА. На самом деле всё работало минут 5-8, не более…