Насколько сложно сделать блок схему с такого кода?

Тема в разделе "Флудилка", создана пользователем WhatLogin, 11 июн 2021.

  1. WhatLogin

    WhatLogin Нерд

    Добрый день мудрецы. Если есть время, можете уделить внимание, как блок схему составить? Не силен. с циклами понятно. А прямоугольники куда..
    Может этот код вообще не идеален, что скорее всего, я собрал его из готовых скетчей в интернете.
    Код (C++):

    // библиотеки
    #include <WiFi.h>
    #include <Wire.h>
    #include <Adafruit_Sensor.h>
    #include <Adafruit_BME280.h>
    #include <ESP32Servo.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>

    #define SCREEN_WIDTH 128
    #define SCREEN_HEIGHT 32
    #define SEALEVELPRESSURE_HPA (1013.25)

    Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
    Adafruit_BME280 bme;
    //сервопривод
    Servo myservo;
    int pos = 0;

    const char* ssid     = "ИМЯ";
    const char* password = "ПАРОЛЬ";

    WiFiServer server(80);
    String header;

    void setup() {
      Serial.begin(115200);

    myservo.attach(13);
    myservo.write(pos);
    //дисплей
      if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
        Serial.println(F("SSD1306 allocation failed"));
        for(;;);
      }
    //датчик
      bool status = bme.begin(0x76);
      if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring!");
        while (1);
      }
      delay(2000);
      display.clearDisplay();
      display.setTextColor(WHITE);
      delay(500);
    //подключение к вифи
    Serial.print("Connecting to ");
      Serial.println(ssid);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      // Выдача ИП для подключения к веб.серверу
      Serial.println("");
      Serial.println("WiFi connected.");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
      server.begin();
      delay(1000);
    }

    void loop() {
      WiFiClient client = server.available();   // Listen for incoming clients
    delay(100);
    //вывод данных на дисплей
    Display();
    delay(100);
    //Условие для сервопривода
    if ( bme.readTemperature() >30 || bme.readHumidity() > 80)
    {
      Display();
      delay(100);
      myservo.write(180);
      delay(100);
    }else {
      Display();
      delay(100);
      myservo.write(pos);
    }
    //связанное с подключением пользователя к веб серверу
      if (client) {
        Serial.println("New Client.");        
        String currentLine = "";              
        while (client.connected()) {          
          if (client.available()) {
            char c = client.read();      
            Serial.write(c);                
            header += c;
            if (c == '\n') {                  
              if (currentLine.length() == 0) {
    //хер знает что такое
                client.println("HTTP/1.1 200 OK");
                client.println("Content-type:text/html");
                client.println("Connection: close");
                client.println();
           
                //Создание страницы
                client.println("<!DOCTYPE html><html>");
                client.println("<html lang='ru-RU'> <head> <meta charset='UTF-8'/> <meta http-equiv=\"refresh\" content=\"5\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1/" ">");
               client.println( "<meta http-equiv=\"refresh\" content=\"2\">");
                client.println("<link rel=\"icon\" href=\"data:,\">");

                // CSS
                client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial;}");
                client.println("table { border-collapse: collapse; width:35%; margin-left:auto; margin-right:auto; }");
                client.println("th { padding: 12px; background-color: #18adc4; color: white; }");
                client.println("tr { border: 1px solid #ddd; padding: 12px; }");
                client.println("tr:hover { background-color: #bcbcbc; }");
                client.println("td { border: none; padding: 12px; }");
                client.println(".sensor { color:white; font-weight: bold; background-color: #a9b0ae; padding: 1px; }");

                // Таблица с данными
                client.println("</style></head><body><h1>Метеостанция</h1>");
                client.println("<table><tr><th>Измерения</th><th>Значения</th></tr>");
                client.println("<tr><td>Температура *C</td><td><span class=\"sensor\">");
                client.println(bme.readTemperature());
                client.println(" *C</span></td></tr>");
                client.println("<tr><td>Температура *F</td><td><span class=\"sensor\">");
                client.println(1.8 * bme.readTemperature() + 32);
                client.println(" *F</span></td></tr>");    
                client.println("<tr><td>Давление</td><td><span class=\"sensor\">");
                client.println(bme.readAltitude(SEALEVELPRESSURE_HPA));
                client.println(" m</span></td></tr>");
                client.println("<tr><td>Влажность</td><td><span class=\"sensor\">");
                client.println(bme.readHumidity());
                client.println(" %</span></td></tr>");
                client.println("</body></html>");      
                client.println();
       
                // Выход из цикла
                break;
                delay(100);
    //дисплей опять
                   Display();
                   delay(100);
              } else {
                currentLine = "";
              }
            } else if (c != '\r') {
              currentLine += c;
            }
          }
        }
        header = "";
    //Закрытие соединения
        client.stop();
        Serial.println("Client disconnected.");
        Serial.println("");
      }
      delay(100);
    //опять вывод на дисплей
      Display();
      delay(100);
    }

    void Display(){
      display.clearDisplay();
      display.setTextSize(0.5);
      display.setCursor(0,0);
      display.print("Temp: ");
      display.setTextSize(1);
      display.setCursor(0,10);
      display.print(String(bme.readTemperature()));
      display.print(" ");
      display.setTextSize(0.5);
      display.cp437(true);
      display.write(167);
      display.setTextSize(1);
      display.print("C");
      display.setTextSize(0.5);
      display.setCursor(64, 0);
      display.print("Hum: ");
      display.setTextSize(1);
      display.setCursor(64, 10);
      display.print(String(bme.readHumidity()));
      display.print(" %");
      display.setTextSize(0.5);
      display.setCursor(0,25);
      display.print("IP");
      display.setTextSize(1);
      display.setCursor(15,25);
      display.print(WiFi.localIP());
      display.display();
      delay(1000);
    }
     
     
    Последнее редактирование: 11 июн 2021
  2. b707

    b707 Гуру

    не сложно
     
  3. Airbus

    Airbus Радиохулиган Модератор

    Както странно. Вообще сначала рисуют схму а потом под нее пишут код. Не наоборот. А что делает Ваше устройство?
     
    SergeiL нравится это.
  4. WhatLogin

    WhatLogin Нерд

    Поймал дежавю от вашего ответа. Ну вкратце это что-то вроде метеостанции на ESP32. Туда включен Дисплей, датчик для считывания температуры и влажности, сама esp32 подключается к роутеру или другой беспроводной точке доступа и выдает IP для подключение к веб. странице. И будут подключены исполнительные устройства. Пока на макете это 1 сервопривод.

    Идею взял отсюда https://diytech.ru/projects/veb-server-na-esp32-sozdanie-mini-meteostancii-na-bme280
     
  5. b707

    b707 Гуру

    блок-схема то вам зачем. если код уже списали в инете?
    курсовик?
     
  6. WhatLogin

    WhatLogin Нерд

    Ну что-то вроде. Я что то вот такое наклепал, но чувствую не правильно[​IMG]
     
  7. parovoZZ

    parovoZZ Гуру

    Всё неправильно Двайбан.
     
    Рокки1945 нравится это.
  8. Рокки1945

    Рокки1945 Гуру

    вообще всегда псевдокод сначала леплю - потом уже кубики шлепую
     
  9. WhatLogin

    WhatLogin Нерд

    так а как правильно?
     
  10. parovoZZ

    parovoZZ Гуру

    Из считывания показаний датчика мы по какому условию вышли в бок?
    Пользователь загрузил страницу. Дальше что происходит? Вся правая половина алгоритма выпала из жизни?
     
    WhatLogin нравится это.
  11. WhatLogin

    WhatLogin Нерд

    Простите, вот я все поменял, вроде все работает, и блок схема по логиче + - правильная, наверное...
    [​IMG]
    Код (C++):

    #include <WiFi.h>
    #include <Wire.h>
    #include <Adafruit_Sensor.h>
    #include <Adafruit_BME280.h>
    #include <ESP32Servo.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>

    #define SCREEN_WIDTH 128
    #define SCREEN_HEIGHT 32
    #define SEALEVELPRESSURE_HPA (1013.25)

    Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

    Adafruit_BME280 bme;

    Servo myservo;
    int pos = 0;

    const char* ssid     = "TP-LINK_CEB8";
    const char* password = "Nasid0119";

    WiFiServer server(80);

    String header;

    void setup() {
      Serial.begin(115200);

    myservo.attach(13);
    myservo.write(pos);
      if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
        Serial.println(F("SSD1306 allocation failed"));
        for(;;);
      }

      bool status = bme.begin(0x76);
      if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring!");
        while (1);
      }

      delay(2000);
      display.clearDisplay();
      display.setTextColor(WHITE);
      delay(500);

    Serial.print("Connecting to ");
      Serial.println(ssid);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }

      Serial.println("");
      Serial.println("WiFi connected.");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
      server.begin();
      delay(1000);
    }

    void loop() {


    delay(100);
    Display();
    delay(100);

      if ( bme.readTemperature() >32 || bme.readHumidity() > 80)
    {
      Display();
      delay(100);
      myservo.write(180);
      delay(100);

    }else {
      Display();
      delay(100);
      myservo.write(pos);
    }
    WiFiClient client = server.available();
      if (client) {
        String currentLine = "";            
        while (client.connected()) {        
          if (client.available()) {
            char c = client.read();          
            Serial.write(c);                
            header += c;
            if (c == '\n') {                
         
              if (currentLine.length() == 0) {
             
                client.println("HTTP/1.1 200 OK");
                client.println("Content-type:text/html");
                client.println("Connection: close");
                client.println();
           
                // Display the HTML web page
                client.println("<!DOCTYPE html><html>");
                client.println("<html lang='ru-RU'> <head> <meta charset='UTF-8'/> <meta http-equiv=\"refresh\" content=\"1\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1/" ">");
               //client.println( "<meta http-equiv=\"refresh\" content=\"2\">");
         
                client.println("<link rel=\"icon\" href=\"data:,\">");
                // CSS to style the table
                client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial;}");
                client.println("table { border-collapse: collapse; width:35%; margin-left:auto; margin-right:auto; }");
                client.println("th { padding: 12px; background-color: #18adc4; color: white; }");
                client.println("tr { border: 1px solid #ddd; padding: 12px; }");
                client.println("tr:hover { background-color: #bcbcbc; }");
                client.println("td { border: none; padding: 12px; }");
                client.println(".sensor { color:white; font-weight: bold; background-color: #a9b0ae; padding: 1px; }");
             
                // Web Page Heading
                client.println("</style></head><body><h1>Метеостанция</h1>");
                client.println("<table><tr><th>Измерения</th><th>Значения</th></tr>");
                client.println("<tr><td>Температура *C</td><td><span class=\"sensor\">");
                client.println(bme.readTemperature());
                client.println(" *C</span></td></tr>");
                client.println("<tr><td>Температура *F</td><td><span class=\"sensor\">");
                client.println(1.8 * bme.readTemperature() + 32);
                client.println(" *F</span></td></tr>");    
                client.println("<tr><td>Давление</td><td><span class=\"sensor\">");
                client.println(bme.readAltitude(SEALEVELPRESSURE_HPA));
                client.println(" m</span></td></tr>");
                client.println("<tr><td>Влажность</td><td><span class=\"sensor\">");
                client.println(bme.readHumidity());
                client.println(" %</span></td></tr>");
                client.println("</body></html>");    
                client.println();
         
               // Break out of the while loop
                break;
                delay(100);
           
               
              } else { //
                currentLine = "";
              }
            } else if (c != '\r') {
              currentLine += c;  
            }
          }
        }

        header = "";
        loop();
        client.stop();
        Serial.println("");
      }
      delay(100);
      Display();
      delay(100);
    }

    void serv(){
            if ( bme.readTemperature() >32 || bme.readHumidity() > 80)
    {
      Display();
      delay(100);
      myservo.write(180);
      delay(100);
    }else {
      Display();
      delay(100);
      myservo.write(pos);
    }
     
    }
    void Display(){
      display.clearDisplay();
      display.setTextSize(0.5);
      display.setCursor(0,0);
      display.print("Temp: ");
      display.setTextSize(1);
      display.setCursor(0,10);
      display.print(String(bme.readTemperature()));
      display.print(" ");
      display.setTextSize(0.5);
      display.cp437(true);
      display.write(167);
      display.setTextSize(1);
      display.print("C");
      display.setTextSize(0.5);
      display.setCursor(64, 0);
      display.print("Hum: ");
      display.setTextSize(1);
      display.setCursor(64, 10);
      display.print(String(bme.readHumidity()));
      display.print(" %");
      display.setTextSize(0.5);
      display.setCursor(0,25);
      display.print("IP");
      display.setTextSize(1);
      display.setCursor(15,25);
      display.print(WiFi.localIP());
      display.display();
      delay(1000);
    }
     
    Последнее редактирование: 14 июн 2021
  12. WhatLogin

    WhatLogin Нерд

    а не нифига не работает, когда на веб страницу захожу все ломается.
    Изменил. Теперь работает, удивительно. В блок схеме не уверен только
     
    Последнее редактирование: 14 июн 2021
  13. WhatLogin

    WhatLogin Нерд

    Есть мудрецы подсказать ?
     
  14. b707

    b707 Гуру

    что подсказать-то опять?
    У вас то "работает". то "не работает". мы даже не знаем, к чему вообще это "не работает" относится...
    Экстрасенсы все с ковидом лежат. в строю никого не осталось
     
  15. WhatLogin

    WhatLogin Нерд

    жалко, я про блок схему
     
  16. parovoZZ

    parovoZZ Гуру

    а зачем два одинаковых блока друг за другом? В программе также реализовано?
     
  17. WhatLogin

    WhatLogin Нерд

    Изначально я так и написал, чтобы он после подключения тоже проверял параметры, но он и без этого работает, что я сам понять не могу. Вроде как после подключения на страницу больше ничего проверять и не должен, но видимо из за этой строчки html "<meta http-equiv=\"refresh\" content=\"5\">" Он обновляет страницу и команда в loop проходит заново, что по сути не правильно, но работает. Либо я чего то не понимаю.