Вставлена так, что читать невозможно (я не смог). Форматируйте код нормально (уж хотя бы Ctrl+T) если сами не можете. Самому же читать текст легче будет.
Кто Вам это сказал? Принимает, только тут же на ON переделывает. Например, строки с №10 по №19
case 6:
if (On_Off1 == true) { // Допустим, что это верно
On_Off1 = false; // Запомним (*)
lcd.setCursor(13, 0);
lcd.print("OFF"); // Типа стало OFF
}
if (On_Off1 == false) { // А это уже верно! См. (*) выше
On_Off1 = true;
lcd.setCursor(13, 0);
lcd.print("ON "); // А вот тут мы затираем OFF нахрен
} break;
и тоже самое в двух остальных блоках.
Если бы отформатировали программу не для меня, а всегда и смотрели бы на неё отформатированную, то, наверняка бы это заметили.
И, да, кстати, параллельно с экраном печатайте всё в Сериал. Там ведь ничего не затирается. Сразу бы увидели, что OFF появляется, а потом тут же ON и не говорили бы, что OFF никогда не срабатывает. А то Вы с завязанными глазами мины обезвреживаете.
надумал я тут проверить, в каком месте у меня код подвисает так, что инкодэр считывается с пропусками
вбил вывод времени в середине и в конце выполнения кода. выяснилось - что все задержки , аж ,до 100 миллисикунд происходят между окончанием лупа и его началом. это в порядке вещей или это особенность моей писанины? ежли мой косяк то в какую сторону искать?
аж ,до 100 миллисикунд происходят между окончанием лупа и его началом. это в порядке вещей или это особенность моей писанины? ежли мой косяк то в какую сторону искать?
надумал я тут проверить, в каком месте у меня код подвисает так, что инкодэр считывается с пропусками
вбил вывод времени в середине и в конце выполнения кода. выяснилось - что все задержки , аж ,до 100 миллисикунд происходят между окончанием лупа и его началом.
судя по вашему коду - вы это выяснить никак не могли. ибо вы не контролируете время в конце ЛУП
при чем , что интересно, после "холостого" лупа, задержка 6 миллисекунд, а после того в котором проводился расчет(стр. с 649 по 681) задержка минимум 40 мс. и это не во время расчета, а именно между лупами
при чем , что интересно, после "холостого" лупа, задержка 6 миллисекунд, а после того в котором проводился расчет(стр. с 649 по 681) задержка минимум 40 мс. и это не во время расчета, а именно между лупами
ничего интересного. Всей этой статистике грош цена - вы измеряете время один единственный раз - в строке 183, в двух других строчках вы заново время из миллис не читаете, а только выводите в сериал старое значение, то самое. что прочли в строке 183.
Поэтому-то в вашей "статистике" все три значения ВСЕГДА ОДИНАКОВЫЕ, присмотритесь.
По сути Вам уже объяснили, а чтобы реально что-то увидеть, можно даже не измерять время, просто включите временные метки в мониторе порта и печатайте что-то легко узнаваемое, типа "Enter loop", "Exit loop" - как-нибудь так.
Только между выходом из loop и повторным входом в него не может проходить 100мс. Там ни фига не делается, кроме
Пробовал ради интереса считать до миллиона в лупе и в цикле for(;;) внутри лупа. Разница по времени на 328Р получилась 2 порядка. Хотя, эти порядки были в области микрос..
Пробовал ради интереса считать до миллиона в лупе и в цикле for(;;) внутри лупа. Разница по времени на 328Р получилась 2 порядка. Хотя, эти порядки были в области микрос..
Вы бы код приводили. А то, оптимизатор - он хитрый, может и целиком for выкинуть.
Пробовал ради интереса считать до миллиона в лупе и в цикле for(;;) внутри лупа. Разница по времени на 328Р получилась 2 порядка. Хотя, эти порядки были в области микрос..
Если цикл пустой, то понятно, что будет разница в разы (ну не на два порядка, конечно, это Вы преувеличили), но в разы. Но чем больше действий в цикле, тем меньше разница, т.к. накладные там константа.
Давайте так. Вы приводите нормальный код, который можно запустить и посмотреть что там и как выполняется и мы его обсуждаем. Потому, что обсуждение сферического кода ... я такого не курю.
Здравствуйте уважаемые форумчане. приближается новый год, а значит время очередного обострения.
взялся я вновь доделывать кормушку и столкнулся с очередной проблемой - по I2c у меня два устройства общаются - внешняя память на AT24C256B и LCD дисплей (самый стандартный).
без памяти все работает отлично(дисплей и программа), как только подключаю память и пытаюсь в нее сто либо записать на дисплее начинает твориться дичь и через какое то время все зависает.
у памяти же свой адрес устройства, а у дисплея свой. как они пересекаются?
да, прочитал про капчу, прошу прощения, но это был самый быстрый способ поделиться именно той библиотекой которая использована в скетче, но все 4 библиотеки в этот архив я засунул, вот отдельно LiquidCrystal_I2C_OLED https://disk.yandex.ru/d/ywQ0o5WCNJW73Q
P.s. там в названии папки нет слова OLED но когда подключаешь библиотеку, оно появляется.
да, прочитал про капчу, прошу прощения, но это был самый быстрый способ поделиться именно той библиотекой которая использована в скетче, но все 4 библиотеки в этот архив я засунул, вот отдельно LiquidCrystal_I2C_OLED https://disk.yandex.ru/d/ywQ0o5WCNJW73Q
P.s. там в названии папки нет слова OLED но когда подключаешь библиотеку, оно появляется.
ну уж нет!
###########################################
# Syntax Coloring Map For LiquidCrystal_I2C
###########################################
да, прочитал про капчу, прошу прощения, но это был самый быстрый способ поделиться именно той библиотекой которая использована в скетче, но все 4 библиотеки в этот архив я засунул, вот отдельно LiquidCrystal_I2C_OLED https://disk.yandex.ru/d/ywQ0o5WCNJW73Q
P.s. там в названии папки нет слова OLED но когда подключаешь библиотеку, оно появляется.
Сейчас Вы приложили другую. Сравните архивы. В той просто не было файла с таким именем.
In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC.h:33:0,
from C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:13:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h: In member function 'bool iarduino_RTC_DS1302::funcWriteReg(uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h:59:3: warning: no return statement in function returning non-void [-Wreturn-type]
} //
^
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h: In member function 'void iarduino_RTC_DS1302::funcWriteByte(uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h:62:202: warning: comparison is always true due to limited range of data type [-Wtype-limits]
void funcWriteByte (uint8_t j) /* Передача одного байта (байт для передачи) */ {uint8_t i=0, n=500/busRate+1; pinMode(pinDAT, OUTPUT); while(i>=0 && i<8){digitalWrite(pinDAT, (j & _BV(i))); delayMicroseconds(n); digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); i++;} pinMode(pinDAT, INPUT);}
~^~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h: In member function 'uint8_t iarduino_RTC_DS1302::funcReadByte(bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h:63:301: warning: comparison is always true due to limited range of data type [-Wtype-limits]
uint8_t funcReadByte (bool j) /* Получение одного байта (флаг чтения предустановленного бита с линии DAT) */ {uint8_t i=0, k=0, n=500/busRate+1; pinMode(pinDAT, INPUT); if(j){if(digitalRead(pinDAT)){k |= _BV(i);} i++;} while(i>=0 && i<8){digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); delayMicroseconds(n); if(digitalRead(pinDAT)){k |= _BV(i);} i++;} return k;}
~^~~
In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1307.h:4:0,
from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC.h:34,
from C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:13:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::sendID(uint8_t, bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:322:23: warning: unused parameter 'adr' [-Wunused-parameter]
bool sendID(uint8_t adr, bool rw){ // Аргументы: ID-адрес модуля, бит RW (0-запись, 1-чтение)
^~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:322:33: warning: unused parameter 'rw' [-Wunused-parameter]
bool sendID(uint8_t adr, bool rw){ // Аргументы: ID-адрес модуля, бит RW (0-запись, 1-чтение)
^~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::setByte(uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:360:24: warning: unused parameter 'data' [-Wunused-parameter]
bool setByte(uint8_t data){ // Аргумент: байт для передачи.
^~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h: In member function 'virtual uint8_t iarduino_I2C::getByte(bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:394:24: warning: unused parameter 'ack' [-Wunused-parameter]
uint8_t getByte(bool ack){ // Аргумент: бит подтверждения ACK/NACK
^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino: In function 'void loop()':
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:413:22: warning: comparison is always false due to limited range of data type [-Wtype-limits]
} if (secT < 0){
~~~~~^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:423:22: warning: comparison is always false due to limited range of data type [-Wtype-limits]
} if (minT < 0){
~~~~~^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:433:24: warning: comparison is always false due to limited range of data type [-Wtype-limits]
} if (hoursT < 0) {
~~~~~~~^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:511:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (millis() - TimeWork >= TimsWorker / 2 && W2 == true ) {
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:516:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (millis() - TimeWork >= TimsWorker && W3 == true) {
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:521:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (millis() - TimeWork >= TimsWorker && qr == false) {
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::begin(uint8_t, uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:64:39: warning: unused parameter 'cols' [-Wunused-parameter]
void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
^~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::setDelay(int, int)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:412:39: warning: unused parameter 'cmdDelay' [-Wunused-parameter]
void LiquidCrystal_I2C::setDelay (int cmdDelay,int charDelay) {}
^~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:412:52: warning: unused parameter 'charDelay' [-Wunused-parameter]
void LiquidCrystal_I2C::setDelay (int cmdDelay,int charDelay) {}
^~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:415:50: warning: unused parameter 'graphtype' [-Wunused-parameter]
uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t graphtype){return 0;}
^~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t, uint8_t, uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:55: warning: unused parameter 'row' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){}
^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:68: warning: unused parameter 'column' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){}
^~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:84: warning: unused parameter 'len' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){}
^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:98: warning: unused parameter 'pixel_col_end' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){}
^~~~~~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::draw_vertical_graph(uint8_t, uint8_t, uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:53: warning: unused parameter 'row' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){}
^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:66: warning: unused parameter 'column' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){}
^~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:82: warning: unused parameter 'len' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){}
^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:96: warning: unused parameter 'pixel_row_end' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){}
^~~~~~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::setContrast(uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:418:45: warning: unused parameter 'new_val' [-Wunused-parameter]
void LiquidCrystal_I2C::setContrast(uint8_t new_val){}
^~~~~~~
In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.h:33:0,
from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp:1:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h: In member function 'bool iarduino_RTC_DS1302::funcWriteReg(uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h:59:3: warning: no return statement in function returning non-void [-Wreturn-type]
} //
^
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h: In member function 'void iarduino_RTC_DS1302::funcWriteByte(uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h:62:202: warning: comparison is always true due to limited range of data type [-Wtype-limits]
void funcWriteByte (uint8_t j) /* Передача одного байта (байт для передачи) */ {uint8_t i=0, n=500/busRate+1; pinMode(pinDAT, OUTPUT); while(i>=0 && i<8){digitalWrite(pinDAT, (j & _BV(i))); delayMicroseconds(n); digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); i++;} pinMode(pinDAT, INPUT);}
~^~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h: In member function 'uint8_t iarduino_RTC_DS1302::funcReadByte(bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h:63:301: warning: comparison is always true due to limited range of data type [-Wtype-limits]
uint8_t funcReadByte (bool j) /* Получение одного байта (флаг чтения предустановленного бита с линии DAT) */ {uint8_t i=0, k=0, n=500/busRate+1; pinMode(pinDAT, INPUT); if(j){if(digitalRead(pinDAT)){k |= _BV(i);} i++;} while(i>=0 && i<8){digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); delayMicroseconds(n); if(digitalRead(pinDAT)){k |= _BV(i);} i++;} return k;}
~^~~
In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1307.h:4:0,
from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.h:34,
from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp:1:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::readBytes(uint8_t, uint8_t, uint8_t*, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:145:29: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
if (sum) { if(TWSR&0xF8!=0x50) { i=0;}} // Если после чтения очередного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x50 значит произошла ошибка при чтении
~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:146:26: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
else { if(TWSR&0xF8!=0x58) { i=0;}} // Если после чтения последного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x58 значит произошла ошибка при чтении
~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::readBytes(uint8_t, uint8_t*, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:168:29: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
if (sum) { if(TWSR&0xF8!=0x50) { i=0;}} // Если после чтения очередного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x50 значит произошла ошибка при чтении
~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:169:26: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
else { if(TWSR&0xF8!=0x58) { i=0;}} // Если после чтения последного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x58 значит произошла ошибка при чтении
~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp: In member function 'char* iarduino_RTC::gettime(const char*)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp:6:26: warning: unused variable 'f' [-Wunused-variable]
uint8_t j, k, n; bool f; // Объявляем локальные переменные
^
C:\GoogleD\Soft\libraries\iarduino_DHT-master\src\iarduino_DHT.cpp: In member function 'int8_t iarduino_DHT::readSDA()':
C:\GoogleD\Soft\libraries\iarduino_DHT-master\src\iarduino_DHT.cpp:31:55: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
if( (reply[0]==0) || (reply[1]!=0) || (reply[2]&0x80>0) ) { model=22; } // Датчик определён как DHT22, так как DHT11 возвращает влажность более 10%, без десятых долей, а температуру без отрицательных значений.
~~~~^~
Скетч использует 23630 байт (76%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 920 байт (44%) динамической памяти, оставляя 1128 байт для локальных переменных. Максимум: 2048 байт.
Часть из них - просто следствие небрежного программирования, друиге - признак возможной ошибки, а третьи - просто стопудовые ошибки (эти я выделил жирным, если ничего не пропустил). Например, в строке №413 Вы пишете
if(secT < 0)
компилятор Вас предупреждает, что условие в скобках ВСЕГДА ложно. Значит, то, что после if, НИКОГДА не выполнится. Но ведь зачем-то Вы это писали? Неужели Вас не насторожило, что часть Вашего кода не будет исполняться никогда и Вы не посчитали это ошибкой?
Причём, большая часть предупреждений приходится на библиотеки. Вы действительно считаете, что столь небрежно написанные библиотеки можно включать в свой код?
Что значит "не проверял"? Вы что, не видели этой длинной портянки предупреждений, которую я привёл? А если видели, то никакой другой проверки и не надо - просто смотрите сколько там всего! Причём, повторяю, часть - просто небрежность, но есть и такие, что явно свидетельствуют об ошибках. Просто смотрите и ... либо надо править библиотеку, либо искать другую, но пользоваться такими - это искать приключений себе на все места.
а что за компилятор у вас такой? мой пишет - "Скетч использует 23630 байт (73%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 920 байт (44%) динамической памяти, оставляя 1128 байт для локальных переменных. Максимум: 2048 байт."
Понятно. Вы, тут вроде давно, но, наверное, пропустили мой постоянный мат на эту тему.
Дело в том, что разработчики IDE по умолчанию выключили вывод любых предупреждений. Видимо, для того, чтобы не смущать всякими глупостЯми блондинок и беременных доярок, которых они считают своими "целевыми пользователями".
Если Вы планируете делать хоть что-то сложнее блинка, Вы просто обязаны включить вывод сообщений. Зайдите в "Настройки" и сделайте, как на этой картинке - "Сообщения компилятора - Все" (сейчас у Вас там выбрано "Ничего")
У Вас просто глаза откроются. А то сейчас Вы спрятали голову в песок - "ошибок видеть не хочу, они мне нервы портят" :-)
Сразу увидите простыню предупреждений. Разбирайтесь с ними.
проведя несколько часов в попытках разобраться как исправить ошибки в библиотеках - я понял, что когда человек в собственном коде с трудом разбирается, то в чужом ему вообще делать нечего.
я за лето половину забыл того что знал, а там 80%того что я и не знал) на C или C++ написано
В итоге выяснилось - что все проблемы были из за подтягивающих резисторов в 10кОм. хотя в даташите написано " When using a pull-upresistor, Atmel recommends using 10kΩ or less." у меня корректно заработало только при использовании 2кОм.
Что не так в этой конструкции?Отформатировать программу сложно? Чтобы всем (а не только Евгению) было понятно.
Отформатировать программу сложно?
что имеется ввиду?
Ctrl+T
Что не так в этой конструкции?
Вставлена так, что читать невозможно (я не смог). Форматируйте код нормально (уж хотя бы Ctrl+T) если сами не можете. Самому же читать текст легче будет.
if (cliCk != 0) { cliCk = 0; switch (menu) { case 21: Time.settime(secT, minT, hoursT, dayT, monthT, yearT, weekdayT); break; case 13: switch (c) { case 1: servoOpen(); servoToClose(); break; case 2: W2 = true; servoOpen(); TimeWork = millis(); break; case 3: W3 = true; servoOpen(); TimeWork = millis(); break; } case 6: if (On_Off1 == true) { On_Off1 = false; lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off1 == false) { On_Off1 = true; lcd.setCursor(13, 0); lcd.print("ON "); } break; case 9: if (On_Off2 == true) { On_Off2 = false; lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == false) { On_Off2 = true; lcd.setCursor(13, 0); lcd.print("ON "); } break; case 12: if (On_Off3 == true) { On_Off3 = false; lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off3 == false) { On_Off3 = true; lcd.setCursor(13, 0); lcd.print("ON "); } break; } }так?
Кто Вам это сказал? Принимает, только тут же на ON переделывает. Например, строки с №10 по №19
case 6: if (On_Off1 == true) { // Допустим, что это верно On_Off1 = false; // Запомним (*) lcd.setCursor(13, 0); lcd.print("OFF"); // Типа стало OFF } if (On_Off1 == false) { // А это уже верно! См. (*) выше On_Off1 = true; lcd.setCursor(13, 0); lcd.print("ON "); // А вот тут мы затираем OFF нахрен } break;и тоже самое в двух остальных блоках.
Если бы отформатировали программу не для меня, а всегда и смотрели бы на неё отформатированную, то, наверняка бы это заметили.
И, да, кстати, параллельно с экраном печатайте всё в Сериал. Там ведь ничего не затирается. Сразу бы увидели, что OFF появляется, а потом тут же ON и не говорили бы, что OFF никогда не срабатывает. А то Вы с завязанными глазами мины обезвреживаете.
Точно! Выражаю ,Вам, благодарность, от всей души!
замечания учту)
надумал я тут проверить, в каком месте у меня код подвисает так, что инкодэр считывается с пропусками
вбил вывод времени в середине и в конце выполнения кода. выяснилось - что все задержки , аж ,до 100 миллисикунд происходят между окончанием лупа и его началом. это в порядке вещей или это особенность моей писанины? ежли мой косяк то в какую сторону искать?
#define CLK 2 #define DT 3 #define SW 12 #define RST A0 #define CLK_rts A2 #define DAT A1 #define ventilation 6 #define heater 5 #define FILTER_STEP 3000 #define disk1 0x50 #include <LiquidCrystal_I2C_OLED.h> #include <Servo.h> #include <iarduino_RTC.h> #include "GyverEncoder.h" #include "iarduino_DHT.h" #include <Wire.h> Encoder enc1(CLK, DT, SW, 2); iarduino_DHT sensor(A3); LiquidCrystal_I2C lcd(0x27, 16, 2); Servo servo; iarduino_RTC Time (RTC_DS1302, RST, CLK_rts, DAT); //назначение пинов обмена данными RST, CLK, DAT int hours1 = 0, h1, hours2 = 0, h2, minutes1 = 0, m1, minutes2 = 0, m2, seconds1 = 0, s1, seconds2 = 0, s2, T1, pos = 0, TimsWorker, hours3 = 0, h3, minutes3 = 0, m3, seconds3 = 0, s3 ; unsigned int address = 0, address1 = 10, address2 = 20, address3 = 30, address4 = 40, address5 = 50, address6 = 60, address7 = 70, address8 = 80, address9 = 90; unsigned long filter_timer, filter_timer2, TimeWork, home_timerMenu, userTemp = 15ul, userHum = 70ul, val_humidity, val_temperature, humidity, temperature; int ench = 0, enc = 0, yearT, cliCk = 0; boolean qr = true, QR = true, W2 = false, W3 = false, w, On_Off1 = false, On_Off2 = false, On_Off3 = false; boolean statusVent = digitalRead(ventilation), statusHeat = digitalRead(heater); byte c = 1, menu = 1, secT, minT, hoursT, dayT, monthT, weekdayT, T_W; byte line_2[8] = { B00010, B10101, B10101, B01110, B00100, B00100, B00100, }; byte line_1[8] = { B00100, B01010, B00100, B00000, B00000, B00000, B00000, }; byte line_3[8] = { B11000, B01100, B00110, B00111, B00110, B01100, B11000, }; byte line_4[8] = { B00000, B01100, B10010, B10000, B10000, B10010, B01100, }; void setup() { delay(300); Time.begin(); Serial.begin(9600); Wire.begin(); pinMode(ventilation, OUTPUT); pinMode(heater, OUTPUT); digitalWrite(ventilation, HIGH); digitalWrite(heater, HIGH); attachInterrupt(1, encoder, CHANGE); attachInterrupt(0, encoder, CHANGE); lcd.init(); enc1.setTickMode(AUTO); servo.attach(6); filter_timer = millis(); filter_timer2 = millis(); lcd.createChar(1, line_1); lcd.createChar(2, line_2); lcd.createChar(3, line_3); lcd.createChar(4, line_4); hours1 = readEEPROM(disk1, address ); h1 = hours1; minutes1 = readEEPROM(disk1, address1); m1 = minutes1; seconds1 = readEEPROM(disk1, address2); s1 = seconds1; hours2 = readEEPROM(disk1, address3); h2 = hours2; minutes2 = readEEPROM(disk1, address4); m2 = minutes2; seconds2 = readEEPROM(disk1, address5); s2 = seconds2; hours3 = readEEPROM(disk1, address6); h3 = hours3; minutes3 = readEEPROM(disk1, address7); m3 = minutes3; seconds3 = readEEPROM(disk1, address8); s3 = seconds3; T_W = readEEPROM(disk1, address9); TimsWorker = T_W * 100; T1 = TimsWorker; } void loop() { int test = millis(); Serial.print(test); Serial.println(" mid"); Time.period(5); if (enc1.isHolded()) { cliCk += 1; } if (cliCk != 0) { cliCk = 0; home_timerMenu = millis(); switch (menu) { case 21: Time.settime(secT, minT, hoursT, dayT, monthT, yearT, weekdayT); break; case 13: switch (c) { case 1: servoOpen(); servoToClose(); break; case 2: W2 = true; servoOpen(); TimeWork = millis(); break; case 3: W3 = true; servoOpen(); TimeWork = millis(); break; } case 6: if (On_Off1 == true) { On_Off1 = false; lcd.setCursor(13, 0); lcd.print("OFF"); } else { On_Off1 = true ; lcd.setCursor(13, 0); lcd.print("ON "); } break; case 9: if (On_Off2 == true) { On_Off2 = false; lcd.setCursor(13, 1); lcd.print("OFF"); } else { On_Off2 = true ; lcd.setCursor(13, 1); lcd.print("ON "); } break; case 12: if (On_Off3 == true) { On_Off3 = false; lcd.setCursor(13, 0); lcd.print("OFF"); } else { On_Off3 = true ; lcd.setCursor(13, 0); lcd.print("ON "); } break; } } if (enc1.isTurn()) { lcd.backlight(); home_timerMenu = millis(); QR = false; w = true; if (enc1.isClick ()) { cliCk += 1; } switch (menu) { case 1: if (w == true) { lcd.clear(); lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s")); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity); w = false; } break; case 2: if (w == true) { lcd.clear(); userTemp += ench; ench = 0; lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(userTemp); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print("users"); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(userHum); lcd.print("%"); lcd.setCursor(8, 1); lcd.print("users"); w = false; } case 3: if (w == true) { lcd.clear(); userHum += ench; ench = 0; lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(userTemp); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print("users"); lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(userHum); lcd.print("%"); lcd.setCursor(8, 1); lcd.print("users"); w = false; } break; case 4: if (w == true) { lcd.clear(); hours1 += ench; ench = 0; if (h1 != hours1) { writeEEPROM(disk1, address, hours1); h1 = hours1; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false; } break; case 5: if (w == true) { lcd.clear(); minutes1 += ench; ench = 0; if (m1 != minutes1) { writeEEPROM(disk1, address1, minutes1); m1 = minutes1; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(4, 0); lcd.write(3); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false; } break; case 6: if (w == true) { lcd.clear(); seconds1 += ench; ench = 0; if (s1 != seconds1) { writeEEPROM(disk1, address2, seconds1); s1 = seconds1; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); Serial.println("menuOff"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); Serial.println("menuOn"); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(8, 0); lcd.write(3); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false; } break; case 7: if (w == true) { lcd.clear(); hours2 += ench; ench = 0; if (h2 != hours2) { writeEEPROM(disk1, address3, hours2); h2 = hours2; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); hours2 += ench; ench = 0; w = false; } break; case 8: if (w == true) { lcd.clear(); minutes2 += ench; ench = 0; if (m2 != minutes2) { writeEEPROM(disk1, address4, minutes2); m2 = minutes2; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(4, 1); lcd.write(3); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false; } break; case 9: if (w == true) { lcd.clear(); seconds2 += ench; ench = 0; if (s2 != seconds2) { writeEEPROM(disk1, address5, seconds2); s2 = seconds2; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(8, 1); lcd.write(3); lcd.setCursor(9, 1); lcd.print(seconds2); lcd.setCursor(11, 1); lcd.print("s"); w = false; } break; case 10: if (w == true) { lcd.clear(); hours3 += ench; ench = 0; if (h3 != hours3) { writeEEPROM(disk1, address6, hours3); h3 = hours3; } if (On_Off3 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off3 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false; } break; case 11: if (w == true) { lcd.clear(); minutes3 += ench; ench = 0; if (m3 != minutes3) { writeEEPROM(disk1, address7, minutes3); m3 = minutes3; } if (On_Off3 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off3 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(4, 0); lcd.write(3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false; } break; case 12: if (w == true) { lcd.clear(); seconds3 += ench; ench = 0; if (s3 != seconds3) { writeEEPROM(disk1, address8, seconds3); s3 = seconds3; } if (On_Off3 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off3 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(8, 0); lcd.write(3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false; } break; case 13: lcd.clear(); c += ench; ench = 0; lcd.setCursor(1, 0); lcd.print("DokopM"); lcd.write(3); lcd.setCursor(10, 1); lcd.print(TimsWorker); switch (c) { case 1: lcd.setCursor(8, 0); lcd.print("Experemen"); break; case 2: lcd.setCursor(8, 0); lcd.print("1/2 "); break; case 3: lcd.setCursor(8, 0); lcd.print("Doza "); break; } break; case 14: if (w == true) { lcd.clear(); T_W += ench; ench = 0; TimsWorker = T_W * 100; if (T1 != TimsWorker) { writeEEPROM(disk1, address9, T_W); T1 = TimsWorker; } lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(2, 1); lcd.print("TimsWork"); lcd.setCursor(10, 1); lcd.print(TimsWorker); w = false; } break; case 15: if (w == true) { lcd.clear(); secT += ench; ench = 0; lcd.setCursor(1, 0); lcd.write(3); lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 16: if (w == true) { lcd.clear(); minT += ench; ench = 0; lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(5, 0); lcd.write(3); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 17: if (w == true) { lcd.clear(); hoursT += ench; ench = 0; lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.write(3); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 18: if (w == true) { lcd.clear(); weekdayT += ench; ench = 0; lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(13, 0); lcd.write(3); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 19: if (w == true) { lcd.clear(); dayT += ench; ench = 0; lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(1, 1); lcd.write(3); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 20: if (w == true) { lcd.clear(); monthT += ench; ench = 0; lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(5, 1); lcd.write(3); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 21: if (w == true) { lcd.clear(); yearT += ench; ench = 0; lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.write(3); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; } } if (enc1.isHolded()) { cliCk += 1; } if (menu == 1) { if (millis() - filter_timer2 > 1000ul) { lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s")); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity); filter_timer2 = millis(); } } Serial.print(test); Serial.println(" mid 2"); Time.gettime(); if (On_Off1 == true && qr == true && Time.Hours == hours1 && Time.minutes == minutes1 && Time.seconds == seconds1) { qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen(); } if (On_Off2 == true && qr == true && Time.Hours == hours2 && Time.minutes == minutes2 && Time.seconds == seconds2) { qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen(); } //присвоить переменной значение false if (On_Off3 == true && qr == true && Time.Hours == hours3 && Time.minutes == minutes3 && Time.seconds == seconds3) { qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen(); } if (val_humidity - userHum > 10 && statusVent == LOW ) { digitalWrite (ventilation, HIGH); } if (userHum - val_humidity > 10 && statusVent == HIGH ) { digitalWrite (ventilation, LOW); } if (userTemp - val_temperature > 4 && statusHeat == LOW ) { digitalWrite (heater, HIGH); } if (val_temperature - userTemp > 4 && statusHeat == HIGH ) { digitalWrite (heater, LOW); } if (millis() - TimeWork >= TimsWorker / 2 && W2 == true ) { servoToClose(); W2 = false; TimeWork = 0; } if (millis() - TimeWork >= TimsWorker && W3 == true ) { servoToClose(); W3 = false; TimeWork = 0; } if (millis() - TimeWork >= TimsWorker && qr == false) { servoToClose(); qr = true ; } if (millis() - home_timerMenu >= 30000 && QR == false) { lcd.noBacklight(); home_timerMenu = 0; QR = true; menu = 1; c = 1; lcd.clear(); } if (millis() - filter_timer > FILTER_STEP) { filter_timer = millis(); Serial.println("dat"); switch (sensor.read()) { case DHT_OK: humidity = sensor.hum; temperature = sensor.tem; val_humidity = (val_humidity * 5 + humidity ) / 6; val_temperature = (val_temperature * 5 + temperature) / 6; if (menu == 1) { lcd.setCursor(8, 1); lcd.print(" "); } break; default: lcd.setCursor(8, 1); lcd.print("ERROR"); break; } } if (enc != 0) { menu += enc; enc = 0; } if (c > 3) { c = 3; } if (c < 1) { c = 1; } if (menu > 21) { menu = 1; } if (menu < 1) { menu = 21; } if (hours1 > 23) { hours1 = 0; } if (hours1 < 0) { hours1 = 23; } if (minutes1 > 59) { minutes1 = 0; } if (minutes1 < 0) { minutes1 = 59; } if (seconds1 > 59) { seconds1 = 0; } if (seconds1 < 0) { seconds1 = 59; } if (hours2 > 23) { hours2 = 0; } if (hours2 < 0) { hours2 = 23; } if (minutes2 > 59) { minutes2 = 0; } if (minutes2 < 0) { minutes2 = 59; } if (seconds2 > 59) { seconds2 = 0; } if (seconds2 < 0) { seconds2 = 59; } if (hours3 > 23) { hours3 = 0; } if (hours3 < 0) { hours3 = 23; } if (minutes3 > 59) { minutes3 = 0; } if (minutes3 < 0) { minutes3 = 59; } if (seconds3 > 59) { seconds3 = 0; } if (seconds3 < 0) { seconds3 = 59; } if (secT > 60) { secT = 0; } if (secT < 0) { secT = 60; } if (minT > 60) { minT = 0; } if (minT < 0) { minT = 60; } if (hoursT > 23) { hoursT = 0; } if (hoursT < 0) { hoursT = 23; } if (dayT > 31) { dayT = 1; } if (dayT < 1) { dayT = 31; } if (monthT > 12) { monthT = 1; } if (monthT < 1) { monthT = 12; } if (yearT < 2021) { yearT = 2021; } if (yearT > 3000) { yearT = 3000; } if (weekdayT > 7) { weekdayT = 1; } if (weekdayT < 1) { weekdayT = 7; } if (TimsWorker < 100) { TimsWorker = 100; } if (TimsWorker > 20000) { TimsWorker = 20000; } if (enc1.isHolded()) { cliCk += 1; } Serial.println(test); test = 0; } void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) { Wire.beginTransmission(deviceaddress); Wire.write((int)(eeaddress >> 8)); // MSB Wire.write((int)(eeaddress & 0xFF)); // LSB Wire.write(data); Wire.endTransmission(); delay(5); } byte readEEPROM(int deviceaddress, unsigned int eeaddress ) { byte rdata = 0xFF; Wire.beginTransmission(deviceaddress); Wire.write((int)(eeaddress >> 8)) ; Wire.write((int)(eeaddress & 0xFF)) ; Wire.endTransmission(); Wire.requestFrom(deviceaddress, 1); if (Wire.available()) rdata = Wire.read(); return rdata; } void servoOpen() { for (pos = 90; pos >= 0; pos -= 1) { servo.write(pos); delay(5); } lcd.setCursor(2, 1); lcd.print("OPEN"); } void servoToClose() { for (pos = 0; pos <= 90; pos += 1) { servo.write(pos); delay(5); } servoDo(); } void servoDo() { for (pos = 90; pos >= 88; pos -= 1) { servo.write(pos); delay(5); } lcd.setCursor(2, 1); lcd.print("CLOSE "); } void encoder () { if (enc1.isRight ()) { enc ++; } if (enc1.isLeft ()) { enc --; } if (enc1.isRightH()) { ench++; } if (enc1.isLeftH ()) { ench--; } }аж ,до 100 миллисикунд происходят между окончанием лупа и его началом. это в порядке вещей или это особенность моей писанины? ежли мой косяк то в какую сторону искать?
Это нормально. Перекур это.
Это нормально. Перекур это.
понял, спасибо)
надумал я тут проверить, в каком месте у меня код подвисает так, что инкодэр считывается с пропусками
вбил вывод времени в середине и в конце выполнения кода. выяснилось - что все задержки , аж ,до 100 миллисикунд происходят между окончанием лупа и его началом.
судя по вашему коду - вы это выяснить никак не могли. ибо вы не контролируете время в конце ЛУП
вы это выяснить никак не могли. ибо вы не контролируете время в конце ЛУП
строчка 586 мне рассказывает сколько времени прошло с момента начала лупа
Каким именно образом это "выяснилось"? Покажите протоколы, хотелось бы на них посмотреть.
вот выдержка из серийного порта
при чем , что интересно, после "холостого" лупа, задержка 6 миллисекунд, а после того в котором проводился расчет(стр. с 649 по 681) задержка минимум 40 мс. и это не во время расчета, а именно между лупами
вот выдержка из серийного порта
при чем , что интересно, после "холостого" лупа, задержка 6 миллисекунд, а после того в котором проводился расчет(стр. с 649 по 681) задержка минимум 40 мс. и это не во время расчета, а именно между лупами
ничего интересного. Всей этой статистике грош цена - вы измеряете время один единственный раз - в строке 183, в двух других строчках вы заново время из миллис не читаете, а только выводите в сериал старое значение, то самое. что прочли в строке 183.
Поэтому-то в вашей "статистике" все три значения ВСЕГДА ОДИНАКОВЫЕ, присмотритесь.
Ну и смех...
упс
Ну и смех...
вот выдержка из серийного порта
Что-то подобное я и предполагал.
По сути Вам уже объяснили, а чтобы реально что-то увидеть, можно даже не измерять время, просто включите временные метки в мониторе порта и печатайте что-то легко узнаваемое, типа "Enter loop", "Exit loop" - как-нибудь так.
Только между выходом из loop и повторным входом в него не может проходить 100мс. Там ни фига не делается, кроме
а это не может время жрать
а это не может время жрать
Пробовал ради интереса считать до миллиона в лупе и в цикле for(;;) внутри лупа. Разница по времени на 328Р получилась 2 порядка. Хотя, эти порядки были в области микрос..
а это не может время жрать
Пробовал ради интереса считать до миллиона в лупе и в цикле for(;;) внутри лупа. Разница по времени на 328Р получилась 2 порядка. Хотя, эти порядки были в области микрос..
Вы бы код приводили. А то, оптимизатор - он хитрый, может и целиком for выкинуть.
Пробовал ради интереса считать до миллиона в лупе и в цикле for(;;) внутри лупа. Разница по времени на 328Р получилась 2 порядка. Хотя, эти порядки были в области микрос..
Если цикл пустой, то понятно, что будет разница в разы (ну не на два порядка, конечно, это Вы преувеличили), но в разы. Но чем больше действий в цикле, тем меньше разница, т.к. накладные там константа.
Если цикл пустой, то понятно, что будет разница в разы
это по тому, что в лупе есть "for",в котором счет, а в "for" только счет?
в лупе есть "for",в котором счет, а в "for" только счет?
Вы сами понимаете, что здесь написано? Я - нет.
Вы сами понимаете, что здесь написано? Я - нет.
void loop(){ z1 for(n1){ }n2 z2 }имелось ввиду, что с z1 по z2 проходит времени больше чем с n1 по n2
Всё равно не понял.
Всё равно не понял.
с первой по седьмую строчку код выполняется дольше, чем с третьей по четвертую.
И что Вас смущает?
Давайте так. Вы приводите нормальный код, который можно запустить и посмотреть что там и как выполняется и мы его обсуждаем. Потому, что обсуждение сферического кода ... я такого не курю.
Здравствуйте уважаемые форумчане. приближается новый год, а значит время очередного обострения.
взялся я вновь доделывать кормушку и столкнулся с очередной проблемой - по I2c у меня два устройства общаются - внешняя память на AT24C256B и LCD дисплей (самый стандартный).
без памяти все работает отлично(дисплей и программа), как только подключаю память и пытаюсь в нее сто либо записать на дисплее начинает твориться дичь и через какое то время все зависает.
у памяти же свой адрес устройства, а у дисплея свой. как они пересекаются?
#define CLK 0 #define DT 1 #define SW 9 #define RST A0 #define CLK_rts A2 #define DAT A3 #define ventilation 6 #define heater 5 #define FILTER_STEP 3000 #define disk1 0x50 #include <LiquidCrystal_I2C_OLED.h> #include <Servo.h> #include <iarduino_RTC.h> #include "GyverEncoder.h" #include "iarduino_DHT.h" #include <Wire.h> Encoder enc1(CLK, DT, SW, 2); iarduino_DHT sensor(A1); LiquidCrystal_I2C lcd(0x27, 16, 2); Servo servo; iarduino_RTC Time (RTC_DS1302, RST, CLK_rts, DAT); //назначение пинов обмена данными RST, CLK, DAT int hours1 = 0, h1, hours2 = 0, h2, minutes1 = 0, m1, minutes2 = 0, m2, seconds1 = 0, s1, seconds2 = 0, s2, T1, pos = 0, TimsWorker, hours3 = 0, h3, minutes3 = 0, m3, seconds3 = 0, s3 ; unsigned int address = 0, address1 = 10, address2 = 20, address3 = 30, address4 = 40, address5 = 50, address6 = 60, address7 = 70, address8 = 80, address9 = 90; unsigned long filter_timer, filter_timer2, TimeWork, home_timerMenu, userTemp = 15ul, userHum = 70ul, val_humidity, val_temperature, humidity, temperature; int ench = 0, enc = 0, yearT, cliCk = 0; boolean qr = true, QR = true, W2 = false, W3 = false, w, On_Off1 = true, On_Off2 = true, On_Off3 = false; boolean statusVent = digitalRead(ventilation), statusHeat = digitalRead(heater); byte c = 1, menu = 1, secT, minT, hoursT, dayT, monthT, weekdayT, T_W; byte line_2[8] = { B00010, B10101, B10101, B01110, B00100, B00100, B00100, }; byte line_1[8] = { B00100, B01010, B00100, B00000, B00000, B00000, B00000, }; byte line_3[8] = { B11000, B01100, B00110, B00111, B00110, B01100, B11000, }; byte line_4[8] = { B00000, B01100, B10010, B10000, B10000, B10010, B01100, }; void setup() { delay(300); Time.begin(); Serial.begin(9600); Wire.begin(); pinMode(ventilation, OUTPUT); pinMode(heater, OUTPUT); digitalWrite(ventilation, HIGH); digitalWrite(heater, HIGH); attachInterrupt(2, encoder, CHANGE); attachInterrupt(3, encoder, CHANGE); lcd.init(); enc1.setTickMode(AUTO); servo.attach(14); filter_timer = millis(); filter_timer2 = millis(); lcd.createChar(1, line_1); lcd.createChar(2, line_2); lcd.createChar(3, line_3); lcd.createChar(4, line_4); hours1 = readEEPROM(disk1, address ); h1 = hours1; minutes1 = readEEPROM(disk1, address1); m1 = minutes1; seconds1 = readEEPROM(disk1, address2); s1 = seconds1; hours2 = readEEPROM(disk1, address3); h2 = hours2; minutes2 = readEEPROM(disk1, address4); m2 = minutes2; seconds2 = readEEPROM(disk1, address5); s2 = seconds2; hours3 = readEEPROM(disk1, address6); h3 = hours3; minutes3 = readEEPROM(disk1, address7); m3 = minutes3; seconds3 = readEEPROM(disk1, address8); s3 = seconds3; T_W = readEEPROM(disk1, address9); TimsWorker = T_W * 100; T1 = TimsWorker; } void loop() { Serial.print("Xyu"); Time.period(5); if (enc1.isHolded()) { cliCk += 1; } if (cliCk != 0) { cliCk = 0; home_timerMenu = millis(); switch (menu) { case 21: Time.settime(secT, minT, hoursT, dayT, monthT, yearT, weekdayT); break; case 13: switch (c) { case 1: servoOpen(); servoToClose(); break; case 2: W2 = true; servoOpen(); TimeWork = millis(); break; case 3: W3 = true; servoOpen(); TimeWork = millis(); break; } case 6: if (On_Off1 == true) { On_Off1 = false; lcd.setCursor(13, 0); lcd.print("OFF"); } else { On_Off1 = true ; lcd.setCursor(13, 0); lcd.print("ON "); } break; case 9: if (On_Off2 == true) { On_Off2 = false; lcd.setCursor(13, 1); lcd.print("OFF"); } else { On_Off2 = true ; lcd.setCursor(13, 1); lcd.print("ON "); } break; case 12: if (On_Off3 == true) { On_Off3 = false; lcd.setCursor(13, 0); lcd.print("OFF"); } else { On_Off3 = true ; lcd.setCursor(13, 0); lcd.print("ON "); } break; } } if (enc1.isTurn()) { lcd.backlight(); home_timerMenu = millis(); QR = false; w = true; if (enc1.isClick ()) { cliCk += 1; } if (enc != 0) { menu += enc; enc = 0; if (menu > 21) { menu = 1; } if (menu < 1) { menu = 21; } } switch (menu) { case 1: if (w == true) { lcd.clear(); lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s")); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity); w = false; } break; case 2: if (w == true) { lcd.clear(); userTemp += ench; ench = 0; lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(userTemp); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print("users"); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(userHum); lcd.print("%"); lcd.setCursor(8, 1); lcd.print("users"); w = false; } break; case 3: if (w == true) { lcd.clear(); userHum += ench; ench = 0; lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(userTemp); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print("users"); lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(userHum); lcd.print("%"); lcd.setCursor(8, 1); lcd.print("users"); w = false; } break; case 4: if (w == true) { lcd.clear(); hours1 += ench; ench = 0; if (hours1 > 23) { hours1 = 0; } if (hours1 < 0) { hours1 = 23; } if (h1 != hours1) { writeEEPROM(disk1, address, hours1); h1 = hours1; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false; } break; case 5: if (w == true) { lcd.clear(); minutes1 += ench; ench = 0; if (minutes1 > 59) { minutes1 = 0; } if (minutes1 < 0) { minutes1 = 59; } if (m1 != minutes1) { writeEEPROM(disk1, address1, minutes1); m1 = minutes1; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(4, 0); lcd.write(3); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false; } break; case 6: if (w == true) { lcd.clear(); seconds1 += ench; ench = 0; if (seconds1 > 59) { seconds1 = 0; } if (seconds1 < 0) { seconds1 = 59; } if (s1 != seconds1) { writeEEPROM(disk1, address2, seconds1); s1 = seconds1; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(8, 0); lcd.write(3); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false; } break; case 7: if (w == true) { lcd.clear(); hours2 += ench; ench = 0; if (hours2 > 23) { hours2 = 0; } if (hours2 < 0) { hours2 = 23; } if (h2 != hours2) { writeEEPROM(disk1, address3, hours2); h2 = hours2; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); hours2 += ench; ench = 0; w = false; } break; case 8: if (w == true) { lcd.clear(); minutes2 += ench; ench = 0; if (minutes2 > 59) { minutes2 = 0; } if (minutes2 < 0) { minutes2 = 59; } if (m2 != minutes2) { writeEEPROM(disk1, address4, minutes2); m2 = minutes2; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(4, 1); lcd.write(3); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(11, 1); lcd.print("s"); lcd.setCursor(9, 1); lcd.print(seconds2); w = false; } break; case 9: if (w == true) { lcd.clear(); seconds2 += ench; ench = 0; if (seconds2 > 59) { seconds2 = 0; } if (seconds2 < 0) { seconds2 = 59; } if (s2 != seconds2) { writeEEPROM(disk1, address5, seconds2); s2 = seconds2; } if (On_Off1 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off1 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } if (On_Off2 == true) { lcd.setCursor(13, 1); lcd.print("ON "); } if (On_Off2 == false) { lcd.setCursor(13, 1); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours1); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes1); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds1); lcd.setCursor(3, 1); lcd.print("h"); lcd.setCursor(1, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("m"); lcd.setCursor(5, 1); lcd.print(minutes2); lcd.setCursor(8, 1); lcd.write(3); lcd.setCursor(9, 1); lcd.print(seconds2); lcd.setCursor(11, 1); lcd.print("s"); w = false; } break; case 10: if (w == true) { lcd.clear(); hours3 += ench; ench = 0; if (hours3 > 23) { hours3 = 0; } if (hours3 < 0) { hours3 = 23; } if (h3 != hours3) { writeEEPROM(disk1, address6, hours3); h3 = hours3; } if (On_Off3 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off3 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false; } break; case 11: if (w == true) { lcd.clear(); minutes3 += ench; ench = 0; if (minutes3 > 59) { minutes3 = 0; } if (minutes3 < 0) { minutes3 = 59; } if (m3 != minutes3) { writeEEPROM(disk1, address7, minutes3); m3 = minutes3; } if (On_Off3 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off3 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(4, 0); lcd.write(3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false; } break; case 12: if (w == true) { lcd.clear(); seconds3 += ench; ench = 0; if (seconds3 > 59) { seconds3 = 0; } if (seconds3 < 0) { seconds3 = 59; } if (s3 != seconds3) { writeEEPROM(disk1, address8, seconds3); s3 = seconds3; } if (On_Off3 == true) { lcd.setCursor(13, 0); lcd.print("ON "); } if (On_Off3 == false) { lcd.setCursor(13, 0); lcd.print("OFF"); } lcd.setCursor(3, 0); lcd.print("h"); lcd.setCursor(1, 0); lcd.print(hours3); lcd.setCursor(7, 0); lcd.print("m"); lcd.setCursor(5, 0); lcd.print(minutes3); lcd.setCursor(8, 0); lcd.write(3); lcd.setCursor(11, 0); lcd.print("s"); lcd.setCursor(9, 0); lcd.print(seconds3); w = false; } break; case 13: lcd.clear(); c += ench; ench = 0; if (c > 3) { c = 3; } if (c < 1) { c = 1; } lcd.setCursor(1, 0); lcd.print("DokopM"); lcd.write(3); lcd.setCursor(10, 1); lcd.print(TimsWorker); switch (c) { case 1: lcd.setCursor(8, 0); lcd.print("Experemen"); break; case 2: lcd.setCursor(8, 0); lcd.print("1/2 "); break; case 3: lcd.setCursor(8, 0); lcd.print("Doza "); break; } break; case 14: if (w == true) { lcd.clear(); T_W += ench; ench = 0; TimsWorker = T_W * 100; if (TimsWorker < 100) { TimsWorker = 100; } if (TimsWorker > 20000) { TimsWorker = 20000; } if (T1 != TimsWorker) { writeEEPROM(disk1, address9, T_W); T1 = TimsWorker; } lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(2, 1); lcd.print("TimsWork"); lcd.setCursor(10, 1); lcd.print(TimsWorker); w = false; } break; case 15: if (w == true){ lcd.clear(); secT += ench; ench = 0; if (secT > 60){ secT = 0; } if (secT < 0){ secT = 60; } lcd.setCursor(1, 0); lcd.write(3); lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 16: if (w == true){ lcd.clear(); minT += ench; ench = 0; if (minT > 60){ minT = 0; } if (minT < 0){ minT = 60; } lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(5, 0); lcd.write(3); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 17: if (w == true) { lcd.clear(); hoursT += ench; ench = 0; if (hoursT > 23) { hoursT = 0; } if (hoursT < 0) { hoursT = 23; } lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.write(3); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 18: if (w == true) { lcd.clear(); weekdayT += ench; ench = 0; if (weekdayT > 7) { weekdayT = 1; } if (weekdayT < 1) { weekdayT = 7; } lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(13, 0); lcd.write(3); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 19: if (w == true) { lcd.clear(); dayT += ench; ench = 0; if (dayT > 31) { dayT = 1; } if (dayT < 1) { dayT = 31; } lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(1, 1); lcd.write(3); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 20: if (w == true) { lcd.clear(); monthT += ench; ench = 0; if (monthT > 12) { monthT = 1; } if (monthT < 1) { monthT = 12; } lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(5, 1); lcd.write(3); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; case 21: if (w == true) { lcd.clear(); yearT += ench; ench = 0; if (yearT < 2021) { yearT = 2021; } if (yearT > 3000) { yearT = 3000; } lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w"); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.write(3); lcd.setCursor(10, 1); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false; } break; } } if (menu == 1) { if (millis() - filter_timer2 > 1000ul) { lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s")); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity); filter_timer2 = millis(); } } Time.gettime(); if (On_Off1 == true && qr == true && Time.Hours == hours1 && Time.minutes == minutes1 && Time.seconds == seconds1) { qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen(); } if (On_Off2 == true && qr == true && Time.Hours == hours2 && Time.minutes == minutes2 && Time.seconds == seconds2) { qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen(); } //присвоить переменной значение false if (On_Off3 == true && qr == true && Time.Hours == hours3 && Time.minutes == minutes3 && Time.seconds == seconds3) { qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen(); } //if (val_humidity - userHum> 10 && statusVent == LOW ){digitalWrite (ventilation,HIGH);} //if (userHum - val_humidity> 10 && statusVent == HIGH ){digitalWrite (ventilation, LOW);} if (userTemp - val_temperature > 4 && statusHeat == LOW ) { digitalWrite (heater, HIGH); } if (val_temperature - userTemp > 4 && statusHeat == HIGH ) { digitalWrite (heater, LOW); } if (millis() - TimeWork >= TimsWorker / 2 && W2 == true ) { servoToClose(); W2 = false; TimeWork = 0; } if (millis() - TimeWork >= TimsWorker && W3 == true) { servoToClose(); W3 = false; TimeWork = 0; } if (millis() - TimeWork >= TimsWorker && qr == false) { servoToClose(); qr = true ; } if (millis() - home_timerMenu >= 30000 && QR == false) { lcd.noBacklight(); home_timerMenu = 0; QR = true; menu = 1; c = 1; lcd.clear(); } if (millis() - filter_timer > FILTER_STEP) { filter_timer = millis(); Serial.println("dat"); switch (sensor.read()) { case DHT_OK: humidity = sensor.hum; temperature = sensor.tem; val_humidity = (val_humidity * 5 + humidity ) / 6; val_temperature = (val_temperature * 5 + temperature) / 6; if (menu == 1) { lcd.setCursor(8, 1); lcd.print(" "); } break; default: lcd.setCursor(8, 1); lcd.print("ERROR"); break; } } } void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) { Wire.beginTransmission(deviceaddress); Wire.write((int)(eeaddress >> 8)); // MSB Wire.write((int)(eeaddress & 0xFF)); // LSB Wire.write(data); Wire.endTransmission(); delay(5); } byte readEEPROM(int deviceaddress, unsigned int eeaddress ) { byte rdata = 0xFF; Wire.beginTransmission(deviceaddress); Wire.write((int)(eeaddress >> 8)) ; Wire.write((int)(eeaddress & 0xFF)) ; Wire.endTransmission(); Wire.requestFrom(deviceaddress, 1); if (Wire.available()) rdata = Wire.read(); return rdata; } void servoOpen() { for (pos = 90; pos >= 0; pos -= 1) { servo.write(pos); delay(5); } lcd.setCursor(2, 1); lcd.print("OPEN"); } void servoToClose() { for (pos = 0; pos <= 90; pos += 1) { servo.write(pos); delay(5); } servoDo(); } void servoDo() { for (pos = 90; pos >= 88; pos -= 1) { servo.write(pos); delay(5); } lcd.setCursor(2, 1); lcd.print("CLOSE "); } void encoder () { if (enc1.isRight ()) { enc ++; } if (enc1.isLeft ()) { enc --; } if (enc1.isRightH()) { ench++; } if (enc1.isLeftH ()) { ench--; } }Давайте ссылки на вот эти библиотеки:
Откуда нам знать, где Вы из брали?
Давайте ссылки на вот эти библиотеки:
Откуда нам знать, где Вы из брали?
https://disk.yandex.ru/d/DSa1wrdmVT9QnA
Во-первых, там капча - имейте совесть. Но я даже её ввёл, но LiquidCrystal_I2C_OLED там нет. Это Вы так пошутили?
да, прочитал про капчу, прошу прощения, но это был самый быстрый способ поделиться именно той библиотекой которая использована в скетче, но все 4 библиотеки в этот архив я засунул, вот отдельно LiquidCrystal_I2C_OLED https://disk.yandex.ru/d/ywQ0o5WCNJW73Q
P.s. там в названии папки нет слова OLED но когда подключаешь библиотеку, оно появляется.
да, прочитал про капчу, прошу прощения, но это был самый быстрый способ поделиться именно той библиотекой которая использована в скетче, но все 4 библиотеки в этот архив я засунул, вот отдельно LiquidCrystal_I2C_OLED https://disk.yandex.ru/d/ywQ0o5WCNJW73Q
P.s. там в названии папки нет слова OLED но когда подключаешь библиотеку, оно появляется.
ну уж нет!
###########################################
# Syntax Coloring Map For LiquidCrystal_I2C
###########################################
###########################################
# Datatypes (KEYWORD1)
###########################################
LiquidCrystal_I2C KEYWORD1
###########################################
# Methods and Functions (KEYWORD2)
###########################################
да, прочитал про капчу, прошу прощения, но это был самый быстрый способ поделиться именно той библиотекой которая использована в скетче, но все 4 библиотеки в этот архив я засунул, вот отдельно LiquidCrystal_I2C_OLED https://disk.yandex.ru/d/ywQ0o5WCNJW73Q
P.s. там в названии папки нет слова OLED но когда подключаешь библиотеку, оно появляется.
Сейчас Вы приложили другую. Сравните архивы. В той просто не было файла с таким именем.
понял, ошибся значит - не специально.
ну уж нет!
###########################################
# Syntax Coloring Map For LiquidCrystal_I2C
###########################################
###########################################
# Datatypes (KEYWORD1)
###########################################
LiquidCrystal_I2C KEYWORD1
###########################################
# Methods and Functions (KEYWORD2)
###########################################
не понял вообще ни чего
Скомпилировал Вашу программу.
Полюбуйтесь на листинг предупреждений:
from C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:13:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h: In member function 'bool iarduino_RTC_DS1302::funcWriteReg(uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h:59:3: warning: no return statement in function returning non-void [-Wreturn-type]
} //
^
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h: In member function 'void iarduino_RTC_DS1302::funcWriteByte(uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h:62:202: warning: comparison is always true due to limited range of data type [-Wtype-limits]
void funcWriteByte (uint8_t j) /* Передача одного байта (байт для передачи) */ {uint8_t i=0, n=500/busRate+1; pinMode(pinDAT, OUTPUT); while(i>=0 && i<8){digitalWrite(pinDAT, (j & _BV(i))); delayMicroseconds(n); digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); i++;} pinMode(pinDAT, INPUT);}
~^~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h: In member function 'uint8_t iarduino_RTC_DS1302::funcReadByte(bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1302.h:63:301: warning: comparison is always true due to limited range of data type [-Wtype-limits]
uint8_t funcReadByte (bool j) /* Получение одного байта (флаг чтения предустановленного бита с линии DAT) */ {uint8_t i=0, k=0, n=500/busRate+1; pinMode(pinDAT, INPUT); if(j){if(digitalRead(pinDAT)){k |= _BV(i);} i++;} while(i>=0 && i<8){digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); delayMicroseconds(n); if(digitalRead(pinDAT)){k |= _BV(i);} i++;} return k;}
~^~~
In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_DS1307.h:4:0,
from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC.h:34,
from C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:13:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::sendID(uint8_t, bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:322:23: warning: unused parameter 'adr' [-Wunused-parameter]
bool sendID(uint8_t adr, bool rw){ // Аргументы: ID-адрес модуля, бит RW (0-запись, 1-чтение)
^~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:322:33: warning: unused parameter 'rw' [-Wunused-parameter]
bool sendID(uint8_t adr, bool rw){ // Аргументы: ID-адрес модуля, бит RW (0-запись, 1-чтение)
^~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::setByte(uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:360:24: warning: unused parameter 'data' [-Wunused-parameter]
bool setByte(uint8_t data){ // Аргумент: байт для передачи.
^~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h: In member function 'virtual uint8_t iarduino_I2C::getByte(bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src/iarduino_RTC_I2C.h:394:24: warning: unused parameter 'ack' [-Wunused-parameter]
uint8_t getByte(bool ack){ // Аргумент: бит подтверждения ACK/NACK
^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino: In function 'void loop()':
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:413:22: warning: comparison is always false due to limited range of data type [-Wtype-limits]
} if (secT < 0){
~~~~~^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:423:22: warning: comparison is always false due to limited range of data type [-Wtype-limits]
} if (minT < 0){
~~~~~^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:433:24: warning: comparison is always false due to limited range of data type [-Wtype-limits]
} if (hoursT < 0) {
~~~~~~~^~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:511:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (millis() - TimeWork >= TimsWorker / 2 && W2 == true ) {
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:516:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (millis() - TimeWork >= TimsWorker && W3 == true) {
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
C:\GoogleD\Soft\Kaka\kaka3\kaka3.ino:521:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (millis() - TimeWork >= TimsWorker && qr == false) {
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::begin(uint8_t, uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:64:39: warning: unused parameter 'cols' [-Wunused-parameter]
void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
^~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::setDelay(int, int)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:412:39: warning: unused parameter 'cmdDelay' [-Wunused-parameter]
void LiquidCrystal_I2C::setDelay (int cmdDelay,int charDelay) {}
^~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:412:52: warning: unused parameter 'charDelay' [-Wunused-parameter]
void LiquidCrystal_I2C::setDelay (int cmdDelay,int charDelay) {}
^~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:415:50: warning: unused parameter 'graphtype' [-Wunused-parameter]
uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t graphtype){return 0;}
^~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t, uint8_t, uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:55: warning: unused parameter 'row' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){}
^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:68: warning: unused parameter 'column' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){}
^~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:84: warning: unused parameter 'len' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){}
^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:416:98: warning: unused parameter 'pixel_col_end' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){}
^~~~~~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::draw_vertical_graph(uint8_t, uint8_t, uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:53: warning: unused parameter 'row' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){}
^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:66: warning: unused parameter 'column' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){}
^~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:82: warning: unused parameter 'len' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){}
^~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:417:96: warning: unused parameter 'pixel_row_end' [-Wunused-parameter]
void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){}
^~~~~~~~~~~~~
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp: In member function 'void LiquidCrystal_I2C::setContrast(uint8_t)':
C:\GoogleD\Soft\libraries\LiquidCrystal_I2C.h_Rus\LiquidCrystal_I2C_OLED.cpp:418:45: warning: unused parameter 'new_val' [-Wunused-parameter]
void LiquidCrystal_I2C::setContrast(uint8_t new_val){}
^~~~~~~
In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.h:33:0,
from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp:1:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h: In member function 'bool iarduino_RTC_DS1302::funcWriteReg(uint8_t, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h:59:3: warning: no return statement in function returning non-void [-Wreturn-type]
} //
^
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h: In member function 'void iarduino_RTC_DS1302::funcWriteByte(uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h:62:202: warning: comparison is always true due to limited range of data type [-Wtype-limits]
void funcWriteByte (uint8_t j) /* Передача одного байта (байт для передачи) */ {uint8_t i=0, n=500/busRate+1; pinMode(pinDAT, OUTPUT); while(i>=0 && i<8){digitalWrite(pinDAT, (j & _BV(i))); delayMicroseconds(n); digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); i++;} pinMode(pinDAT, INPUT);}
~^~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h: In member function 'uint8_t iarduino_RTC_DS1302::funcReadByte(bool)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1302.h:63:301: warning: comparison is always true due to limited range of data type [-Wtype-limits]
uint8_t funcReadByte (bool j) /* Получение одного байта (флаг чтения предустановленного бита с линии DAT) */ {uint8_t i=0, k=0, n=500/busRate+1; pinMode(pinDAT, INPUT); if(j){if(digitalRead(pinDAT)){k |= _BV(i);} i++;} while(i>=0 && i<8){digitalWrite(pinCLK, 1); delayMicroseconds(n); digitalWrite(pinCLK, 0); delayMicroseconds(n); if(digitalRead(pinDAT)){k |= _BV(i);} i++;} return k;}
~^~~
In file included from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_DS1307.h:4:0,
from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.h:34,
from C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp:1:
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::readBytes(uint8_t, uint8_t, uint8_t*, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:145:29: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
if (sum) { if(TWSR&0xF8!=0x50) { i=0;}} // Если после чтения очередного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x50 значит произошла ошибка при чтении
~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:146:26: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
else { if(TWSR&0xF8!=0x58) { i=0;}} // Если после чтения последного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x58 значит произошла ошибка при чтении
~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::readBytes(uint8_t, uint8_t*, uint8_t)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:168:29: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
if (sum) { if(TWSR&0xF8!=0x50) { i=0;}} // Если после чтения очередного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x50 значит произошла ошибка при чтении
~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC_I2C.h:169:26: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
else { if(TWSR&0xF8!=0x58) { i=0;}} // Если после чтения последного байта пакета значение регистра состояния шины I2C Arduino TWSR с маской 0xF8 не равно 0x58 значит произошла ошибка при чтении
~~~~^~~~~~
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp: In member function 'char* iarduino_RTC::gettime(const char*)':
C:\GoogleD\Soft\libraries\iarduino_RTC-1.3.4\src\iarduino_RTC.cpp:6:26: warning: unused variable 'f' [-Wunused-variable]
uint8_t j, k, n; bool f; // Объявляем локальные переменные
^
C:\GoogleD\Soft\libraries\iarduino_DHT-master\src\iarduino_DHT.cpp: In member function 'int8_t iarduino_DHT::readSDA()':
C:\GoogleD\Soft\libraries\iarduino_DHT-master\src\iarduino_DHT.cpp:31:55: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
if( (reply[0]==0) || (reply[1]!=0) || (reply[2]&0x80>0) ) { model=22; } // Датчик определён как DHT22, так как DHT11 возвращает влажность более 10%, без десятых долей, а температуру без отрицательных значений.
~~~~^~
Скетч использует 23630 байт (76%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 920 байт (44%) динамической памяти, оставляя 1128 байт для локальных переменных. Максимум: 2048 байт.
Часть из них - просто следствие небрежного программирования, друиге - признак возможной ошибки, а третьи - просто стопудовые ошибки (эти я выделил жирным, если ничего не пропустил). Например, в строке №413 Вы пишете
if(secT < 0)компилятор Вас предупреждает, что условие в скобках ВСЕГДА ложно. Значит, то, что после if, НИКОГДА не выполнится. Но ведь зачем-то Вы это писали? Неужели Вас не насторожило, что часть Вашего кода не будет исполняться никогда и Вы не посчитали это ошибкой?
Причём, большая часть предупреждений приходится на библиотеки. Вы действительно считаете, что столь небрежно написанные библиотеки можно включать в свой код?
Вы действительно считаете, что столь небрежно написанные библиотеки можно включать в свой код?
честно говоря я библиотеки ни когда не проверял. как то раз смотрел урок гайвера про написание библиотек, но этим моё изучение их ограничилось.
честно говоря я библиотеки ни когда не проверял.
Что значит "не проверял"? Вы что, не видели этой длинной портянки предупреждений, которую я привёл? А если видели, то никакой другой проверки и не надо - просто смотрите сколько там всего! Причём, повторяю, часть - просто небрежность, но есть и такие, что явно свидетельствуют об ошибках. Просто смотрите и ... либо надо править библиотеку, либо искать другую, но пользоваться такими - это искать приключений себе на все места.
а что за компилятор у вас такой? мой пишет - "Скетч использует 23630 байт (73%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 920 байт (44%) динамической памяти, оставляя 1128 байт для локальных переменных. Максимум: 2048 байт."
о как, спасибо)
Понятно. Вы, тут вроде давно, но, наверное, пропустили мой постоянный мат на эту тему.
Дело в том, что разработчики IDE по умолчанию выключили вывод любых предупреждений. Видимо, для того, чтобы не смущать всякими глупостЯми блондинок и беременных доярок, которых они считают своими "целевыми пользователями".
Если Вы планируете делать хоть что-то сложнее блинка, Вы просто обязаны включить вывод сообщений. Зайдите в "Настройки" и сделайте, как на этой картинке - "Сообщения компилятора - Все" (сейчас у Вас там выбрано "Ничего")
У Вас просто глаза откроются. А то сейчас Вы спрятали голову в песок - "ошибок видеть не хочу, они мне нервы портят" :-)
Сразу увидите простыню предупреждений. Разбирайтесь с ними.
Разбирайтесь с ними.
спасибо, попробую)
Разбирайтесь с ними.
проведя несколько часов в попытках разобраться как исправить ошибки в библиотеках - я понял, что когда человек в собственном коде с трудом разбирается, то в чужом ему вообще делать нечего.
я за лето половину забыл того что знал, а там 80%того что я и не знал) на C или C++ написано
я за лето половину забыл того что знал, а там 80%того что я и не знал) на C или C++ написано
Тоже такое случается постоянно каждую осень. Есть идеи как победить ситуацию? Можно клуб замутить, кстати
Моё видение этого безобразия:
1. Создаём переменные под каждый процесс
2. В цикле программы набавляем единичку на наименьшее общее кратное времени процессов
3. При срабатывании процесса переменная обнуляется
этот форум фактически и есть такой клуб))
В итоге выяснилось - что все проблемы были из за подтягивающих резисторов в 10кОм. хотя в даташите написано " When using a pull-upresistor, Atmel recommends using 10kΩ or less." у меня корректно заработало только при использовании 2кОм.