что то отваливается, а что не пойму

Тема в разделе "Arduino & Shields", создана пользователем Митька, 6 май 2019.

  1. Митька

    Митька Нерд

    доброго времени суток

    прошу, подсказать, может, кто сталкивался

    пишу данные с температурного датчика в mysql (локально), но проходит время, всегда по разному и данные перестают записываться в БД

    с чем это может быть связано, где посмотреть ?

    заранее спасибо за ваш ответ
     
  2. parovoZZ

    parovoZZ Гуру

    хвост?
     
  3. Митька

    Митька Нерд

    upload_2019-5-6_17-11-13.png
    лог что пишу в БД, вывод в браузер

    дата - время - IP с которого пишем данные - сами данные температуры

    задержка по отсылке данных в скетче стоит 10 сек
     
  4. Asper Daffy

    Asper Daffy Иксперд

    Ну, видимо, в строке №34 память не освобождается, вот и переполняется со временем.
     
    Daniil нравится это.
  5. Митька

    Митька Нерд

    #include <UIPEthernet.h>
    #include <SPI.h>

    #include <math.h>
    #define TERMIST_B 4300
    #define VIN 5.0

    byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C};
    byte ip[] = { 192, 168, 1, 30 };

    //IP адрес сервера который будет собирать статистику
    byte server[] = { 192, 168, 1, 6 };

    EthernetClient client;


    void setup()
    {
    Ethernet.begin(mac, ip);
    //Serial.begin(9600);
    }

    void loop()
    {
    float voltage0 = analogRead(A0) * VIN / 1023.0;
    float voltage1 = analogRead(A1) * VIN / 1023.0;

    float r0 = voltage0 / (VIN - voltage0);
    float r1 = voltage1 / (VIN - voltage1);

    float t1 = 1./( 1./(TERMIST_B)*log(r0)+1./(25. + 273.) ) - 273;
    float t2 = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273;

    String msg = "GET /test.php?t1="+ String(t1) + "&t2="+String(t2);

    // Для отладки включим отправку данных в COM порт
    //Serial.println(msg);
    // Если это не требуется, то можно закомментировать


    client.connect(server, 80);
    client.println(msg);
    //Ждем 2 сек.
    delay (2000);

    //потом отключаемся
    client.stop();

    //Данные будут отправляться каждые 10 сек
    delay (8000);
    }
     
  6. parovoZZ

    parovoZZ Гуру

    Вот это вообще красиво:
    и далее:
    А что не требуется? Что можно закомментировать? А можно не комментировать вообще? Файл меньше места будет занимать. Это не код - это помойка...
     
  7. Митька

    Митька Нерд

    я не профи, а только учусь, исправлюсь

    критику принимаю нормально

    тогда ваш ответ можно расценивать так, что если убрать комментированные строки, то все будет работать ?
     
  8. Митька

    Митька Нерд

    #include <UIPEthernet.h>
    #include <SPI.h>

    #include <math.h>
    #define TERMIST_B 4300
    #define VIN 5.0

    byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C};
    byte ip[] = { 192, 168, 1, 30 };

    byte server[] = { 192, 168, 1, 6 };

    EthernetClient client;


    void setup()
    {
    Ethernet.begin(mac, ip);
    }

    void loop()
    {
    float voltage0 = analogRead(A0) * VIN / 1023.0;
    float voltage1 = analogRead(A1) * VIN / 1023.0;

    float r0 = voltage0 / (VIN - voltage0);
    float r1 = voltage1 / (VIN - voltage1);

    float t1 = 1./( 1./(TERMIST_B)*log(r0)+1./(25. + 273.) ) - 273;
    float t2 = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273;

    String msg = "GET /test.php?t1="+ String(t1) + "&t2="+String(t2);

    client.connect(server, 80);
    client.println(msg);

    client.stop();
    client.flush();

    delay (10000);
    }
     
  9. parovoZZ

    parovoZZ Гуру

    комментарии пишутся для себя в первую очередь. Зачем писать комментарии, которые не отражают суть алгоритма? Зачем писать комментарии, которые отражают очевидные вещи?
     
  10. Митька

    Митька Нерд

    по сути можно ответь на вопрос
     
  11. parovoZZ

    parovoZZ Гуру

    расскажи сперва, что какая строчка кода делает, как это делаю я в своих постах. Потом покумекаем, где ошибка.
     
  12. b707

    b707 Гуру

    нет, так очевидно будет хуже. Вы будете долбить бедный сервер запросами каждый цикл loop() .

    Вообще, главная роблема этого кода - полное отсутсвие проверок на ошибки. Например. что произойдет с этим кодом, если коннект к серверу не удастся?
    Так надежные программы не пишут. Это может сработать десять или сто раз. но в конечном счете эта программа наверняка зависнет - что мы и видим в ващем случае.
     
  13. Airbus

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

    ААААА!!!!!!!!!!Митёк!!!!!!
    [​IMG]
     
    Daniil нравится это.
  14. Daniil

    Daniil Гуру

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

    Митька Нерд

    спасибо всем !!!

    все замечания учту...
     
  16. parovoZZ

    parovoZZ Гуру

    Форматирование кода (вернее, выработка собственного стиля форматирования) - это первое, с чего надо начинать кодерство. Это как эскиз картины, ее основа. Не аккуратно написанный код так же и работать будет.
     
  17. Airbus

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

    Типа так.
    Код (C++):
    #include <UIPEthernet.h>
    #include <SPI.h>

    #include <math.h>
    #define TERMIST_B 4300
    #define VIN 5.0

    byte mac[] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C};
    byte ip[] = { 192, 168, 1, 30 };

    byte server[] = { 192, 168, 1, 6 };

    EthernetClient client;


    void setup()
    {
    Ethernet.begin(mac, ip);
    }

    void loop()
    {
    float voltage0 = analogRead(A0) * VIN / 1023.0;
    float voltage1 = analogRead(A1) * VIN / 1023.0;

    float r0 = voltage0 / (VIN - voltage0);
    float r1 = voltage1 / (VIN - voltage1);

    float t1 = 1./( 1./(TERMIST_B)*log(r0)+1./(25. + 273.) ) - 273;
    float t2 = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273;

    String msg = "GET /test.php?t1="+ String(t1) + "&t2="+String(t2);

    client.connect(server, 80);
    client.println(msg);

    client.stop();
    client.flush();

    delay (10000);
    }
     
    DetSimen нравится это.
  18. parovoZZ

    parovoZZ Гуру

    Табуляции не хватает, чтобы блоки выделялись (очень хорошо помогает при проверке правильности расстановки скобок).
     
  19. fogary

    fogary Гик

    Код (C++):
    ... VIN / 1023.0
    ...
    ... 1./(TERMIST_B) ... 1./(25. + 273.)
    Хорошо бы еще не вычислять каждый раз такие выражения, а подставить заранее посчитанные значения. Т. к. все их операнды - константы.