Какая то неведомая ерунда происходит с моей ардуинкой

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Здравствуйте уважаемые!

Тут такое дело.

Своему пауку в террариум решил собрать контроллер температуры, влажности и свет чтобы по таймеру работал.

Код простейший и даже я далекий от 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
 
Буду очень признателен если поможете.
 
Вот если что весь код. Вдруг паука или скорпиона возьмете)))
 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Здравствуйте.

Какую то ошибку в коде нашли?)))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Намёк ТС не понял, пишем в лоб: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

 

#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);
      }
    }
  }
}

 

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

)))

Извиняюсь.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Павел Усачев пишет:

Здравствуйте.

Какую то ошибку в коде нашли?)))

не я - канпилятор )))
 


                 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 {
                                                         ^~~

 

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Ничего себе ошибочка.

эээээмммммм....И ответ искать там или все же как нибудь подскажете

c чего вообще начать разбирать эту проблему)?

И почему у меня при заливании скетча ошибки не выдаются?

Все норм работает (DS3231 , DHT22 ну и реле срабатывают).

 

 

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Павел Усачев пишет:

c чего вообще начать разбирать эту проблему)?

Начать нужно с того, что изменить логику и превратить "портянку" в нормально читаемый код!

А именно:

1. У тебя везде одни и те же временные интервалы (утро, день и т.д.), так почему ты код делишь на времена года / влажность / температуру и опять по новой интервалы времени? Надо сделать наоборот:

if (утро) {
  if (зима) {
     // делаем все что нужно по температуре и влажности для периода "зима"
  } else if (весна) {
    // для весны и т.д.
  }
} else if (день) {
  if (зима) {
     // делаем все что нужно по температуре и влажности для периода "зима"
  } else if (весна) {
    // для весны и т.д.
  }
} else if // ну и так далее.

Простынка оооочень сильно сократится. А если она сократится, то и ошибку найти проще. Так что мое мнение - начни с этого!

2. Замени номера используемых пинов на константы с понятным именем. А то постоянно мотать простынку вверх, узнать что это за пин № 6 - как то такое себе...

3. Ну и сами интервалы можно проще описывать:

if (time.Hours >= 15 && time.Hours <= 17) {

 

b707
Offline
Зарегистрирован: 26.05.2017

Павел Усачев пишет:

Ничего себе ошибочка.

не вижу там ни одной ошибки. только предупреждения.

Что касается кода - вы правда думаете. что кто-то будет искать ваши косяки в 700х строчках кода, большая часть из этих строчек - повторы? Нафига вы эту портянку сюда вывалили? Оставьте для теста в коде ОДНО условие по времени и проверьте, будет ли срабатывать светодиод.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Павел Усачев пишет:

Ничего себе ошибочка.

эээээмммммм....И ответ искать там или все же как нибудь подскажете

c чего вообще начать разбирать эту проблему)?

И почему у меня при заливании скетча ошибки не выдаются?

Все норм работает (DS3231 , DHT22 ну и реле срабатывают).

Файл-Настройки-
Показать подробный вывод: - V Компиляция  V Загрузка
Сообщения компилятора - Все

 

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

BOOM пишет:

Простынка оооочень сильно сократится. А если она сократится, то и ошибку найти проще. Так что мое мнение - начни с этого!

 

Вау! Круто.

Обязательно так сделаю.

Спасибо.

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

b707 пишет:

 

не вижу там ни одной ошибки. только предупреждения.

 

Предупреждения по поводу того что я до ненужного код растянул и

ардуинка захлебывается при добавлении туда двух светодиодов?

PS Про простыню на 700 строк согласен.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Если ты попробуешь ПОЧИТАТЬ что написано, то поймёшь что ругань в отношении кода используемых тобой библиотек iarduino_*.h

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вообще-то те пины, которые используете, желательно правильно сконфигурировать на вход или на выход, чтобы потом не удивляться, почему они работают совсем не так, как хочется.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А строки 22,23,24? Хотя я сильно не разматывал эту простыню.

Туцик
Туцик аватар
Offline
Зарегистрирован: 31.03.2020

Нет pinmode 9, output для светодиода

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Туцик пишет:

Нет pinmode 9, output для светодиода

Да я их пока вырезал,чтобы все остальное работало

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

BOOM пишет:

Если ты попробуешь ПОЧИТАТЬ что написано, то поймёшь что ругань в отношении кода используемых тобой библиотек iarduino_*.h

Кстати у меня на библиотеки были жалобы.

Тогда снесу библиотеки, начну переписывать по компактнее код и заливая библиотеку сразу по очереди все тестить.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Павел Усачев пишет:
Туцик пишет:

Нет pinmode 9, output для светодиода

Да я их пока вырезал,чтобы все остальное работало

Но ты же сам жаловался, что

Павел Усачев пишет:

Но датчик и реле работают, а светодиод нет))))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Пусть сначала код перепишет по компактнее.

Pyotr
Offline
Зарегистрирован: 12.03.2014

Сутки делятся на 5 периодов. Для каждого периода задается Т , ОВВ и время начала. Также задается скорость изменения Т например 2 С/час и ОВВ общие для всех периодов. Получаем такой график Т и ОВВ за сутки. Каждую минуту расчитываем значения уставок и сравниваем с измеренными. Время в минутах с начала суток. Предусмотреть редактирование уставок и сохранение в EEPROM.

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Pyotr пишет:

Для каждого периода задается Т, ОВВ


Т -таймер типа millis?
А ОВВ это что имеется ввиду?
Ну а с EEPROM справлюсь.
Спасибо.

Pyotr
Offline
Зарегистрирован: 12.03.2014

Павел Усачев пишет:
Pyotr пишет:

Для каждого периода задается Т, ОВВ

Т -таймер типа millis? А ОВВ это что имеется ввиду? Ну а с EEPROM справлюсь. Спасибо.

температура и относительная влажность воздуха

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

"птичку жалко" - вангую что ТС таки поджарит животинку ...

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Всем привет еще раз!)

В общем получается.

- Укоротил код как написал BOOM.

Теперь он не на 687 строк, а на 148 (я все в функцию затолкал и убрал зиму)

- Затем просматривая ход компиляции как написал ua6em.

Я нашел причину огромного колличества предупреждений(Библиотеки кровь пили), да и вообще другие мелкие косяки быстро устраняю.

UNO Приняла уже скетч)

avrdude done.  Thank you.

 

 

 

 

 

Павел Усачев
Offline
Зарегистрирован: 03.05.2022
#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);
  }
}

 

Pyotr
Offline
Зарегистрирован: 12.03.2014

С таким алгоритмом будут большие скачки по Т и по ОВВ. Вместо мин и макс задайте среднее значение уставки, а основную функцию вызывайте  раз в 5-20 сек.

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Pyotr пишет:

С таким алгоритмом будут большие скачки по Т и по ОВВ. Вместо мин и макс задайте среднее значение уставки, а основную функцию вызывайте  раз в 5-20 сек.

Ничего себе, я начинаю Вас всех понимать))))

Интересная идея. Обязательно так попробую

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Pyotr пишет:

С таким алгоритмом будут большие скачки по Т и по ОВВ. Вместо мин и макс задайте среднее значение уставки, а основную функцию вызывайте  раз в 5-20 сек.

И кстати у меня уже скачки)))
По влаге - стекла аж изнутри мокрые.С такими диапазонами в течении дня по несколько раз.

Так что обязательно попробую как советуете.

SergeiL
SergeiL аватар
Offline
Зарегистрирован: 05.11.2018

DHT22 так себе сенсор в плане измерения влажности, особенно на высокой влажности.

 

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

SergeiL пишет:

DHT22 так себе сенсор в плане измерения влажности, особенно на высокой влажности.

 

HTU 21 нормальный?
В Ютубе один типок сравнивал датчики и HTU 21 минимальные погрешности имел.

Pyotr
Offline
Зарегистрирован: 12.03.2014

HIH4000 нормальный 

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Pyotr пишет:

HIH4000 нормальный 

0_0

Он и стоит норм)

Pyotr
Offline
Зарегистрирован: 12.03.2014

На Али 1 тыр. Как кило колбасы.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Pyotr пишет:

На Али 1 тыр. Как кило колбасы.

хорошей )))

nik182
Offline
Зарегистрирован: 04.05.2015

BME280 температура влажность и давление в одном флаконе и качество измерений в порядке.

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Здравствуйте Уважаемые еще раз!!!

Тут у меня к продолжению темы еще вопросик.

Помните в начале темы я жаловался на негорящие светодиоды?

Вопрос решился и даже больше скажу - светодиоды были заменены на надписи ВКЛ/ВЫКЛ на дисплее.

Все работает, НО эти надписи закреплены на срабатывания реле и пока такового не произойдет они не появляются в цикле (первое включение их короче нет).

Я решил закрепить надписи на наличие/отсутствие логики на пине реле.

И мне получается надо один и тот же пин сделать OUTPUT(что бы реле работало) и INPUT(чтобы digitalRead работало).

А как это сделать???

У меня начинает все безбашено щелкать.

Pyotr
Offline
Зарегистрирован: 12.03.2014

Читать пин можно всегда, независимо от того вход он или выход. Код показывай.

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Ща я уберу все ненужное

Pyotr
Offline
Зарегистрирован: 12.03.2014

Номера строк нужны. 

Что в этой строке делается  if (digitalRead(temperature_relay == HIGH)) ? Больше не глядел код.

PIN_TEMPERATURE_RELE  так ведь понятней обозначить пи на котором висит реле?

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Pyotr пишет:

Номера строк нужны. 

Что в этой строке делается  if (digitalRead(temperature_relay == HIGH)) ? Больше не глядел код.

PIN_TEMPERATURE_RELE  так ведь понятней обозначить пи на котором висит реле?

Вот тут я и считываю с пина реле

Павел Усачев
Offline
Зарегистрирован: 03.05.2022


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("вык");
    }
  }
}

 

Все лишнее убрал

Pyotr
Offline
Зарегистрирован: 12.03.2014

Строка 8 отменяет строку 6. Выкладывай код, который компилируется и работает. Если работает не так как нужно, то задавай вопросы.

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Я стер это сообщение.

Что я тут написал уже не имеет смысла.

Только путать будет.

Павел Усачев
Offline
Зарегистрирован: 03.05.2022

Pyotr пишет:

 Если работает не так как нужно, то задавай вопросы.

Блин нашел причину.

Pyotr простите меня пожалуйста за беспокойство.

И благодарю Вас за столь быстрый отклик на мою проблему.

Короче косяк в синтаксисе. Я тут пролистал свои шпаргалки и нашел причину.

Я писал...

if (digitalRead(PIN_TEMPERATURE_RELAY == HIGH))

А надо было...

if (digitalRead(PIN_TEMPERATURE_RELAY) == HIGH)

Спасибо еще раз Вам.

Всех благ!