При включении библиотеки HX711 жутко тормозит экна подскажите что исправить
- Войдите на сайт для отправки комментариев
Втр, 26/07/2016 - 11:28
// инициализируем библиотеку 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 строку вывод на экран работает отлично.
А кто вас так научил работыть с U8Glib? Ведь сказано же в документации - внутри цикла отрисовки - НИКАКИХ долгоиграющих операций, вы бы ещё покурить ардуину отправили минут на пять.
Переписывайте цикл отрисовки, учитывая документацию к библиотеке.
#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() ); }Спасибо. Вынес все наружу. помогло.
Подскажите как округлить значение. хочу написать чтото типа
v=Округлить((v1+v2)/2,2)/округлить это с точностью до 2 знаков.
Подскажите как округлить значение. хочу написать чтото типа
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