Вставлена так, что читать невозможно (я не смог). Форматируйте код нормально (уж хотя бы 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) если сами не можете. Самому же читать текст легче будет.
так?
Кто Вам это сказал? Принимает, только тут же на ON переделывает. Например, строки с №10 по №19
и тоже самое в двух остальных блоках.
Если бы отформатировали программу не для меня, а всегда и смотрели бы на неё отформатированную, то, наверняка бы это заметили.
И, да, кстати, параллельно с экраном печатайте всё в Сериал. Там ведь ничего не затирается. Сразу бы увидели, что OFF появляется, а потом тут же ON и не говорили бы, что OFF никогда не срабатывает. А то Вы с завязанными глазами мины обезвреживаете.
Точно! Выражаю ,Вам, благодарность, от всей души!
замечания учту)
надумал я тут проверить, в каком месте у меня код подвисает так, что инкодэр считывается с пропусками
вбил вывод времени в середине и в конце выполнения кода. выяснилось - что все задержки , аж ,до 100 миллисикунд происходят между окончанием лупа и его началом. это в порядке вещей или это особенность моей писанины? ежли мой косяк то в какую сторону искать?
аж ,до 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" только счет?
Вы сами понимаете, что здесь написано? Я - нет.
Вы сами понимаете, что здесь написано? Я - нет.
имелось ввиду, что с z1 по z2 проходит времени больше чем с n1 по n2
Всё равно не понял.
Всё равно не понял.
с первой по седьмую строчку код выполняется дольше, чем с третьей по четвертую.
И что Вас смущает?
Давайте так. Вы приводите нормальный код, который можно запустить и посмотреть что там и как выполняется и мы его обсуждаем. Потому, что обсуждение сферического кода ... я такого не курю.
Здравствуйте уважаемые форумчане. приближается новый год, а значит время очередного обострения.
взялся я вновь доделывать кормушку и столкнулся с очередной проблемой - по I2c у меня два устройства общаются - внешняя память на AT24C256B и LCD дисплей (самый стандартный).
без памяти все работает отлично(дисплей и программа), как только подключаю память и пытаюсь в нее сто либо записать на дисплее начинает твориться дичь и через какое то время все зависает.
у памяти же свой адрес устройства, а у дисплея свой. как они пересекаются?
Давайте ссылки на вот эти библиотеки:
Откуда нам знать, где Вы из брали?
Давайте ссылки на вот эти библиотеки:
Откуда нам знать, где Вы из брали?
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кОм.