Доброго времени суток. В своём устройстве использую LCD1602 через I2C. На стандартной библиотеке LiquidCrystal_I2C всё работает отлично. Но при подключении библиотеки с гитхаба , которая поддерживает кириллицу, всё перестаёт работать.
Раньше в проекте использовалась только LCD1602, и библиотека LCD_1602_RUS_ALL работала исправно. Но после добавления в проект TFT-дисплея всё пошло наперекосяк и работает только LiquidCrystal_I2C.
С чем это может быть связано?
Очень, очень качественно описание проблемы. Все бы так.
Ну, тут все сразу ясно, ошибка в строке 29 скетча
Плиз выложите два варианта кода - первый где “все работает отлично”, а второй который не работает.
Просьба коды выкладывать полностью, текстом, с использованием тегов форума.
А заодно не сочтите за труд хотя бы указать, на какой плате вы все это делаете
Вот исправно работающий код
#include <LiquidCrystal_I2C.h>
#include <SPI.h> //Подключаем библиотеку SPI
#include <SD.h> //Подключаем библиотеку для работу с micro SDHC
#include <TFT.h>
#define CS 9
#define DC 3
#define RESET 5
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
if(SD.remove("data.txt")) SD.remove("data.txt");
pinMode(CS, OUTPUT);
pinMode(8, INPUT_PULLUP); //На вход
pinMode(10, INPUT_PULLUP); //На вход
pinMode(2, OUTPUT); //На выход
pinMode(7, OUTPUT); //На выход
}
void flick(double period){ //Функция осуществляющая мелькания
digitalWrite(7, 1);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
digitalWrite(7, 0);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
}
void bip(int period){ //Функция осуществляющая звуковой сигнал
digitalWrite(2, 1);
delay(period);
digitalWrite(2, 0);
}
void loop() {
double test_t[56]={45.5, 41.7, 38.5, 35.7, 33.3, 31.2, 29.4, 27.8, 26.3, 25.0, 23.8, 22.7, 21.7,
20.8, 20.0, 19.2, 18.5, 17.9, 17.2, 16.7, 16.1, 15.6, 15.2, 14.7, 14.3, 13.9,
13.5, 13.2, 12.8, 12.5, 12.2, 11.9, 11.6, 11.4, 11.1, 10.9, 10.6, 10.4, 10.2,
10.0, 9.8, 9.6, 9.3, 9.2, 9.0, 8.8, 8.7, 8.5, 8.4, 8.2, 8.1, 8.0, 7.8, 7.7, 7.6, 7.5}; //Создаём массив периодов для монохромных мельканий в режиме "тест"
static int Button, button_mode, button_press = 0, lvl = 0, CFFF = 0, CFDF, key = 1, freq; //Создаём переменные для работы с кнопками и частотой
static unsigned long timing = 0; //Создаём переменную для работы со временем
static double timeF, timeD; //Создаём переменные для времени принятия сложного решения
static char mode = 'T'; //Создаём переменную для переключения режимов
static int time[40];
static File file;
Button = digitalRead(8); //Контроль нажатия кнопки "Да"
button_mode = digitalRead(10); //Контроль нажатия кнопки Тест/Редакс
if(!Button){button_press = 1;} //Если нажата кнопка "Да", то ожидаем
if(button_mode && !lvl && key){ //Если кнопка Тест/Редакс не нажата
mode = 'T'; key = 0; //Устанавливаем режим "Тест"
lcd.clear();
lcd.setCursor(6,0);
lcd.print("Test"); //Выводим на дипслей "Тест"
file = SD.open("data.txt", FILE_WRITE); //Создаём на micro SDHC файл для записи данных
file.println("0");
}
if(!button_mode && key < 2 && !lvl){ //Если кнопка Тест/Редакс нажата
lcd.setCursor(3,0);
lcd.print("Relaxation"); //Выводим на дисплей "Релаксация"
key = 2; mode = 'R'; //Устанавливаем режим "Релакс"
}
if(Button && button_press && lvl == 0){ //Если кнопка "Да" отжата после нажатия
if(mode == 'T'){ //Если режим - "Тест"
++lvl; freq = 10; //Устанавливаем начальную частоту в 10 Гц, переходим на режим КЧСМ
lcd.clear();
}else{lvl += 2; freq = 65;} //Если режим - "Релакс", то устанавливаем начальную частоту в 65 Гц, переходим на режим КЧРМ
button_press = 0;
bip(300); //Звуковой сигнал
}
if(lvl == 1){ //Режим КЧСМ
if(!timing) timing = millis();
if (millis() - timing < 2000) { //Таймер на 2 секунды
flick(test_t[freq-10] * 200); //Мелькания
if(button_press && Button){ //Если кнопка "Да" отжата
timeF = millis() - timing; //Вычисляем время принятия сложного решения
bip(300); //Звуковой сигнал
--button_press;
if(freq!=65)++freq; //Увеливаем частоту
else lvl = 6; //Если нарушен эксперимент, то выводится "Ошибка"
timing = 0;
if(freq!=10) file.println(String(ceil(timeF/100)/10));
if(freq > 25) time[freq - 26] = ceil(timeF/100) * 3;
}
}else{ //Если отведённое время заканчивается
if(freq == 10) lvl = 6; //Если частота равна 10 Гц, то выводим ошибку
CFFF = freq; //Запоминаем КЧСМ
freq = 65; //Устанавливаем частоту в 65 Гц
lvl = 2; timing = 0; //Переходим на измерение КЧРМ
delay(2000);
bip(300); //Звуковой сигнал
}
}
if(lvl == 2){ //Режим КЧРМ
if(!timing) timing = millis();
if (millis() - timing < 2000) { //Таймер на 2 секунды
flick(test_t[freq-10] * 200); //Мелькания
if(button_press && Button){ //Если кнопка "Да" отжата
CFDF = freq; lvl = 3; //Запоминаем КЧРМ
timeD = millis() - timing; //Запоминаем время принятия сложного решения
timing = 0;
if(CFFF){ //Если режим - "Тест", то записываем время принятия сложного решения и часто-ту
file.println("-");
file.println(String(CFDF) + " " + String(ceil(timeD/100)/10));
file.close();
digitalWrite(4, LOW);
}
--button_press;
bip(2000); //Звуковой сигнал
}
}else{ //Если отведённое время заканчивается
if(freq == 10) lvl = 6; //Если нарушен эксперимент, то выводится "Ошибка"
--freq; timing = millis(); //Уменьшаем частоту
bip(300); //Звуковой сигнал
}
}
if(lvl == 3){ //Вывод данных на дисплей
lcd.setCursor(0,1);
lcd.print("CFDF");
lcd.setCursor(6,1);
lcd.print(CFDF);
lcd.setCursor(8,1);
lcd.print("Hz");
lcd.setCursor(12,1);
lcd.print(ceil(timeD/100)/10);
lcd.setCursor(15,1);
lcd.print("s");
if(mode == 'T'){
lcd.setCursor(0,0);
lcd.print("CFFF");
lcd.setCursor(6,0);
lcd.print(CFFF);
lcd.setCursor(8,0);
lcd.print("Hz");
lcd.setCursor(12,0);
lcd.print(ceil(timeF/100)/10);
lcd.setCursor(15,0);
lcd.print("s");
}else{
timing = millis();
while(millis() - timing < 180000) flick(5/(CFDF*1.8)); // Если режим - "Релакс", то проводим релаксацию
}
lvl = 5;
digitalWrite(CS, HIGH);
TFT tft = TFT(CS, DC, RESET);
tft.begin();
tft.background(0,0,0);
tft.stroke(255,255,255);
tft.line((CFDF - 26)*4, 65, (CFDF - 26)*4, 65 + ceil(timeF/100)*3);
tft.line((CFDF - 26)*4 + 1, 65, (CFDF - 26)*4 + 1, 65 + ceil(timeF/100)*3);
for(int i = 0; i < 40; i++){
tft.line(i*4, 64, i*4, 64 - time[i]);
tft.line(i*4 + 1, 64, i*4 + 1, 64 - time[i]);
}
}
if(lvl == 6){
bip(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Error"); //Выводим на экран надпись "Ошибка"
lvl = 5;
}
}
А вот код при котором LCD перестаёт как-либо реагировать и всё останавливается
#define _LCD_TYPE 1
#include <LCD_1602_RUS_ALL.h>
#include <SPI.h> //Подключаем библиотеку SPI
#include <SD.h> //Подключаем библиотеку для работу с micro SDHC
#include <TFT.h>
#define CS 9
#define DC 3
#define RESET 5
LCD_1602_RUS <LiquidCrystal_I2C> lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
if(SD.remove("data.txt")) SD.remove("data.txt");
pinMode(CS, OUTPUT);
pinMode(8, INPUT_PULLUP); //На вход
pinMode(10, INPUT_PULLUP); //На вход
pinMode(2, OUTPUT); //На выход
pinMode(7, OUTPUT); //На выход
}
void flick(double period){ //Функция осуществляющая мелькания
digitalWrite(7, 1);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
digitalWrite(7, 0);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
}
void bip(int period){ //Функция осуществляющая звуковой сигнал
digitalWrite(2, 1);
delay(period);
digitalWrite(2, 0);
}
void loop() {
double test_t[56]={45.5, 41.7, 38.5, 35.7, 33.3, 31.2, 29.4, 27.8, 26.3, 25.0, 23.8, 22.7, 21.7,
20.8, 20.0, 19.2, 18.5, 17.9, 17.2, 16.7, 16.1, 15.6, 15.2, 14.7, 14.3, 13.9,
13.5, 13.2, 12.8, 12.5, 12.2, 11.9, 11.6, 11.4, 11.1, 10.9, 10.6, 10.4, 10.2,
10.0, 9.8, 9.6, 9.3, 9.2, 9.0, 8.8, 8.7, 8.5, 8.4, 8.2, 8.1, 8.0, 7.8, 7.7, 7.6, 7.5}; //Создаём массив периодов для монохромных мельканий в режиме "тест"
static int Button, button_mode, button_press = 0, lvl = 0, CFFF = 0, CFDF, key = 1, freq; //Создаём переменные для работы с кнопками и частотой
static unsigned long timing = 0; //Создаём переменную для работы со временем
static double timeF, timeD; //Создаём переменные для времени принятия сложного решения
static char mode = 'T'; //Создаём переменную для переключения режимов
static int time[40];
static File file;
Button = digitalRead(8); //Контроль нажатия кнопки "Да"
button_mode = digitalRead(10); //Контроль нажатия кнопки Тест/Редакс
if(!Button){button_press = 1;} //Если нажата кнопка "Да", то ожидаем
if(button_mode && !lvl && key){ //Если кнопка Тест/Редакс не нажата
mode = 'T'; key = 0; //Устанавливаем режим "Тест"
lcd.clear();
lcd.setCursor(6,0);
lcd.print("Test"); //Выводим на дипслей "Тест"
file = SD.open("data.txt", FILE_WRITE); //Создаём на micro SDHC файл для записи данных
file.println("0");
}
if(!button_mode && key < 2 && !lvl){ //Если кнопка Тест/Редакс нажата
lcd.setCursor(3,0);
lcd.print("Relaxation"); //Выводим на дисплей "Релаксация"
key = 2; mode = 'R'; //Устанавливаем режим "Релакс"
}
if(Button && button_press && lvl == 0){ //Если кнопка "Да" отжата после нажатия
if(mode == 'T'){ //Если режим - "Тест"
++lvl; freq = 10; //Устанавливаем начальную частоту в 10 Гц, переходим на режим КЧСМ
lcd.clear();
}else{lvl += 2; freq = 65;} //Если режим - "Релакс", то устанавливаем начальную частоту в 65 Гц, переходим на режим КЧРМ
button_press = 0;
bip(300); //Звуковой сигнал
}
if(lvl == 1){ //Режим КЧСМ
if(!timing) timing = millis();
if (millis() - timing < 2000) { //Таймер на 2 секунды
flick(test_t[freq-10] * 200); //Мелькания
if(button_press && Button){ //Если кнопка "Да" отжата
timeF = millis() - timing; //Вычисляем время принятия сложного решения
bip(300); //Звуковой сигнал
--button_press;
if(freq!=65)++freq; //Увеливаем частоту
else lvl = 6; //Если нарушен эксперимент, то выводится "Ошибка"
timing = 0;
if(freq!=10) file.println(String(ceil(timeF/100)/10));
if(freq > 25) time[freq - 26] = ceil(timeF/100) * 3;
}
}else{ //Если отведённое время заканчивается
if(freq == 10) lvl = 6; //Если частота равна 10 Гц, то выводим ошибку
CFFF = freq; //Запоминаем КЧСМ
freq = 65; //Устанавливаем частоту в 65 Гц
lvl = 2; timing = 0; //Переходим на измерение КЧРМ
delay(2000);
bip(300); //Звуковой сигнал
}
}
if(lvl == 2){ //Режим КЧРМ
if(!timing) timing = millis();
if (millis() - timing < 2000) { //Таймер на 2 секунды
flick(test_t[freq-10] * 200); //Мелькания
if(button_press && Button){ //Если кнопка "Да" отжата
CFDF = freq; lvl = 3; //Запоминаем КЧРМ
timeD = millis() - timing; //Запоминаем время принятия сложного решения
timing = 0;
if(CFFF){ //Если режим - "Тест", то записываем время принятия сложного решения и часто-ту
file.println("-");
file.println(String(CFDF) + " " + String(ceil(timeD/100)/10));
file.close();
digitalWrite(4, LOW);
}
--button_press;
bip(2000); //Звуковой сигнал
}
}else{ //Если отведённое время заканчивается
if(freq == 10) lvl = 6; //Если нарушен эксперимент, то выводится "Ошибка"
--freq; timing = millis(); //Уменьшаем частоту
bip(300); //Звуковой сигнал
}
}
if(lvl == 3){ //Вывод данных на дисплей
lcd.setCursor(0,1);
lcd.print("CFDF");
lcd.setCursor(6,1);
lcd.print(String(CFDF));
lcd.setCursor(8,1);
lcd.print("Hz");
lcd.setCursor(12,1);
lcd.print(String(ceil(timeD/100)/10));
lcd.setCursor(15,1);
lcd.print("s");
if(mode == 'T'){
lcd.setCursor(0,0);
lcd.print("CFFF");
lcd.setCursor(6,0);
lcd.print(String(CFFF));
lcd.setCursor(8,0);
lcd.print("Hz");
lcd.setCursor(12,0);
lcd.print(String(ceil(timeF/100)/10));
lcd.setCursor(15,0);
lcd.print("s");
}else{
timing = millis();
while(millis() - timing < 180000) flick(5/(CFDF*1.8)); // Если режим - "Релакс", то проводим релаксацию
}
lvl = 5;
digitalWrite(CS, HIGH);
TFT tft = TFT(CS, DC, RESET);
tft.begin();
tft.background(0,0,0);
tft.stroke(255,255,255);
tft.line((CFDF - 26)*4, 65, (CFDF - 26)*4, 65 + ceil(timeF/100)*3);
tft.line((CFDF - 26)*4 + 1, 65, (CFDF - 26)*4 + 1, 65 + ceil(timeF/100)*3);
for(int i = 0; i < 40; i++){
tft.line(i*4, 64, i*4, 64 - time[i]);
tft.line(i*4 + 1, 64, i*4 + 1, 64 - time[i]);
}
}
if(lvl == 6){
bip(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Error"); //Выводим на экран надпись "Ошибка"
lvl = 5;
}
}
К сожалению я не нашёл теги “lcd” и “tft”
12 строка - это почему так?
Потому что в примерах к библиотеке так
Вранье. Идем по вашей ссылке, заходим в примеры, смотрим строку 8, сравниваем и много думаем
//Пример для подключения дисплея по шине I2C
//
//Тип подключения дисплея: 1 - по шине I2C, 2 - десятиконтактное. Обязательно указывать ДО подключения библиотеки
//Если этого не сделать, при компиляции возникнет ошибка: "LCD type connect has not been declared"
#define _LCD_TYPE 1
#include <LCD_1602_RUS_ALL.h>
LCD_1602_RUS lcd(0x27, 16, 2);
void setup() {
String str;
str = ". Hexadecimal";
lcd.init(); //Инициализация LCD (по умолчанию для ESP8266: 4 - SDA, 5 - SCL)
//lcd.init(0, 2); //ESP8266-01 I2C: 0 - SDA, 2 - SCL
// Печать сообщения на LCD
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(1, DEC);
lcd.print(". Десятичная");
lcd.setCursor(0, 1);
lcd.print(15, HEX);
lcd.print(str);
}
void loop() {
}
все пролистал!
везде нормальное обявление
LCD_1602_RUS lcd(0x27, 16, 2);
Хм. Видно у меня старый вариант библиотеки. Т.к. при написании LCD_1602_RUS lcd(0x27, 16, 2);
выдаёт ошибку “invalid use of template-name ‘LCD_1602_RUS’ without an argument list”.
До подключения TFT-дисплея код со строкой LCD_1602_RUS <LiquidCrystal_I2C> lcd(0x27, 16, 2);
работал на ура.
При попытке обновления библиотеки выдаёт
Error: 13 INTERNAL: Library install failed: moving extracted archive to destination dir: Library LCD_1602_RUS_ALL is already installed, but with a different version: LCD_1602_RUS_ALL@1.2.0
Вот ссылка на старый вариант Библиотека LCD_1602_RUS_ALL для Ардуино – Focma
Ну так удалите старую перед установкой новой
Обновил библиотеку, но ничего не поменялось
Всё ещё не работающий код
#define _LCD_TYPE 1
#include <LCD_1602_RUS_ALL.h>
#include <SPI.h> //Подключаем библиотеку SPI
#include <SD.h> //Подключаем библиотеку для работу с micro SDHC
#include <TFT.h>
#define CS 9
#define DC 3
#define RESET 5
LCD_1602_RUS lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
if(SD.remove("data.txt")) SD.remove("data.txt");
pinMode(CS, OUTPUT);
pinMode(8, INPUT_PULLUP); //На вход
pinMode(10, INPUT_PULLUP); //На вход
pinMode(2, OUTPUT); //На выход
pinMode(7, OUTPUT); //На выход
}
void flick(double period){ //Функция осуществляющая мелькания
digitalWrite(7, 1);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
digitalWrite(7, 0);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
delayMicroseconds(period);
}
void bip(int period){ //Функция осуществляющая звуковой сигнал
digitalWrite(2, 1);
delay(period);
digitalWrite(2, 0);
}
void loop() {
double test_t[56]={45.5, 41.7, 38.5, 35.7, 33.3, 31.2, 29.4, 27.8, 26.3, 25.0, 23.8, 22.7, 21.7,
20.8, 20.0, 19.2, 18.5, 17.9, 17.2, 16.7, 16.1, 15.6, 15.2, 14.7, 14.3, 13.9,
13.5, 13.2, 12.8, 12.5, 12.2, 11.9, 11.6, 11.4, 11.1, 10.9, 10.6, 10.4, 10.2,
10.0, 9.8, 9.6, 9.3, 9.2, 9.0, 8.8, 8.7, 8.5, 8.4, 8.2, 8.1, 8.0, 7.8, 7.7, 7.6, 7.5}; //Создаём массив периодов для монохромных мельканий в режиме "тест"
static int Button, button_mode, button_press = 0, lvl = 0, CFFF = 0, CFDF, key = 1, freq; //Создаём переменные для работы с кнопками и частотой
static unsigned long timing = 0; //Создаём переменную для работы со временем
static double timeF, timeD; //Создаём переменные для времени принятия сложного решения
static char mode = 'T'; //Создаём переменную для переключения режимов
static int time[40];
static File file;
Button = digitalRead(8); //Контроль нажатия кнопки "Да"
button_mode = digitalRead(10); //Контроль нажатия кнопки Тест/Редакс
if(!Button){button_press = 1;} //Если нажата кнопка "Да", то ожидаем
if(button_mode && !lvl && key){ //Если кнопка Тест/Редакс не нажата
mode = 'T'; key = 0; //Устанавливаем режим "Тест"
lcd.clear();
lcd.setCursor(6,0);
lcd.print("Test"); //Выводим на дипслей "Тест"
file = SD.open("data.txt", FILE_WRITE); //Создаём на micro SDHC файл для записи данных
file.println("0");
}
if(!button_mode && key < 2 && !lvl){ //Если кнопка Тест/Редакс нажата
lcd.setCursor(3,0);
lcd.print("Relaxation"); //Выводим на дисплей "Релаксация"
key = 2; mode = 'R'; //Устанавливаем режим "Релакс"
}
if(Button && button_press && lvl == 0){ //Если кнопка "Да" отжата после нажатия
if(mode == 'T'){ //Если режим - "Тест"
++lvl; freq = 10; //Устанавливаем начальную частоту в 10 Гц, переходим на режим КЧСМ
lcd.clear();
}else{lvl += 2; freq = 65;} //Если режим - "Релакс", то устанавливаем начальную частоту в 65 Гц, переходим на режим КЧРМ
button_press = 0;
bip(300); //Звуковой сигнал
}
if(lvl == 1){ //Режим КЧСМ
if(!timing) timing = millis();
if (millis() - timing < 2000) { //Таймер на 2 секунды
flick(test_t[freq-10] * 200); //Мелькания
if(button_press && Button){ //Если кнопка "Да" отжата
timeF = millis() - timing; //Вычисляем время принятия сложного решения
bip(300); //Звуковой сигнал
--button_press;
if(freq!=65)++freq; //Увеливаем частоту
else lvl = 6; //Если нарушен эксперимент, то выводится "Ошибка"
timing = 0;
if(freq!=10) file.println(String(ceil(timeF/100)/10));
if(freq > 25) time[freq - 26] = ceil(timeF/100) * 3;
}
}else{ //Если отведённое время заканчивается
if(freq == 10) lvl = 6; //Если частота равна 10 Гц, то выводим ошибку
CFFF = freq; //Запоминаем КЧСМ
freq = 65; //Устанавливаем частоту в 65 Гц
lvl = 2; timing = 0; //Переходим на измерение КЧРМ
delay(2000);
bip(300); //Звуковой сигнал
}
}
if(lvl == 2){ //Режим КЧРМ
if(!timing) timing = millis();
if (millis() - timing < 2000) { //Таймер на 2 секунды
flick(test_t[freq-10] * 200); //Мелькания
if(button_press && Button){ //Если кнопка "Да" отжата
CFDF = freq; lvl = 3; //Запоминаем КЧРМ
timeD = millis() - timing; //Запоминаем время принятия сложного решения
timing = 0;
if(CFFF){ //Если режим - "Тест", то записываем время принятия сложного решения и часто-ту
file.println("-");
file.println(String(CFDF) + " " + String(ceil(timeD/100)/10));
file.close();
digitalWrite(4, LOW);
}
--button_press;
bip(2000); //Звуковой сигнал
}
}else{ //Если отведённое время заканчивается
if(freq == 10) lvl = 6; //Если нарушен эксперимент, то выводится "Ошибка"
--freq; timing = millis(); //Уменьшаем частоту
bip(300); //Звуковой сигнал
}
}
if(lvl == 3){ //Вывод данных на дисплей
lcd.setCursor(0,1);
lcd.print("CFDF");
lcd.setCursor(6,1);
lcd.print(String(CFDF));
lcd.setCursor(8,1);
lcd.print("Hz");
lcd.setCursor(12,1);
lcd.print(String(ceil(timeD/100)/10));
lcd.setCursor(15,1);
lcd.print("s");
if(mode == 'T'){
lcd.setCursor(0,0);
lcd.print("CFFF");
lcd.setCursor(6,0);
lcd.print(String(CFFF));
lcd.setCursor(8,0);
lcd.print("Hz");
lcd.setCursor(12,0);
lcd.print(String(ceil(timeF/100)/10));
lcd.setCursor(15,0);
lcd.print("s");
}else{
timing = millis();
while(millis() - timing < 180000) flick(5/(CFDF*1.8)); // Если режим - "Релакс", то проводим релаксацию
}
lvl = 5;
digitalWrite(CS, HIGH);
TFT tft = TFT(CS, DC, RESET);
tft.begin();
tft.background(0,0,0);
tft.stroke(255,255,255);
tft.line((CFDF - 26)*4, 65, (CFDF - 26)*4, 65 + ceil(timeF/100)*3);
tft.line((CFDF - 26)*4 + 1, 65, (CFDF - 26)*4 + 1, 65 + ceil(timeF/100)*3);
for(int i = 0; i < 40; i++){
tft.line(i*4, 64, i*4, 64 - time[i]);
tft.line(i*4 + 1, 64, i*4 + 1, 64 - time[i]);
}
}
if(lvl == 6){
bip(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Error"); //Выводим на экран надпись "Ошибка"
lvl = 5;
}
}
Не работающий - это как?
А если пример от библиотеки залить, работает?
вы не ответили на вопрос, какая ардуина используется… или я пропустил?
Прошу прощения. Используется Nano
не кого не напрягает?
Примеры из библиотеки работают исправно.
При загрузке моего кода LCD1602 просто светится и всё, а должна выводить слово “Test”. Ардуинка при этом не подаёт никаких признаков жизни.
До подключения TFT всё исправно работало.
LCD , TFT, Sd-карта, огромный массив каких-то данных типа double… и все это в Нано?
Думаю что у вас просто не хватает памяти
Для проверки поменяйте Нано на Мегу.
При использовании “LiquidCrystal_I2C” всё работает.
Возможно и вправду памяти не хватает на “LCD_1602_RUS_ALL”. Но разве в таком случае при компиляции IDE не должно говорить про недостаточное количество динамической памяти? IDE молчит.
Нано на Мегу не могу поменять, Мега не влезит в корпус