ЛДЦ в паре с Ардуино зависает и зависает. Закончились СПРАМ?
Я делаю будильник, используя ЖК-дисплей 4x20, RTC и Arduino Pro Mini 3,3 В. Я реализовал систему меню для установки времени/даты, которая мигает текстом на ЖК-дисплее, чтобы указать, что я его выбрал, но мигание случайным образом прекращается, и Arduino перестает печатать по последовательному порту примерно через десять секунд.
После долгих поисков и поиска в Google я пришел к выводу, что все мои строки lcd.print() использовали всю мою оперативную память. Я пытался создать переменные PROGMEM для использования в командах печати, но мне не удалось заставить их работать, поэтому я просто добавил макрос F() в каждый оператор печати (их много). Теперь все печатается, как и ожидалось, но Arduino все равно зависает через такое же время. Я неправильно использую F() или проблема в чем-то другом, например в мощности???
В коде Visual Studio указано, что при загрузке кода я использую 643/2048 байт данных/оперативной памяти и 14960/30720 байт флэш-памяти. (то есть с реализованным макросом F())
--------------РЕДАКТИРОВАНИЕ----------------
Итак, я создал небольшой тестовый скетч для использования с той же схемой, и теперь я в полном замешательстве. Я работаю на нем уже около часа, и он все еще не замерзает. Скрипт мигает полным экраном с числовыми знаками каждые 200 мс. Подсветка включена и все по-прежнему питается так же. Теоретически это исключает как нехватку оперативной памяти, так и недостаточную мощность. Есть еще идеи?
#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClibExtended.h>
LiquidCrystal_I2C lcd(0x27,20,4);
RTC_DS3231 clock;
void setup() {
Serial.begin (9600);
lcd.init();
clock.begin();
clock.adjust (DateTime (__DATE__, __TIME__));
lcd.backlight();
}
bool on = true;
void loop() {
lcd.setCursor (0, 0);
if (on) {
for (int i = 0; i < 4; i++) {
lcd.setCursor (0, i);
for (int j = 0; j < 20; j++) {
lcd.print ("#");
}
}
}
else {
for (int i = 0; i < 4; i++) {
lcd.setCursor (0, i);
for (int j = 0; j < 20; j++) {
lcd.print (" ");
}
}
}
on = !on;
delay (200);
}
@cr5519, 👍0
Обсуждение1 ответ
Лучший ответ:
Я нашел проблему! это было специфично для моего кода и не имело ничего общего с оперативной памятью или питанием. Проблема была в том, что я не отключил прерывание от rtc, когда разбудил его кнопкой. Казалось бы, он зависал случайно, потому что rtc подавал сигнал прерывания, когда тикала следующая минута, пока Arduino не спал. Я предполагаю, что это вызывает проблемы, когда вы пытаетесь прервать сон Arduino, а он на самом деле не спит. Все, что мне нужно было сделать, это отключить оба прерывания при нажатии кнопки. Спасибо всем за помощь :)
- Как остановить SoftwareSerial от получения данных и повторно включить его в какой-то другой момент?
- Сторожевой таймер застрял в цикле перезапуска? (мигает зеленый светодиод)
- Отправка команд PUBX на плату GPS (Ublox NEO-6M) через SoftwareSerial
- Мусор последовательного монитора Arduino Pro Mini
- Проблема с массивом + последовательным монитором
- Почему SoftwareSerial не работает как надо на Arduino Pro Mini 3v3?
- lcd.clear не работает с Serial.begin(9600) на Arduino Mega 2560
- avrdude: stk500_recv(): программатор не отвечает, arduino pro
добавьте свой код в вопрос., @Juraj
Для ЖК-дисплея требуется 5 В, а для Arduino — профессиональная мини-плата с напряжением 3,3 В. Как ты это подключил? Есть ли длинные провода к rtc и дисплею?, @Jot
Учитывая то, что сказал Джот и мой собственный WAG, похоже, что вы пытаетесь получить слишком большую мощность, что может привести к перегреву регулятора мощности. Как только вы добавите некоторый код, мы увидим, есть ли это альтернативная возможность., @computercarguy
У меня Arduino подключен к USB-порту моего компьютера, а rtc и ЖК-дисплей подключены к контакту vcc на Arduino. Я использую ЖК-дисплей без подсветки, так ему все равно нужно 5 В? Кроме того, я попытался использовать 9-вольтовую батарею для питания схемы (подключил Arduino к батарее через необработанный контакт и подключил ЖК-дисплей и RTC непосредственно к батарее вместо контакта VCC от Arduino), но ЖК-дисплей все равно зависает. Было бы полезно, если бы я выложил схему? Мой код имеет длину более 1000 строк, поэтому я не уверен, как лучше всего поделиться им с вами., @cr5519
создайте небольшой тестовый эскиз, чтобы проверить, связана ли проблема с питанием или перегревом, @Juraj
@Юрай, я опубликовал один, @cr5519
*Есть еще идеи?* — в вашем более длинном коде есть проблема, которой нет в меньшем коде. Трудно сказать, что это такое, не видя более длинного кода., @Nick Gammon