Приветствую ВАС уважаемые. Возникла проблема с русскими букафками. На дисплее ILI9341 240*320 3", с библиотекой Adafruit-GFX. Дело в том что при моделировании в Proteus кириллица виртуально отображается отлично, в реале ни черта не отображается.
В чем может быть проблема? В прошивке указывается кодировка utf8 для отображения русских символов. Но в реальной жизни отображать не хочет.
Ошибка в строке №78.
Не понял!
Чего непонятного?
Скетча нет, схемы нет, а хрустальный шар говорит, что ошибка в строке №78.
а у меня только обрезиненный есть, от мышки, он вообще ничего не говорит
Кароч вот так. При моделировании в протеусе схемы с использованием ардуино Нана и tft дисплеем, с подключенной библиотекой AdafrutGFX, в моделировании кириллица есть, текст написанный в прошивке отображается. На реальном железе нет. Допустим команда для печати на дисплей tft.print(utf8rus(“ВЫСОТА”)), надпись высота не отображается, а если использовать латинские буквы то все печатает. Вот часть скетча.
#include <RTClib.h> // библиотека часов реального времени
#include <Wire.h>
#include “Adafruit_GFX.h” // Библиотека обработчика графики
#include “Adafruit_ILI9341.h” // Программные драйвера для дисплеев ILI9341
#define TFT_DC A0 // Пин подключения вывода D/C дисплея
#define TFT_CS A1 // Пин подключения вывода CS дисплея
// Для управления очисткой экрана с помощью кнопки RESET на Arduino подключить вывод дисплея RESET через резистор к пину RESET на плате Arduino
// Для Mega 2560 вывод дисплея RESET, если не подключен в пин RESET на Arduino, подключить в 3.3V (без резистора), либо в 5V (с резистором)
#define TFT_RST A2 // Пин подключения вывода RESET (Если подключен к питанию или кнопке, то эту строку закомментировать, а следующую раскомментировать)
// #define TFT_RST -1 // Если вывод дисплея RESET подключен к питанию или через кнопку RESET на Arduino
// Uno Hardware SPI
#define TFT_MISO A3 // Пин подключения вывода дисплея SDO(MISO)
#define TFT_MOSI 12 // Пин подключения вывода дисплея SDI(MOSI)
#define TFT_CLK 11 // Пин подключения вывода дисплея SCK
#define CS_PIN 10 // Для часов реального времени
#define buttonZero 13 // Кнопка отбивки нуля
#define deblockPump 10 // Кнопка деблокировки насосов
#define in2 4 // направление вращения
unsigned long timeBut, timeBut1; // Время начала нажатия кнопки
String utf8rus(String source); // Прототип функции отрисовки русских букв
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); // Создаем объект дисплея и сообщаем библиотеке распиновку для работы с графикой
RTC_DS1307 RTC; // Создаём объект часов реального времени
#define t_SCK 3 // Пин подключения вывода дисплея T_CLK
#define t_CS 4 // Пин подключения вывода дисплея T_CS
#define t_MOSI 5 // Пин подключения вывода дисплея T_DIN
#define t_MISO 6 // Пин подключения вывода дисплея T_DOUT
#define t_IRQ 7 // Пин подключения вывода дисплея T_IRQ
DateTime dt; // Объект для реального времени
char mode; // Режим работы устройства h - настройка часов, m - настройка минут, w - работа
short mm; // минуты
float height, heightBefore; // высота и высота ранее
void drawDisplay(); // Прототип функции отрисовки дисплея
void setTime(); // Прототип настройки времени
void drawSetup(); // Прототип очищения экрана
void setZero(); // Прототип функции отбивки нуля
bool bullshit; // флаг перехода с установки часов на рабочий режим 0 - часы, 1 - работа
void counter1(); // Прототип функции счётчика импульсов
void setup(){
pinMode(CS_PIN, OUTPUT);
tft.begin(); // Инициализируем начало работы с графическим дисплеем
tft.setRotation(1); // Переводим дисплей в альбомную ориентацию
Wire.begin(); // Инициализируем Wire
RTC.begin(); // Инициализируем часы реального времени
mode = ‘w’; // режим работы
pinMode(buttonZero, INPUT_PULLUP); // Кнопка отбивки нуля
pinMode(deblockPump, INPUT_PULLUP); // Кнопка деблокировки насосов
pinMode(in2, INPUT_PULLUP); // Вход от энкодера
//pinMode(, INPUT_PULLUP);
drawSetup(); // Начальная отрисовка экрана
mm = dt.minute(); // Инициализация переменной минут
attachInterrupt(1,counter1, FALLING); // Прерывания по спаду импульса на 3 входе
height = 0; // Высота = 0
heightBefore = height; // Высота была равна нулю
bullshit = 1; // Флаг установлен в режим работы
}
void loop()
{
drawDisplay(); // Отрисовка дисплея
setTime(); // Установка времени
setZero(); // Отбивка нуля
}
// Начало функции обработки кириллических символов
String utf8rus(String source) // Функция для конвертации русских символов из двубайтовой кодировки в однобайтовую
{
int i,k;
String target;
unsigned char n;
char m[2] = { ‘0’, ‘\0’ };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xBF){
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB7; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
// Конец функции обработки кириллических символов
// Функция прерывания
void counter1() {
if (digitalRead(in2)) {
height += 0.01;
} else height -= 0.01;
}
// Функция отрисовки времени
void drawTime() {
tft.setTextSize(2); // Размер текста часов
dt = RTC.now(); // Присваивание объекту значения времени
tft.setCursor(243,220); // Устанавливаем курсор
// Если меняем часы
if (mode == ‘h’) {
tft.setTextColor(ILI9341_YELLOW);
if (dt.hour() < 10) tft.print(utf8rus(“0”));
tft.print(dt.hour(), DEC);
} else {
tft.setTextColor(ILI9341_BLACK);
if ((dt.hour() - 1) < 10) tft.print(utf8rus(“0”));
tft.print(dt.hour() - 1, DEC);
}
// ставим двоеточие между часами и минутами
tft.setTextColor(ILI9341_YELLOW);
tft.print(“:”);
// Если меняем минуты
if (mode == ‘m’) {
tft.setTextColor(ILI9341_YELLOW);
if (dt.minute() < 10) tft.print(utf8rus(“0”));
tft.print(dt.minute(), DEC);
} else {
tft.setTextColor(ILI9341_BLACK);
if ((dt.minute() - 1) < 10) tft.print(utf8rus(“0”));
tft.print(dt.minute() - 1, DEC);
}
tft.setCursor(243,220);
// Если всё поменяли, переходим в рабочий режим
if (mode == ‘w’) {
tft.fillRect(240,219,27,16,ILI9341_BLACK);
tft.fillRect(275,219,27,16,ILI9341_BLACK);
}
tft.setTextColor(ILI9341_YELLOW);
if (dt.hour() < 10) tft.print(utf8rus(“0”));
tft.print(dt.hour(), DEC);
tft.print(“:”);
if (dt.minute() < 10) tft.print(utf8rus(“0”));
tft.print(dt.minute(), DEC);
mm = dt.minute(); // Присваиваем минутам значение времени
}
// Функция отрисовки значения высоты
void drawHeight() {
tft.setTextSize(3);
tft.fillRect(175,5,90,25,ILI9341_BLACK);
tft.setCursor(175,5);
tft.setTextColor(ILI9341_YELLOW);
tft.print(height);
}
// Функция отрисовки дисплея
void drawDisplay() {
dt = RTC.now(); // Инициализируем время
// Если высота изменилась, отрисовываем её
if (height != heightBefore) {
drawHeight();
heightBefore = height;
}
// Если изменились минуты, отрисовываем время
if (mm != dt.minute()) {
drawTime();
}
}
// Функция отбивки нуля
void setZero() {
static bool buttonBefore = false; // Состояние кнопки ранее
// Нажали кнопку, начинаем считать время
if (bullshit && !digitalRead(buttonZero) && !buttonBefore && (mode == ‘w’)) {
timeBut1 = millis();
buttonBefore = true;
//bullshit = true;
}
// При отжатии кнопки обнуляем высоту
if (bullshit && buttonBefore && digitalRead(buttonZero) && ((timeBut1 + 100) <= millis()) && (mode == ‘w’)) {
height = 0;
buttonBefore = false;
}
// При отжатии кнопки спустя время устанавливаем флаг в 1
if (buttonBefore && digitalRead(buttonZero) && ((timeBut1 + 100) <= millis()) && (mode == ‘w’)) {
bullshit = true;
buttonBefore = false;
}
}
// функция установки времени
void setTime() {
short hh = dt.hour(); // переменные для регулирования времени
static bool buttonZeroBefore = false;
// устанавливаем в ложь предыдущее положение кнопки
if (digitalRead(buttonZero)) {
buttonZeroBefore = false;
}
// при нажатии кнопки отсчитываем время
if (!digitalRead(buttonZero) && !buttonZeroBefore && (mode == ‘w’)) {
timeBut = millis();
buttonZeroBefore = true;
}
/if (buttonZeroBefore && digitalRead(buttonZero) && ((timeBut + 100) >= millis()) && (mode == ‘w’)) {
height = 0;
}/
// через 5 секунд включаем режим настройки часов
if (buttonZeroBefore && (!digitalRead(buttonZero)) && ((timeBut + 5000) <= millis()) && (mode == ‘w’)) {
mode = ‘h’;
tft.fillRect(240,219,27,16,ILI9341_BLUE);
drawTime();
}
static bool deblockPumpBefore = false; // предыдущее положение кнопки
// если кнопка ненажата
if ((mode == ‘h’) && digitalRead(deblockPump)) {
deblockPumpBefore = false;
bullshit = false;
}
// если нажимаем кнопку, начинаем отсчёт времени
if (!digitalRead(deblockPump) && !deblockPumpBefore && (mode == ‘h’)) {
timeBut = millis();
deblockPumpBefore = true;
bullshit = false;
}
// устраняем дребезг контактов
if (deblockPumpBefore && !digitalRead(deblockPump) && ((timeBut + 100) <= millis()) && (mode == ‘h’)) {
hh = (dt.hour() < 23) ? ++hh : 0;
RTC.adjust(DateTime(2014, 1, 21, hh, mm, 0));
deblockPumpBefore = false; // Чтобы только на один час!
tft.fillRect(240,219,27,16,ILI9341_BLUE);
drawTime();
}
static bool mins = false;
// включаем режим настройки минут
if (!digitalRead(buttonZero) && !buttonZeroBefore && (mode == ‘h’)) {
timeBut = millis();
buttonZeroBefore = true;
mins = true;
}
// устраняем дребезг контактов
if ((mins == true) && buttonZeroBefore && (!digitalRead(buttonZero)) && ((timeBut + 100) <= millis()) && (mode == ‘h’)) {
mode = ‘m’;
tft.fillRect(240,219,27,16,ILI9341_BLACK);
tft.fillRect(275,219,27,16,ILI9341_BLUE);
drawTime();
mins = false;
}
if ((mode == 'm') && digitalRead(deblockPump)) {
deblockPumpBefore = false;
}
// если нажимаем кнопку, начинаем отсчёт времени
if (!digitalRead(deblockPump) && !deblockPumpBefore && (mode == ‘m’)) {
timeBut = millis();
deblockPumpBefore = true;
}
// устраняем дребезг контактов
if (deblockPumpBefore && !digitalRead(deblockPump) && ((timeBut + 100) <= millis()) && (mode == ‘m’)) {
mm = (dt.minute() < 59) ? ++mm : 0;
RTC.adjust(DateTime(2014, 1, 21, hh, mm, 0));
//deblockPumpBefore = false; // Чтобы только на один час!
tft.fillRect(275,219,27,16,ILI9341_BLUE);
drawTime();
timeBut = millis();
}
// если удерживаем
if (deblockPumpBefore && !digitalRead(deblockPump) && ((timeBut + 2000) <= millis()) && (mode == ‘m’)) {
if ((millis() % 1000) == 0) {
mm = (dt.minute() < 50) ? (mm + 10) : 0;
}
}
// включаем режим настройки минут
if (!digitalRead(buttonZero) && !buttonZeroBefore && (mode == ‘m’)) {
timeBut = millis();
buttonZeroBefore = true;
mins = true;
}
// устраняем дребезг контактов
if ((mins == true) && buttonZeroBefore && (!digitalRead(buttonZero)) && ((timeBut + 100) <= millis()) && (mode == ‘m’)) {
mode = ‘w’;
tft.fillRect(240,219,27,16,ILI9341_BLACK);
tft.fillRect(275,219,27,16,ILI9341_BLACK);
drawTime();
mins = false;
}
}
// Очищение экрана
void drawSetup() {
tft.fillScreen(ILI9341_BLACK);
// Рисуем таблицу
tft.drawLine(170,0,170,185, ILI9341_YELLOW);
tft.drawLine(0,30,319,30, ILI9341_YELLOW);
tft.drawLine(0,61,319,61, ILI9341_YELLOW);
tft.drawLine(0,92,319,92, ILI9341_YELLOW);
tft.drawLine(0,123,319,123, ILI9341_YELLOW);
tft.drawLine(0,154,319,154, ILI9341_YELLOW);
tft.drawLine(0,185,319,185, ILI9341_YELLOW);
tft.setTextSize(3); // Определяем размер шрифта для вывода на дисплей
tft.setTextColor(ILI9341_YELLOW); // Определяем цвет текста для вывода на экран
tft.setCursor(5,5); // Определяем координаты верхнего левого угла области вывода
tft.print(utf8rus(“ВЫСОТА”));
tft.setCursor(5,36);
tft.print(utf8rus(“СКОРОСТЬ”));
tft.setCursor(5,67);
tft.print(utf8rus(“ШАР.КРАН”));
tft.setCursor(5,98);
tft.print(utf8rus(“БУР.НАСОС”));
tft.setCursor(5,129);
tft.print(utf8rus(“ЛЕБЕДКА”));
tft.setCursor(5,160);
tft.print(utf8rus(“ШТРОПА”));
drawHeight();
tft.setCursor(5,191);
tft.print(utf8rus(“СТРОКА 7”));
/tft.setCursor(175,5); // Определяем координаты верхнего левого угла области вывода
tft.print(sizeof(long));/
tft.setCursor(5,36);
tft.setCursor(160,220);
tft.setTextSize(2);
tft.print(utf8rus("Время: "));
dt = RTC.now();
drawTime();
/if (dt.hour() < 10) tft.print(utf8rus(“0”));
tft.print(dt.hour(), DEC);
tft.print(“:”);
if (dt.minute() < 10) tft.print(utf8rus(“0”));
tft.print(dt.minute(), DEC);/
}
Я честно ещё не разобрался как тут скетчи впихиватт
Интересует как заставить дисплей отображать кириллицу
Вот, другое дело! Тут ошибка в 153 строке. Фууухх! Замаялся считать строки,но это мелочи.
В окне ответа бледным шрифтом написано что и как.
Простите, а можно копию этой строки.
А самому слабо на пальцах отсчитать? Ну раз ума не хватает вставить код правильно, с нумерацией строк…
Я ещё не адаптировался к приложению
Ссорян
Грубиян.
В окне ввода сообщения написано как код вставлять.
Не получается ни как
Это тест на IQ. Если вы не в состоянии скопировать код, нажать на соответствующую кнопку в окне ввода сообщения и сделать Ctrl+V, то чего вы от нас хотите?
#include <RTClib.h> // библиотека часов реального времени
#include <Wire.
#include "Adafruit_GFX.h" // Библиотека обработчика графики
#include "Adafruit_ILI9341.h" // Программные драйвера для дисплеев ILI9341
#define TFT_DC A0 // Пин подключения вывода D/C дисплея
#define TFT_CS A1 // Пин подключения вывода CS дисплея
// Для управления очисткой экрана с помощью кнопки RESET на Arduino подключить вывод дисплея RESET через резистор к пину RESET на плате Arduino
// Для Mega 2560 вывод дисплея RESET, если не подключен в пин RESET на Arduino, подключить в 3.3V (без резистора), либо в 5V (с резистором)
#define TFT_RST A2 // Пин подключения вывода RESET (Если подключен к питанию или кнопке, то эту строку закомментировать, а следующую раскомментировать)
// #define TFT_RST -1 // Если вывод дисплея RESET подключен к питанию или через кнопку RESET на Arduino
// Uno Hardware SPI
#define TFT_MISO A3 // Пин подключения вывода дисплея SDO(MISO)
#define TFT_MOSI 12 // Пин подключения вывода дисплея SDI(MOSI)
#define TFT_CLK 11 // Пин подключения вывода дисплея SCK
#define CS_PIN 10 // Для часов реального времени
#define buttonZero 13 // Кнопка отбивки нуля
#define deblockPump 10 // Кнопка деблокировки насосов
#define in2 4 // направление вращения
unsigned long timeBut, timeBut1; // Время начала нажатия кнопки
String utf8rus(String source); // Прототип функции отрисовки русских букв
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); // Создаем объект дисплея и сообщаем библиотеке распиновку для работы с графикой
RTC_DS1307 RTC; // Создаём объект часов реального времени
#define t_SCK 3 // Пин подключения вывода дисплея T_CLK
#define t_CS 4 // Пин подключения вывода дисплея T_CS
#define t_MOSI 5 // Пин подключения вывода дисплея T_DIN
#define t_MISO 6 // Пин подключения вывода дисплея T_DOUT
#define t_IRQ 7 // Пин подключения вывода дисплея T_IRQ
DateTime dt; // Объект для реального времени
char mode; // Режим работы устройства h - настройка часов, m - настройка минут, w - работа
short mm; // минуты
float height, heightBefore; // высота и высота ранее
void drawDisplay(); // Прототип функции отрисовки дисплея
void setTime(); // Прототип настройки времени
void drawSetup(); // Прототип очищения экрана
void setZero(); // Прототип функции отбивки нуля
bool bullshit; // флаг перехода с установки часов на рабочий режим 0 - часы, 1 - работа
void counter1(); // Прототип функции счётчика импульсов
void setup(){
pinMode(CS_PIN, OUTPUT);
tft.begin(); // Инициализируем начало работы с графическим дисплеем
tft.setRotation(1); // Переводим дисплей в альбомную ориентацию
Wire.begin(); // Инициализируем Wire
RTC.begin(); // Инициализируем часы реального времени
mode = 'w'; // режим работы
pinMode(buttonZero, INPUT_PULLUP); // Кнопка отбивки нуля
pinMode(deblockPump, INPUT_PULLUP); // Кнопка деблокировки насосов
pinMode(in2, INPUT_PULLUP); // Вход от энкодера
//pinMode(, INPUT_PULLUP);
drawSetup(); // Начальная отрисовка экрана
mm = dt.minute(); // Инициализация переменной минут
attachInterrupt(1,counter1, FALLING); // Прерывания по спаду импульса на 3 входе
height = 0; // Высота = 0
heightBefore = height; // Высота была равна нулю
bullshit = 1; // Флаг установлен в режим работы
}
void loop()
{
drawDisplay(); // Отрисовка дисплея
setTime(); // Установка времени
setZero(); // Отбивка нуля
}
// Начало функции обработки кириллических символов
String utf8rus(String source) // Функция для конвертации русских символов из двубайтовой кодировки в однобайтовую
{
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xBF){
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB7; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
// Конец функции обработки кириллических символов
// Функция прерывания
void counter1() {
if (digitalRead(in2)) {
height += 0.01;
} else height -= 0.01;
}
// Функция отрисовки времени
void drawTime() {
tft.setTextSize(2); // Размер текста часов
dt = RTC.now(); // Присваивание объекту значения времени
tft.setCursor(243,220); // Устанавливаем курсор
// Если меняем часы
if (mode == 'h') {
tft.setTextColor(ILI9341_YELLOW);
if (dt.hour() < 10) tft.print(utf8rus("0"));
tft.print(dt.hour(), DEC);
} else {
tft.setTextColor(ILI9341_BLACK);
if ((dt.hour() - 1) < 10) tft.print(utf8rus("0"));
tft.print(dt.hour() - 1, DEC);
}
// ставим двоеточие между часами и минутами
tft.setTextColor(ILI9341_YELLOW);
tft.print(":");
// Если меняем минуты
if (mode == 'm') {
tft.setTextColor(ILI9341_YELLOW);
if (dt.minute() < 10) tft.print(utf8rus("0"));
tft.print(dt.minute(), DEC);
} else {
tft.setTextColor(ILI9341_BLACK);
if ((dt.minute() - 1) < 10) tft.print(utf8rus("0"));
tft.print(dt.minute() - 1, DEC);
}
tft.setCursor(243,220);
// Если всё поменяли, переходим в рабочий режим
if (mode == 'w') {
tft.fillRect(240,219,27,16,ILI9341_BLACK);
tft.fillRect(275,219,27,16,ILI9341_BLACK);
}
tft.setTextColor(ILI9341_YELLOW);
if (dt.hour() < 10) tft.print(utf8rus("0"));
tft.print(dt.hour(), DEC);
tft.print(":");
if (dt.minute() < 10) tft.print(utf8rus("0"));
tft.print(dt.minute(), DEC);
mm = dt.minute(); // Присваиваем минутам значение времени
}
// Функция отрисовки значения высоты
void drawHeight() {
tft.setTextSize(3);
tft.fillRect(175,5,90,25,ILI9341_BLACK);
tft.setCursor(175,5);
tft.setTextColor(ILI9341_YELLOW);
tft.print(height);
}
// Функция отрисовки дисплея
void drawDisplay() {
dt = RTC.now(); // Инициализируем время
// Если высота изменилась, отрисовываем её
if (height != heightBefore) {
drawHeight();
heightBefore = height;
}
// Если изменились минуты, отрисовываем время
if (mm != dt.minute()) {
drawTime();
}
}
// Функция отбивки нуля
void setZero() {
static bool buttonBefore = false; // Состояние кнопки ранее
// Нажали кнопку, начинаем считать время
if (bullshit && !digitalRead(buttonZero) && !buttonBefore && (mode == 'w')) {
timeBut1 = millis();
buttonBefore = true;
//bullshit = true;
}
// При отжатии кнопки обнуляем высоту
if (bullshit && buttonBefore && digitalRead(buttonZero) && ((timeBut1 + 100) <= millis()) && (mode == 'w')) {
height = 0;
buttonBefore = false;
}
// При отжатии кнопки спустя время устанавливаем флаг в 1
if (buttonBefore && digitalRead(buttonZero) && ((timeBut1 + 100) <= millis()) && (mode == 'w')) {
bullshit = true;
buttonBefore = false;
}
}
// функция установки времени
void setTime() {
short hh = dt.hour(); // переменные для регулирования времени
static bool buttonZeroBefore = false;
// устанавливаем в ложь предыдущее положение кнопки
if (digitalRead(buttonZero)) {
buttonZeroBefore = false;
}
// при нажатии кнопки отсчитываем время
if (!digitalRead(buttonZero) && !buttonZeroBefore && (mode == 'w')) {
timeBut = millis();
buttonZeroBefore = true;
}
/*if (buttonZeroBefore && digitalRead(buttonZero) && ((timeBut + 100) >= millis()) && (mode == 'w')) {
height = 0;
}*/
// через 5 секунд включаем режим настройки часов
if (buttonZeroBefore && (!digitalRead(buttonZero)) && ((timeBut + 5000) <= millis()) && (mode == 'w')) {
mode = 'h';
tft.fillRect(240,219,27,16,ILI9341_BLUE);
drawTime();
}
static bool deblockPumpBefore = false; // предыдущее положение кнопки
// если кнопка ненажата
if ((mode == 'h') && digitalRead(deblockPump)) {
deblockPumpBefore = false;
bullshit = false;
}
// если нажимаем кнопку, начинаем отсчёт времени
if (!digitalRead(deblockPump) && !deblockPumpBefore && (mode == 'h')) {
timeBut = millis();
deblockPumpBefore = true;
bullshit = false;
}
// устраняем дребезг контактов
if (deblockPumpBefore && !digitalRead(deblockPump) && ((timeBut + 100) <= millis()) && (mode == 'h')) {
hh = (dt.hour() < 23) ? ++hh : 0;
RTC.adjust(DateTime(2014, 1, 21, hh, mm, 0));
deblockPumpBefore = false; // Чтобы только на один час!
tft.fillRect(240,219,27,16,ILI9341_BLUE);
drawTime();
}
static bool mins = false;
// включаем режим настройки минут
if (!digitalRead(buttonZero) && !buttonZeroBefore && (mode == 'h')) {
timeBut = millis();
buttonZeroBefore = true;
mins = true;
}
// устраняем дребезг контактов
if ((mins == true) && buttonZeroBefore && (!digitalRead(buttonZero)) && ((timeBut + 100) <= millis()) && (mode == 'h')) {
mode = 'm';
tft.fillRect(240,219,27,16,ILI9341_BLACK);
tft.fillRect(275,219,27,16,ILI9341_BLUE);
drawTime();
mins = false;
}
if ((mode == 'm') && digitalRead(deblockPump)) {
deblockPumpBefore = false;
}
// если нажимаем кнопку, начинаем отсчёт времени
if (!digitalRead(deblockPump) && !deblockPumpBefore && (mode == 'm')) {
timeBut = millis();
deblockPumpBefore = true;
}
// устраняем дребезг контактов
if (deblockPumpBefore && !digitalRead(deblockPump) && ((timeBut + 100) <= millis()) && (mode == 'm')) {
mm = (dt.minute() < 59) ? ++mm : 0;
RTC.adjust(DateTime(2014, 1, 21, hh, mm, 0));
//deblockPumpBefore = false; // Чтобы только на один час!
tft.fillRect(275,219,27,16,ILI9341_BLUE);
drawTime();
timeBut = millis();
}
// если удерживаем
if (deblockPumpBefore && !digitalRead(deblockPump) && ((timeBut + 2000) <= millis()) && (mode == 'm')) {
if ((millis() % 1000) == 0) {
mm = (dt.minute() < 50) ? (mm + 10) : 0;
}
}
// включаем режим настройки минут
if (!digitalRead(buttonZero) && !buttonZeroBefore && (mode == 'm')) {
timeBut = millis();
buttonZeroBefore = true;
mins = true;
}
// устраняем дребезг контактов
if ((mins == true) && buttonZeroBefore && (!digitalRead(buttonZero)) && ((timeBut + 100) <= millis()) && (mode == 'm')) {
mode = 'w';
tft.fillRect(240,219,27,16,ILI9341_BLACK);
tft.fillRect(275,219,27,16,ILI9341_BLACK);
drawTime();
mins = false;
}
}
// Очищение экрана
void drawSetup() {
tft.fillScreen(ILI9341_BLACK);
// Рисуем таблицу
tft.drawLine(170,0,170,185, ILI9341_YELLOW);
tft.drawLine(0,30,319,30, ILI9341_YELLOW);
tft.drawLine(0,61,319,61, ILI9341_YELLOW);
tft.drawLine(0,92,319,92, ILI9341_YELLOW);
tft.drawLine(0,123,319,123, ILI9341_YELLOW);
tft.drawLine(0,154,319,154, ILI9341_YELLOW);
tft.drawLine(0,185,319,185, ILI9341_YELLOW);
tft.setTextSize(3); // Определяем размер шрифта для вывода на дисплей
tft.setTextColor(ILI9341_YELLOW); // Определяем цвет текста для вывода на экран
tft.setCursor(5,5); // Определяем координаты верхнего левого угла области вывода
tft.print(utf8rus("ВЫСОТА"));
tft.setCursor(5,36);
tft.print(utf8rus("СКОРОСТЬ"));
tft.setCursor(5,67);
tft.print(utf8rus("ШАР.КРАН"));
tft.setCursor(5,98);
tft.print(utf8rus("БУР.НАСОС"));
tft.setCursor(5,129);
tft.print(utf8rus("ЛЕБЕДКА"));
tft.setCursor(5,160);
tft.print(utf8rus("ШТРОПА"));
drawHeight();
tft.setCursor(5,191);
tft.print(utf8rus("СТРОКА 7"));
/*tft.setCursor(175,5); // Определяем координаты верхнего левого угла области вывода
tft.print(sizeof(long));*/
tft.setCursor(5,36);
tft.setCursor(160,220);
tft.setTextSize(2);
tft.print(utf8rus("Время: "));
dt = RTC.now();
drawTime();
/*if (dt.hour() < 10) tft.print(utf8rus("0"));
tft.print(dt.hour(), DEC);
tft.print(":");
if (dt.minute() < 10) tft.print(utf8rus("0"));
tft.print(dt.minute(), DEC);*/
}
О блин, получилось
IQ у меня -2.
Так норм?
К сожалению в телефоне нет функций ctrl+v ctrl+c
Открываем шампанское!
Скоро будет приход…основного стёба) Помни! Веди себя достойно и, не ровен час, тебе таки помогут.