Какая то неведомая ерунда происходит с моей ардуинкой
- Войдите на сайт для отправки комментариев
Ср, 04/05/2022 - 17:50
Здравствуйте уважаемые!
Тут такое дело.
Своему пауку в террариум решил собрать контроллер температуры, влажности и свет чтобы по таймеру работал.
Код простейший и даже я далекий от C человек написал его. Но теперь какая то ерунда творится.
Я решил сделать индикацию на светодиодах и запихал их в IF, в котором срабатывают реле по датчикам.
................
if (h < H_matrix[0][0]) {
digitalWrite(6, HIGH); // Реле на влажность
digitalWrite(9, HIGH); // Светодиод
}
else if (h >= H_matrix[0][1]) {
digitalWrite(6, LOW);
digitalWrite(9, LOW);
}
...................
Ну вы сами видели. ПРОСТЕЙШИЙ КОД!!!!
Но датчик и реле работают, а светодиод нет))))
Я его в начало (void setup) выводил и он загорался. Минут двадцать игрался с ним миганиями через ШИМ.
Но в IF он не срабатывает. Почему? Подскажите пожалуйста.
У меня например подозрения на заводскую прошивку. Заказал программатор и буду ее перезаливать.
PS А на прошивку у меня реально подозрения.
У моей ардуинки LOW это логическая единица))))))))))))
В куске кода выше я для вас написал правильно HIGH и LOW.
У меня же она по LOW дает HIGH.
arduino nano 328p
Буду очень признателен если поможете.
Вот если что весь код. Вдруг паука или скорпиона возьмете)))
да уж, всё как всегда )))
Здравствуйте.
Какую то ошибку в коде нашли?)))
Намёк ТС не понял, пишем в лоб: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
#include <Wire.h> #include <DHT.h> #include <iarduino_RTC.h> #include <iarduino_OLED_txt.h> #define DHTTYPE DHT22 extern uint8_t SmallFontRus[]; extern uint8_t MediumFontRus[]; DHT dht(2, DHTTYPE); iarduino_RTC time(RTC_DS3231); iarduino_OLED_txt myOLED_1(0x3C); iarduino_OLED_txt myOLED_2(0x3C); void setup() { Serial.begin(9600); // Реле pinMode(6, OUTPUT); // Влажность pinMode(7, OUTPUT); // Температура pinMode(8, OUTPUT); // Освещение // Дисплей myOLED_1.begin(); myOLED_1.setFont(SmallFontRus); myOLED_2.begin(); myOLED_2.setFont(MediumFontRus); dht.begin(); // Установка даты и времени time.begin(); //time.settime(55, 11 , 23, 3, 5, 22); } void loop() { // Матрицы (Эталонных значений) float H_matrix [5][4] = { //Зима Лето {90, 99, 90, 99}, // morning {50, 70, 50, 70}, // noon {30, 50, 30, 50}, // afternoon {50, 70, 50, 70}, // evening {30, 50, 30, 50}, // night }; float T_matrix [5][4] = { //Зима Лето {15, 25, 15, 25}, // morning {23, 26, 25, 27}, // noon {26, 29, 30, 32}, // afternoon {26, 28, 27, 30}, // evening {20, 23, 23, 25}, // night }; float t = dht.readTemperature(); float h = dht.readHumidity(); myOLED_1.setCursor( 20, 1); myOLED_1.print(time.gettime("d-m-y H:i")); myOLED_2.setCursor(70, 7); myOLED_2.print(t); myOLED_1.setCursor(0, 6); myOLED_1.print("Температура"); myOLED_2.setCursor(70, 4); myOLED_2.print(h); myOLED_1.setCursor(8, 3); myOLED_1.print("Влажность"); // Индикация // myOLED_1.setCursor(9, 7); // myOLED_1.print("Включено"); // Температура // myOLED_1.setCursor(10, 4); // myOLED_1.print("Включено"); // Влажность // Влажность // Зима if (time.month == 12 || time.month == 1 || time.month == 2) { // Morning if (time.Hours == 9 || time.Hours == 10 || time.Hours == 11 ) { if (h < H_matrix[0][0]) { digitalWrite(6, LOW); } else if (h >= H_matrix[0][1]) { digitalWrite(6, HIGH); } } // Noon else if (time.Hours == 12 || time.Hours == 13 || time.Hours == 14) { if (h < H_matrix[1][0]) { digitalWrite(6, LOW); } else if (h >= H_matrix[1][1]) { digitalWrite(6, HIGH); } } // Afternoon else if (time.Hours == 15 || time.Hours == 16 || time.Hours == 17) { if (h < H_matrix[2][0]) { digitalWrite(6, LOW); } else if (h >= H_matrix[2][1]) { digitalWrite(6, HIGH); } } // Evening else if (time.Hours == 18 || time.Hours == 19 || time.Hours == 20 || time.Hours == 21) { if (h < H_matrix[3][0]) { digitalWrite(6, LOW); } else if (h >= H_matrix[3][1]) { digitalWrite(6, HIGH); } } // Night else { if (h < H_matrix[4][0]) { digitalWrite(6, LOW); } else if (h >= H_matrix[4][1]) { digitalWrite(6, HIGH); } } } // Лето else { // Morning if (time.Hours == 9 || time.Hours == 10 || time.Hours == 11) { if (h < H_matrix[0][2]) { digitalWrite(6, LOW); } else if (h >= H_matrix[0][3]) { digitalWrite(6, HIGH); } } // Noon else if (time.Hours == 12 || time.Hours == 13 || time.Hours == 14) { if (h < H_matrix[1][2]) { digitalWrite(6, LOW); } else if (h >= H_matrix[1][3]) { digitalWrite(6, HIGH); } } // Afternoon else if (time.Hours == 15 || time.Hours == 16 || time.Hours == 17) { if (h < H_matrix[2][2]) { digitalWrite(6, LOW); } else if (h >= H_matrix[2][3]) { digitalWrite(6, HIGH); } } // Evening else if (time.Hours == 18 || time.Hours == 19 || time.Hours == 20 || time.Hours == 21) { if (h < H_matrix[3][2]) { digitalWrite(6, LOW); } else if (h >= H_matrix[3][3]) { digitalWrite(6, HIGH); } } // Night else { if (h < H_matrix[4][2]) { digitalWrite(6, LOW); } else if (h >= H_matrix[4][3]) { digitalWrite(6, HIGH); } } } // Температура // Зима if (time.month == 12 || time.month == 1 || time.month == 2) { // Morning if (time.Hours == 9 || time.Hours == 10 || time.Hours == 11 ) { if (t < T_matrix[0][0]) { digitalWrite(7, LOW); } else if (t >= T_matrix[0][1]) { digitalWrite(7, HIGH); } } // Noon else if (time.Hours == 12 || time.Hours == 13 || time.Hours == 14) { if (t < T_matrix[1][0]) { digitalWrite(7, LOW); } else if (t >= T_matrix[1][1]) { digitalWrite(7, HIGH); } } // Afternoon else if (time.Hours == 15 || time.Hours == 16 || time.Hours == 17 ) { if (t < T_matrix[2][0]) { digitalWrite(7, LOW); } else if (t >= T_matrix[2][1]) { digitalWrite(7, HIGH); } } // Evening else if (time.Hours == 18 || time.Hours == 19 || time.Hours == 20 || time.Hours == 21) { if (t < T_matrix[3][0]) { digitalWrite(7, LOW); } else if (t >= T_matrix[3][1]) { digitalWrite(7, HIGH); } } // Night else { if (t < T_matrix[4][0]) { digitalWrite(7, LOW); } else if (t >= T_matrix[4][1]) { digitalWrite(7, HIGH); } } } // Лето else { // Morning if (time.Hours == 9 || time.Hours == 10 || time.Hours == 11) { if (t < T_matrix[0][2]) { digitalWrite(7, LOW); } else if (t >= T_matrix[0][3]) { digitalWrite(7, HIGH); } } // Noon else if (time.Hours == 12 || time.Hours == 13 || time.Hours == 14) { if (t < T_matrix[1][2]) { digitalWrite(7, LOW); } else if (t >= T_matrix[1][3]) { digitalWrite(7, HIGH); } } // Afternoon else if ( time.Hours == 15 || time.Hours == 16 || time.Hours == 17) { if (t < T_matrix[2][2]) { digitalWrite(7, LOW); } else if (t >= T_matrix[2][3]) { digitalWrite(7, HIGH); } } // Evening else if (time.Hours == 18 || time.Hours == 19 || time.Hours == 20 || time.Hours == 21) { if (t < T_matrix[3][2]) { digitalWrite(7, LOW); } else if (t >= T_matrix[3][3]) { digitalWrite(7, HIGH); } } // Night else { if (t < T_matrix[4][2]) { digitalWrite(7, LOW); } else if (t >= T_matrix[4][3]) { digitalWrite(7, HIGH); } } } // Освещение // Зима if (time.month == 12 || time.month == 1 || time.month == 2) { // Morning if (time.Hours == 9 || time.Hours == 10 || time.Hours == 11 ) { digitalWrite(8, LOW); } // Noon else if (time.Hours == 12 || time.Hours == 13 || time.Hours == 14 ) { digitalWrite(8, LOW); } // Afternoon else if (time.Hours == 15 || time.Hours == 16 || time.Hours == 17 ) { digitalWrite(8, LOW); } // Evening else if (time.Hours == 18 || time.Hours == 19 || time.Hours == 20 || time.Hours == 21 ) { digitalWrite(8, LOW); } // Night else { digitalWrite(8, HIGH); } } // Лето else { // Morning if (time.Hours == 9 || time.Hours == 10 || time.Hours == 11) { digitalWrite(8, LOW); } // Noon else if (time.Hours == 12 || time.Hours == 13 || time.Hours == 14) { digitalWrite(8, LOW); } // Afternoon else if (time.Hours == 15 || time.Hours == 16 || time.Hours == 17 ) { digitalWrite(8, LOW); } // Evening else if (time.Hours == 18 || time.Hours == 19 || time.Hours == 20 || time.Hours == 21) { digitalWrite(8, LOW); } // Night else { digitalWrite(8, HIGH); } } // Влажность // Зима if (time.month == 12 || time.month == 1 || time.month == 2) { // Morning if (time.Hours == 9 || time.Hours == 10 || time.Hours == 11 ) { if (h < H_matrix[0][0]) { digitalWrite(6, LOW); } else if (h >= H_matrix[0][1]) { digitalWrite(6, HIGH); } } // Noon else if (time.Hours == 12 || time.Hours == 13 || time.Hours == 14) { if (h < H_matrix[1][0]) { digitalWrite(6, LOW); } else if (h >= H_matrix[1][1]) { digitalWrite(6, HIGH); } } // Afternoon else if (time.Hours == 15 || time.Hours == 16 || time.Hours == 17) { if (h < H_matrix[2][0]) { digitalWrite(6, LOW); } else if (h >= H_matrix[2][1]) { digitalWrite(6, HIGH); } } // Evening else if (time.Hours == 18 || time.Hours == 19 || time.Hours == 20 || time.Hours == 21) { if (h < H_matrix[3][0]) { digitalWrite(6, LOW); } else if (h >= H_matrix[3][1]) { digitalWrite(6, HIGH); } } // Night else { if (h < H_matrix[4][0]) { digitalWrite(6, LOW); } else if (h >= H_matrix[4][1]) { digitalWrite(6, HIGH); } } } // Лето else { // Morning if (time.Hours == 9 || time.Hours == 10 || time.Hours == 11) { if (h < H_matrix[0][2]) { digitalWrite(6, LOW); } else if (h >= H_matrix[0][3]) { digitalWrite(6, HIGH); } } // Noon else if (time.Hours == 12 || time.Hours == 13 || time.Hours == 14) { if (h < H_matrix[1][2]) { digitalWrite(6, LOW); } else if (h >= H_matrix[1][3]) { digitalWrite(6, HIGH); } } // Afternoon else if (time.Hours == 15 || time.Hours == 16 || time.Hours == 17) { if (h < H_matrix[2][2]) { digitalWrite(6, LOW); } else if (h >= H_matrix[2][3]) { digitalWrite(6, HIGH); } } // Evening else if (time.Hours == 18 || time.Hours == 19 || time.Hours == 20 || time.Hours == 21) { if (h < H_matrix[3][2]) { digitalWrite(6, LOW); } else if (h >= H_matrix[3][3]) { digitalWrite(6, HIGH); } } // Night else { if (h < H_matrix[4][2]) { digitalWrite(6, LOW); } else if (h >= H_matrix[4][3]) { digitalWrite(6, HIGH); } } } })))
Извиняюсь.
Здравствуйте.
Какую то ошибку в коде нашли?)))
не я - канпилятор )))
from C:\TEMP\arduino_modified_sketch_653631\sketch_may04a.ino:4: D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC_DS1302.h: In member function 'void iarduino_RTC_DS1302::funcWriteByte(uint8_t)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\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);} ~^~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC_DS1302.h: In member function 'uint8_t iarduino_RTC_DS1302::funcReadByte(bool)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\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 D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC_DS1307.h:4:0, from D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC.h:37, from C:\TEMP\arduino_modified_sketch_653631\sketch_may04a.ino:4: D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::sendID(uint8_t, bool)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC_I2C.h:322:23: warning: unused parameter 'adr' [-Wunused-parameter] bool sendID(uint8_t adr, bool rw){ // Аргументы: ID-адрес модуля, бит RW (0-запись, 1-чтение) ^~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC_I2C.h:322:33: warning: unused parameter 'rw' [-Wunused-parameter] bool sendID(uint8_t adr, bool rw){ // Аргументы: ID-адрес модуля, бит RW (0-запись, 1-чтение) ^~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::setByte(uint8_t)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC_I2C.h:360:24: warning: unused parameter 'data' [-Wunused-parameter] bool setByte(uint8_t data){ // Аргумент: байт для передачи. ^~~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC_I2C.h: In member function 'virtual uint8_t iarduino_I2C::getByte(bool)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src/iarduino_RTC_I2C.h:394:24: warning: unused parameter 'ack' [-Wunused-parameter] uint8_t getByte(bool ack){ // Аргумент: бит подтверждения ACK/NACK ^~~ In file included from D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC.h:36:0, from D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC.cpp:1: D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC_DS1302.h: In member function 'void iarduino_RTC_DS1302::funcWriteByte(uint8_t)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\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);} ~^~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC_DS1302.h: In member function 'uint8_t iarduino_RTC_DS1302::funcReadByte(bool)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\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 D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC_DS1307.h:4:0, from D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC.h:37, from D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC.cpp:1: D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::readBytes(uint8_t, uint8_t, uint8_t*, uint8_t)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\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 значит произошла ошибка при чтении ~~~~^~~~~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\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 значит произошла ошибка при чтении ~~~~^~~~~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC_I2C.h: In member function 'virtual bool iarduino_I2C::readBytes(uint8_t, uint8_t*, uint8_t)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\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 значит произошла ошибка при чтении ~~~~^~~~~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\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 значит произошла ошибка при чтении ~~~~^~~~~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC.cpp: In member function 'char* iarduino_RTC::gettime(const char*)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_RTC-2.0.0\src\iarduino_RTC.cpp:6:26: warning: unused variable 'f' [-Wunused-variable] uint8_t j, k, n; bool f; // Объявляем локальные переменные ^ Compiling library "iarduino_OLED_txt-1.1.0" "D:\\ARDUINO\\arduino-1.8.19\\portable\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\packages\\arduino\\hardware\\avr\\1.8.5\\cores\\arduino" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\packages\\arduino\\hardware\\avr\\1.8.5\\variants\\standard" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\packages\\arduino\\hardware\\avr\\1.8.5\\libraries\\Wire\\src" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\sketchbook\\libraries\\DHT-sensor-library-master" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\sketchbook\\libraries\\iarduino_RTC-2.0.0\\src" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\sketchbook\\libraries\\iarduino_OLED_txt-1.1.0\\src" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\sketchbook\\libraries\\Adafruit_Sensor-master" "D:\\ARDUINO\\arduino-1.8.19\\portable\\sketchbook\\libraries\\iarduino_OLED_txt-1.1.0\\src\\DefaultFonts.c" -o "C:\\TEMP\\arduino_build_801691\\libraries\\iarduino_OLED_txt-1.1.0\\DefaultFonts.c.o" "D:\\ARDUINO\\arduino-1.8.19\\portable\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\packages\\arduino\\hardware\\avr\\1.8.5\\cores\\arduino" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\packages\\arduino\\hardware\\avr\\1.8.5\\variants\\standard" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\packages\\arduino\\hardware\\avr\\1.8.5\\libraries\\Wire\\src" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\sketchbook\\libraries\\DHT-sensor-library-master" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\sketchbook\\libraries\\iarduino_RTC-2.0.0\\src" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\sketchbook\\libraries\\iarduino_OLED_txt-1.1.0\\src" "-ID:\\ARDUINO\\arduino-1.8.19\\portable\\sketchbook\\libraries\\Adafruit_Sensor-master" "D:\\ARDUINO\\arduino-1.8.19\\portable\\sketchbook\\libraries\\iarduino_OLED_txt-1.1.0\\src\\iarduino_OLED_txt.cpp" -o "C:\\TEMP\\arduino_build_801691\\libraries\\iarduino_OLED_txt-1.1.0\\iarduino_OLED_txt.cpp.o" In file included from D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_OLED_txt-1.1.0\src\iarduino_OLED_txt.h:21:0, from D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_OLED_txt-1.1.0\src\iarduino_OLED_txt.cpp:1: D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_OLED_txt-1.1.0\src/iarduino_OLED_txt_I2C.h: In member function 'virtual bool iarduino_I2C::readBytes(uint8_t, uint8_t, uint8_t*, uint8_t)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_OLED_txt-1.1.0\src/iarduino_OLED_txt_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 значит произошла ошибка при чтении ~~~~^~~~~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_OLED_txt-1.1.0\src/iarduino_OLED_txt_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 значит произошла ошибка при чтении ~~~~^~~~~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_OLED_txt-1.1.0\src/iarduino_OLED_txt_I2C.h: In member function 'virtual bool iarduino_I2C::readBytes(uint8_t, uint8_t*, uint8_t)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_OLED_txt-1.1.0\src/iarduino_OLED_txt_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 значит произошла ошибка при чтении ~~~~^~~~~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_OLED_txt-1.1.0\src/iarduino_OLED_txt_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 значит произошла ошибка при чтении ~~~~^~~~~~ D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_OLED_txt-1.1.0\src\iarduino_OLED_txt.cpp: In member function 'char* iarduino_OLED_txt::_codingCP866(char*)': D:\ARDUINO\arduino-1.8.19\portable\sketchbook\libraries\iarduino_OLED_txt-1.1.0\src\iarduino_OLED_txt.cpp:216:34: warning: comparison is always true due to limited range of data type [-Wtype-limits] if(charThis>=0xF0&&charThis<=0xFF){StrOut[numOut]=charThis-0x10;}else // Если код текущего символа равен 240...255, значит это буква «р»...«я» требующая преобразования к коду 224...239 ~~~~~~~~^~~~~~ Compiling library "Adafruit_Sensor-master" "D:\ARDUINO\arduino-1.8.19\portable\packages\arduino\hardware\avr\1.8.5\cores\arduino\new.cpp:59:60: warning: unused parameter 'tag' [-Wunused-parameter] void * operator new(std::size_t size, const std::nothrow_t tag) noexcept { ^~~ D:\ARDUINO\arduino-1.8.19\portable\packages\arduino\hardware\avr\1.8.5\cores\arduino\new.cpp: In function 'void* operator new [](std::size_t, const std::nothrow_t&)': D:\ARDUINO\arduino-1.8.19\portable\packages\arduino\hardware\avr\1.8.5\cores\arduino\new.cpp:68:63: warning: unused parameter 'tag' [-Wunused-parameter] void * operator new[](std::size_t size, const std::nothrow_t& tag) noexcept { ^~~ D:\ARDUINO\arduino-1.8.19\portable\packages\arduino\hardware\avr\1.8.5\cores\arduino\new.cpp: In function 'void operator delete(void*, const std::nothrow_t&)': D:\ARDUINO\arduino-1.8.19\portable\packages\arduino\hardware\avr\1.8.5\cores\arduino\new.cpp:103:55: warning: unused parameter 'tag' [-Wunused-parameter] void operator delete(void* ptr, const std::nothrow_t& tag) noexcept { ^~~ D:\ARDUINO\arduino-1.8.19\portable\packages\arduino\hardware\avr\1.8.5\cores\arduino\new.cpp: In function 'void operator delete [](void*, const std::nothrow_t&)': D:\ARDUINO\arduino-1.8.19\portable\packages\arduino\hardware\avr\1.8.5\cores\arduino\new.cpp:106:57: warning: unused parameter 'tag' [-Wunused-parameter] void operator delete[](void* ptr, const std::nothrow_t& tag) noexcept { ^~~Ничего себе ошибочка.
эээээмммммм....И ответ искать там или все же как нибудь подскажете
c чего вообще начать разбирать эту проблему)?
И почему у меня при заливании скетча ошибки не выдаются?
Все норм работает (DS3231 , DHT22 ну и реле срабатывают).
c чего вообще начать разбирать эту проблему)?
Начать нужно с того, что изменить логику и превратить "портянку" в нормально читаемый код!
А именно:
1. У тебя везде одни и те же временные интервалы (утро, день и т.д.), так почему ты код делишь на времена года / влажность / температуру и опять по новой интервалы времени? Надо сделать наоборот:
if (утро) { if (зима) { // делаем все что нужно по температуре и влажности для периода "зима" } else if (весна) { // для весны и т.д. } } else if (день) { if (зима) { // делаем все что нужно по температуре и влажности для периода "зима" } else if (весна) { // для весны и т.д. } } else if // ну и так далее.Простынка оооочень сильно сократится. А если она сократится, то и ошибку найти проще. Так что мое мнение - начни с этого!
2. Замени номера используемых пинов на константы с понятным именем. А то постоянно мотать простынку вверх, узнать что это за пин № 6 - как то такое себе...
3. Ну и сами интервалы можно проще описывать:
if (time.Hours >= 15 && time.Hours <= 17) {Ничего себе ошибочка.
не вижу там ни одной ошибки. только предупреждения.
Что касается кода - вы правда думаете. что кто-то будет искать ваши косяки в 700х строчках кода, большая часть из этих строчек - повторы? Нафига вы эту портянку сюда вывалили? Оставьте для теста в коде ОДНО условие по времени и проверьте, будет ли срабатывать светодиод.
Ничего себе ошибочка.
эээээмммммм....И ответ искать там или все же как нибудь подскажете
c чего вообще начать разбирать эту проблему)?
И почему у меня при заливании скетча ошибки не выдаются?
Все норм работает (DS3231 , DHT22 ну и реле срабатывают).
Файл-Настройки-
Показать подробный вывод: - V Компиляция V Загрузка
Сообщения компилятора - Все
Простынка оооочень сильно сократится. А если она сократится, то и ошибку найти проще. Так что мое мнение - начни с этого!
Вау! Круто.
Обязательно так сделаю.
Спасибо.
не вижу там ни одной ошибки. только предупреждения.
Предупреждения по поводу того что я до ненужного код растянул и
ардуинка захлебывается при добавлении туда двух светодиодов?
PS Про простыню на 700 строк согласен.
Если ты попробуешь ПОЧИТАТЬ что написано, то поймёшь что ругань в отношении кода используемых тобой библиотек iarduino_*.h
Вообще-то те пины, которые используете, желательно правильно сконфигурировать на вход или на выход, чтобы потом не удивляться, почему они работают совсем не так, как хочется.
А строки 22,23,24? Хотя я сильно не разматывал эту простыню.
Нет pinmode 9, output для светодиода
Нет pinmode 9, output для светодиода
Да я их пока вырезал,чтобы все остальное работало
Если ты попробуешь ПОЧИТАТЬ что написано, то поймёшь что ругань в отношении кода используемых тобой библиотек iarduino_*.h
Кстати у меня на библиотеки были жалобы.
Тогда снесу библиотеки, начну переписывать по компактнее код и заливая библиотеку сразу по очереди все тестить.
Нет pinmode 9, output для светодиода
Но ты же сам жаловался, что
Но датчик и реле работают, а светодиод нет))))
Пусть сначала код перепишет по компактнее.
Сутки делятся на 5 периодов. Для каждого периода задается Т , ОВВ и время начала. Также задается скорость изменения Т например 2 С/час и ОВВ общие для всех периодов. Получаем такой график Т и ОВВ за сутки. Каждую минуту расчитываем значения уставок и сравниваем с измеренными. Время в минутах с начала суток. Предусмотреть редактирование уставок и сохранение в EEPROM.
Для каждого периода задается Т, ОВВ
Т -таймер типа millis?
А ОВВ это что имеется ввиду?
Ну а с EEPROM справлюсь.
Спасибо.
Для каждого периода задается Т, ОВВ
температура и относительная влажность воздуха
"птичку жалко" - вангую что ТС таки поджарит животинку ...
Всем привет еще раз!)
В общем получается.
- Укоротил код как написал BOOM.
Теперь он не на 687 строк, а на 148 (я все в функцию затолкал и убрал зиму)
- Затем просматривая ход компиляции как написал ua6em.
Я нашел причину огромного колличества предупреждений(Библиотеки кровь пили), да и вообще другие мелкие косяки быстро устраняю.
UNO Приняла уже скетч)
#include <Wire.h> #include <DHT.h> #include <iarduino_RTC.h> #include <iarduino_OLED_txt.h> #define DHTTYPE DHT22 #define temperature_relay 6 #define humidity_relay 7 #define daylight_relay 8 DHT dht(2, DHTTYPE); iarduino_RTC time(RTC_DS3231); iarduino_OLED_txt myOLED_1(0x3C); iarduino_OLED_txt myOLED_2(0x3C); extern uint8_t SmallFontRus[]; extern uint8_t MediumFontRus[]; // Матрица (Эталонных значений) byte m [5][4] = { //Temp. Humid. {15, 25, 90, 99}, // morning {25, 27, 50, 70}, // noon {30, 32, 30, 50}, // afternoon {27, 30, 50, 70}, // evening {23, 25, 30, 50}, // night }; void setup() { Serial.begin(9600); // Пины реле pinMode(temperature_relay, OUTPUT); // Температура pinMode(humidity_relay, OUTPUT); // Влажность pinMode(daylight_relay, OUTPUT); // Освещение // Дисплей myOLED_1.begin(); myOLED_1.setFont(SmallFontRus); myOLED_2.begin(); myOLED_2.setFont(MediumFontRus); dht.begin(); // Установка даты и времени time.begin(); time.settime(55, 11 , 23, 3, 5, 22); } void loop() { // Сенсоры float temperature_sensor = dht.readTemperature(); float humidity_sensor = dht.readHumidity(); // Дисплей myOLED_1.setCursor( 20, 1); myOLED_1.print(time.gettime("d-m-y H:i")); myOLED_2.setCursor(70, 7); myOLED_2.print(temperature_sensor); myOLED_1.setCursor(0, 6); myOLED_1.print("Температура"); myOLED_2.setCursor(70, 4); myOLED_2.print(humidity_sensor); myOLED_1.setCursor(8, 3); myOLED_1.print("Влажность"); if (time.Hours >= 9 && time.Hours <= 11) { // Morning main_function(m[0][0], m[0][1], m[0][2], m[0][3]); digitalWrite(daylight_relay, HIGH); } else if (time.Hours >= 12 && time.Hours <= 14) { // Noon main_function(m[1][0], m[1][1], m[1][2], m[1][3]); digitalWrite(daylight_relay, HIGH); } else if (time.Hours >= 15 && time.Hours <= 17) { // Afternoon main_function(m[2][0], m[2][1], m[2][2], m[2][3]); digitalWrite(daylight_relay, HIGH); } else if (time.Hours >= 8 && time.Hours <= 20) { // Evening main_function(m[3][0], m[3][1], m[3][2], m[3][3]); digitalWrite(daylight_relay, HIGH); } else { // Night main_function(m[4][0], m[4][1], m[4][2], m[4][3]); digitalWrite(daylight_relay, LOW); } } // Основная функция void main_function (byte t_min, byte t_max, byte h_min, byte h_max) { // Сенсоры float temperature_sensor = dht.readTemperature(); float humidity_sensor = dht.readHumidity(); if (temperature_sensor <= t_min ) { digitalWrite(temperature_relay, HIGH); myOLED_1.setCursor(9, 7); myOLED_1.print("Включено"); } else if (temperature_sensor >= t_max ) { digitalWrite(temperature_relay, LOW); } if (humidity_sensor <= h_min ) { digitalWrite(humidity_relay, HIGH); myOLED_1.setCursor(10, 4); myOLED_1.print("Включено"); } else if (humidity_sensor >= h_max ) { digitalWrite(humidity_relay, LOW); } }С таким алгоритмом будут большие скачки по Т и по ОВВ. Вместо мин и макс задайте среднее значение уставки, а основную функцию вызывайте раз в 5-20 сек.
С таким алгоритмом будут большие скачки по Т и по ОВВ. Вместо мин и макс задайте среднее значение уставки, а основную функцию вызывайте раз в 5-20 сек.
Ничего себе, я начинаю Вас всех понимать))))
Интересная идея. Обязательно так попробую
С таким алгоритмом будут большие скачки по Т и по ОВВ. Вместо мин и макс задайте среднее значение уставки, а основную функцию вызывайте раз в 5-20 сек.
И кстати у меня уже скачки)))
По влаге - стекла аж изнутри мокрые.С такими диапазонами в течении дня по несколько раз.
Так что обязательно попробую как советуете.
DHT22 так себе сенсор в плане измерения влажности, особенно на высокой влажности.
DHT22 так себе сенсор в плане измерения влажности, особенно на высокой влажности.
HTU 21 нормальный?
В Ютубе один типок сравнивал датчики и HTU 21 минимальные погрешности имел.
HIH4000 нормальный
HIH4000 нормальный
0_0
Он и стоит норм)
На Али 1 тыр. Как кило колбасы.
На Али 1 тыр. Как кило колбасы.
хорошей )))
BME280 температура влажность и давление в одном флаконе и качество измерений в порядке.
Здравствуйте Уважаемые еще раз!!!
Тут у меня к продолжению темы еще вопросик.
Помните в начале темы я жаловался на негорящие светодиоды?
Вопрос решился и даже больше скажу - светодиоды были заменены на надписи ВКЛ/ВЫКЛ на дисплее.
Все работает, НО эти надписи закреплены на срабатывания реле и пока такового не произойдет они не появляются в цикле (первое включение их короче нет).
Я решил закрепить надписи на наличие/отсутствие логики на пине реле.
И мне получается надо один и тот же пин сделать OUTPUT(что бы реле работало) и INPUT(чтобы digitalRead работало).
А как это сделать???
У меня начинает все безбашено щелкать.
Читать пин можно всегда, независимо от того вход он или выход. Код показывай.
Ща я уберу все ненужное
Номера строк нужны.
Что в этой строке делается
if(digitalRead(temperature_relay == HIGH)) ? Больше не глядел код.PIN_TEMPERATURE_RELE так ведь понятней обозначить пи на котором висит реле?Номера строк нужны.
Что в этой строке делается
if(digitalRead(temperature_relay == HIGH)) ? Больше не глядел код.PIN_TEMPERATURE_RELE так ведь понятней обозначить пи на котором висит реле?Вот тут я и считываю с пина реле
void setup() { Serial.begin(9600); pinMode(PIN_TEMPERATURE_RELAY, OUTPUT); // Температура pinMode(PIN_TEMPERATURE_RELAY, INPUT); // <<<<<<<< Поставил также и на INPUT void loop() { } // Основная функция <<<<<<<< Тут срабатывание реле void main_function (byte t_min, byte t_max) { float temperature_sensor = dht.readTemperature(); if (temperature_sensor <= t_min ) { digitalWrite(PIN_TEMPERATURE_RELAY, HIGH); } else if (temperature_sensor >= t_max ) { digitalWrite(PIN_TEMPERATURE_RELAY, LOW); } } //<<<<<<<<<<<<<<<<<<<<< Вторая функция тут считывания с пина реле void second_function () { if (digitalRеad(PIN_TEMPERATURE_RELAY == HIGH ) { // <<<<<<<Вот тут digitalRead myOLED_2.setCursor(9, 7); myOLED_2.print("вкл"); } else { myOLED_2.setCursor(9, 7); myOLED_2.print("вык"); } } }Все лишнее убрал
Строка 8 отменяет строку 6. Выкладывай код, который компилируется и работает. Если работает не так как нужно, то задавай вопросы.
Я стер это сообщение.
Что я тут написал уже не имеет смысла.
Только путать будет.
Если работает не так как нужно, то задавай вопросы.
Блин нашел причину.
Pyotr простите меня пожалуйста за беспокойство.
И благодарю Вас за столь быстрый отклик на мою проблему.
Короче косяк в синтаксисе. Я тут пролистал свои шпаргалки и нашел причину.
Я писал...
if (digitalRead(PIN_TEMPERATURE_RELAY == HIGH))
А надо было...
if (digitalRead(PIN_TEMPERATURE_RELAY) == HIGH)
Спасибо еще раз Вам.
Всех благ!