Нет, не врёт. Страхуются, гарантированно при разных техусловиях 100.
Уменьшаем вес, время цикла, тормоза.
Нет, не врёт. Страхуются, гарантированно при разных техусловиях 100.
Хорошее решение. Я всегда стараюсь подключать дисплей к отдельному контроллеру(мини,нано, уно). Связываюсь с контроллером по ТСP/IP (Модбас или MQTT). Стараюсь I2C не использовать.Sancho писал(а): ↑27.01.2018{, 11:22}Дисплей использовать в не самых быстрых проектах.
Делать свой блок для дисплея с необходимым функционалом. Т.е. слова типа "Температура", "Влажность" и иже выводить единоразово и не затирать, а переменные слать по мере необходимости в нужные знакоместа.
При наличии свободных пинов и желания - исключить I2C.
Купить вместо PCF8574 Про Мини, управление и индикацию в неё, попробовать найти или переделать библиотеку для записи байта целиком.
Не только при подключении дисплея, а вообще.
Код: Выделить всё
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "CyberLib.h"
LiquidCrystal_I2C _lcd1(0x3F, 20, 4);
String _gtv2 = "Temperature-test-"; //Переменная стринг 17 символов
int _gtv1 = 100; //Счётная переменная, 100-999, 3 символа
void setup()
{
Wire.begin();
delay(10);
_lcd1.init();
_lcd1.backlight();
D12_Out;
D12_Low;
_lcd1.clear();
}
void loop()
{
delay(1);
D12_High;
if ((_gtv1) == 100)
{
_lcd1.setCursor(0, 0);
_lcd1.print((_gtv2));
}
_lcd1.setCursor(17, 0);
_lcd1.print(((String(_gtv1, DEC))));
_gtv1 = _gtv1+1;
if ((_gtv1) > (999)) {_gtv1 = 100;}
D12_Low;
}
Код: Выделить всё
void LiquidCrystal_I2C::begin() {
Wire.begin();
Wire.setClock(400000L); //
Код: Выделить всё
if (_changeNumber1_Out) {
_dispTempLength1 = (((String(_gtv2, DEC)))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(1, 0);
_lcd1.print(((String(_gtv2, DEC))));
}
//else {if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}} Закоментированно, в оригинале три строки!!! Внимательно!!!
Оригинал:
if (_changeNumber1_Out) {
_dispTempLength1 = (((String(_gtv2, DEC)))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(1, 0);
_lcd1.print(((String(_gtv2, DEC))));
} else { // Здесь ВНИМАТЕЛЬНО!!!! ПЕРВАЯ СКОБКА, }, перед else, ДОЛЖНА ОСТАТЬСЯ!!!
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
самое основное определиться с приоритетами и временными интервалами.
Я думаю, есть самый простой способ написать блок и слать данные в ком порт.
Код: Выделить всё
Serial.print("Time: "); Serial.println((millis()-Time),DEC); // micros(); если надо
Serial.println("Start "); Time=millis(); // micros() .........
для меня не есть так!
Отправлено спустя 8 минут 9 секунд:
Можно сделать работу по EN - будете включать в нужные моменты.
-желательно
буду Вам очень благодарен !!!