При включении библиотеки HX711 жутко тормозит экна подскажите что исправить

uno
Offline
Зарегистрирован: 16.06.2016
// инициализируем библиотеку LCD
//LiquidCrystal lcd(12, 13, 11, 10, 9, 8);
#include "U8glib.h"
U8GLIB_ST7920_128X64 u8g(37, 35, 39, U8G_PIN_NONE); // настройка пинов

#include "HX711.h"
HX711 scale(43, 41, 64);    // "усиление" - опущено; значение по умолчанию 128 используется библиотека
//HX711 scale(41, 43, 128);    // "усиление" - опущено; значение по умолчанию 128 используется библиотека

String s1="00.00";
String s2="00.00";
String s3=" 000 ";
int p = 33; //объявляем переменную с номером пина, на который мы выводим звук
int v = 0;
void setup(){
  // устанавливаем параметры дисплея: 
 // u8g.setFont(u8g_font_gdb20);
   scale.set_scale(2280.f);   // this value is obtained by calibrating the scale with known weights; see the README for details
   Serial.begin(9600); //9585здесь не забываем указать скорость вашего порта роутера
 // Serial.setTimeout (1000);
  pinMode(p, OUTPUT); //объявляем пин как выход
}
 
void loop()
{
  char s;  
  String str;
  u8g.firstPage();
  u8g.setFont(u8g_font_gdb17);
  u8g.setRot90();
 // u8g.setRGB(100,200,200);
 // u8g.drawStr( 66, 0, "Color Page");
  do 
   {
 
  if (Serial.available()) 
  {
//    delay(100);
    while (Serial.available() > 0) 
    {
      s=Serial.read();
       if (s=='^') {
        switch (Serial.read()) {
          case '1':
            s1=""; str="1";
            Serial.read();
            break;
          case '2':
            s2=""; str="2";
            Serial.read();
            break;
          case '3':
            s3="";  str="3";
            Serial.read();
            break;
          case '4':
            tone (p, 500,1000);//включаем на 500 Гц
    //          s3="";  str="3";
            Serial.read();
            break;
          case '5':
            tone (p,800,300);//включаем на 1000 Гц
    //          s3="";  str="3";
            Serial.read();
            break;
          case '6':
            tone (p, 1500,1000);//включаем на 1500 Гц
    //          s3="";  str="3";
            Serial.read();
            break;
        } //switch
      }
      else {
          if (str=="1") {
            s1=s1+s;
              }
          else {
            if (str=="2") {
              s2=s2+s;
              }
            else {
            if (str=="3") {
              s3=s3+s;
              }
            }
          }
     
      }
    }
  }
     u8g.setPrintPos(0, 20);
     u8g.print(" BEC ");
     u8g.setPrintPos(0, 45);
     u8g.print(s1);
//     u8g.println(-(scale.get_units(10)+3.707)/10.024, 3);
     if (v=100) {
      Serial.println(scale.get_units(10), 3);
      v=0;
     }
      v=v+1;
     u8g.setPrintPos(0, 70);
     u8g.print(s2);
     u8g.setPrintPos(0, 100);
     u8g.print(" KOP ");
     u8g.setPrintPos(0, 125);
     u8g.print(s3);
  }
        while( u8g.nextPage() );
}

Если Заремить 97 строку вывод на экран работает отлично.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А кто вас так научил работыть с U8Glib? Ведь сказано же в документации - внутри цикла отрисовки - НИКАКИХ долгоиграющих операций, вы бы ещё покурить ардуину отправили минут на пять.

Переписывайте цикл отрисовки, учитывая документацию к библиотеке.

uno
Offline
Зарегистрирован: 16.06.2016
#include "U8glib.h"
U8GLIB_ST7920_128X64 u8g(37, 35, 39, U8G_PIN_NONE); // настройка пинов

#include "HX711.h"
HX711 scale(43, 41, 64);    // "усиление" - опущено; значение по умолчанию 128 используется библиотека
//HX711 scale(41, 43, 128);    // "усиление" - опущено; значение по умолчанию 128 используется библиотека

String s1="00.00";
String s2="00.00";
String s3=" 000 ";
int p = 33; //объявляем переменную с номером пина, на который мы выводим звук
int v = 0;
void setup(){
  // устанавливаем параметры дисплея: 
 // u8g.setFont(u8g_font_gdb20);
   scale.set_scale(2280.f);   // this value is obtained by calibrating the scale with known weights; see the README for details
   Serial.begin(9600); //9585здесь не забываем указать скорость вашего порта роутера
   u8g.setFont(u8g_font_gdb17);
   u8g.setRot90();
 // Serial.setTimeout (1000);
  pinMode(p, OUTPUT); //объявляем пин как выход
}
 
void loop()
{
  char s;  
  String str;
 // u8g.setRGB(100,200,200);
 // u8g.drawStr( 66, 0, "Color Page");
      //Serial.println(scale.read_average(10), 3);       
  Serial.println(scale.get_units(10), 3);
  if (Serial.available()) 
  {
//    delay(100);
    while (Serial.available() > 0) 
    {
      s=Serial.read();
       if (s=='^') {
        switch (Serial.read()) {
          case '1':
            s1=""; str="1";Serial.read(); break;
          case '2':
            s2=""; str="2";Serial.read();break;
          case '3':
            s3="";  str="3";Serial.read();break;
          case '4':
            tone (p, 500,1000);//включаем на 500 Гц
            Serial.read();break;
          case '5':
            tone (p,800,300);//включаем на 1000 Гц
            Serial.read();
            break;
          case '6':
            tone (p, 1500,1000);//включаем на 1500 Гц
            Serial.read(); break;
        } //switch
      }
      else {
          if (str=="1") { s1=s1+s; }
          else {
            if (str=="2") { s2=s2+s; }
            else {
            if (str=="3") { s3=s3+s; }
            }
          }
       }
    }
  }
  
  u8g.firstPage();
  do 
   {
     u8g.setPrintPos(0, 20);
     u8g.print(" BEC ");
     u8g.setPrintPos(0, 45);
     u8g.print(s1);
//     u8g.println(-(scale.get_units(10)+3.707)/10.024, 3);
     u8g.setPrintPos(0, 70);
     u8g.print(s2);
     u8g.setPrintPos(0, 100);
     u8g.print(" KOP ");
     u8g.setPrintPos(0, 125);
     u8g.print(s3);
  }
  while( u8g.nextPage() );
}

Спасибо. Вынес все наружу. помогло.

uno
Offline
Зарегистрирован: 16.06.2016

Подскажите как округлить значение. хочу написать чтото типа

v=Округлить((v1+v2)/2,2)/округлить это с точностью до 2 знаков.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

uno пишет:

Подскажите как округлить значение. хочу написать чтото типа

v=Округлить((v1+v2)/2,2)/округлить это с точностью до 2 знаков.

Вот тут, говорят, очень много по этому поводу есть: https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#newwindow=1&q=%D0%BA%D0%B0%D0%BA+%D0%BE%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B8%D1%82%D1%8C+%D1%87%D0%B8%D1%81%D0%BB%D0%BE+%D0%B4%D0%BE+%D1%81%D0%BE%D1%82%D1%8B%D1%85+c%2B%2B