Страница 1 из 2

LCD и HX711

Добавлено: 24 июл 2018, 18:43
Skaynet
Всем доброго времени суток прошу помощи ни как не могу соединить 2 вещи LCD 2x16 и модуль HX711
Нужно из этого кода вывести значения на экран по I2C

Код: Выделить всё

#include "HX711.h"

HX711 scale(A1, A0);                          

float calibration_factor = -3.7;          // калибровка!
float units;
float ounces;

void setup() {
  Serial.begin(9600); 
  scale.set_scale();
  scale.tare();                              //Сбрасываем на 0
  scale.set_scale(calibration_factor);       //Применяем калибровку
}

void loop() { 

  Serial.print("Reading: ");
  
  for(int i = 0;i < 10; i ++) units =+ scale.get_units(), 10;   // усредняем показания считав 10 раз 
  units / 10;                                                   // делим на 10
   
  ounces = units * 0.035274;                                    // переводим унции в граммы              
  Serial.print(ounces);                                          // отправляем в монитор порта
  Serial.print(" grams");  
  Serial.println();

 
} 
Отправлено спустя 1 час 1 минуту 23 секунды:
Получилось у меня теперь стал вопрос как с этого сделать блок ????

Код: Выделить всё

#include "HX711.h"                                // библиотека тензодатчика
 #include <Wire.h>                                 // Библиотека порта
 #include <LiquidCrystal_I2C.h>                    // Библиотека дисплея
 HX711 scale(A1, A0);                              // Выводы для подключения тензодатчика
 LiquidCrystal_I2C lcd(0x27, 16, 2);                 // Устанавливаем дисплей
 float myScale;                                    // Переменая для хранения значения веса
 
 void setup() {
 scale.set_scale(+121);                          // Калибровочная константа
 scale.tare();                                     // Сбрасываем на 0
 myScale = round(scale.get_units(3));              // Запоминаем среднее значение без груза, но с учетом тары 
 Serial.begin(115200);                             // инициализация порта
 lcd.init();                                       // инициализация ЖК дисплея                   
 lcd.backlight();                                  // Включаем подсветку дисплея
}

void loop() {
 
myScale = scale.get_units(10);                     // Запоминаем текущий вес  

Serial.println(myScale);

char myStr[6]; 
dtostrf(myScale, 5, 0, myStr);                    // Подготовка 5 знакомест
lcd.setCursor(4, 1);                              // Переводим курсор
lcd.print(myStr);                                 // выводим значение веса


} 

LCD и HX711

Добавлено: 24 июл 2018, 19:37
Sancho
[ref]Skaynet[/ref], Типа так.

LCD и HX711

Добавлено: 24 июл 2018, 19:53
Skaynet
[ref=#ff8000]Sancho[/ref], да то что нужно но как убрать точку и цифры после точки ???

LCD и HX711

Добавлено: 24 июл 2018, 19:55
Sancho
Skaynet писал(а): 24 июл 2018, 19:53как убрать точку и цифры после точки ???
Вам нужно грубее - оправьте вначале в переменную типа инт....

LCD и HX711

Добавлено: 24 июл 2018, 19:58
Skaynet
[ref=#ff8000]Sancho[/ref], Спасибо большое за помощь я новичек и не знаю как это сделать (оправьте вначале в переменную типа инт)

LCD и HX711

Добавлено: 24 июл 2018, 19:59
Sancho
[ref]Skaynet[/ref], Создаёшь переменную типа инт. В неё из блока. Её на дисплей.
Возможно, так.

LCD и HX711

Добавлено: 24 июл 2018, 20:10
Skaynet
[ref=#ff8000]Sancho[/ref], Спасибо все получилось

LCD и HX711

Добавлено: 24 июл 2018, 20:24
Alias
А так можно - напрямую float из блока в переменную int? Автор в своих примерах прогоняет через блок преобразования float-integer. Но что-то мне подсказывает, что можно напрямую даже в byte отправить, например, ту же температуру с датчика ds18.
ЗЫ Кажется, Дежа Вю - я это уже спрашивал :smile390:

LCD и HX711

Добавлено: 24 июл 2018, 21:17
Skaynet
возник еще вопросик как сделать сброс тара ????

LCD и HX711

Добавлено: 24 июл 2018, 21:36
Sancho
Skaynet писал(а): 24 июл 2018, 21:17возник еще вопросик как сделать сброс тара ????
Добавить вход! С фукнкцией из setup

Отправлено спустя 9 минут :
Типа так

LCD и HX711

Добавлено: 24 июл 2018, 23:12
Skaynet
и на последок пожалуйста выход на вкл \выкл как сделать

LCD и HX711

Добавлено: 25 июл 2018, 09:59
Sancho
Skaynet писал(а): 24 июл 2018, 23:12и на последок пожалуйста выход на вкл \выкл как сделать
Блок от тензодатчика, с обвязкой, оставь на одной плате, №хх..
Дисплей перенеси на другую, создай дискретную переменную. вход от кнопки через ТТ триггер подай на её.
Ей управляй платой хх, "выполнять по условию", также перед входом данных на дисплей поставь переключатель: или переменная, или пробел.
Покажи что получилось, подкорректирую, если чего.

Можешь поставить тумблер по питанию :smile171:

LCD и HX711

Добавлено: 25 июл 2018, 10:36
Skaynet
[ref=#ff8000]Sancho[/ref], проблема в этой строчи кода

Код: Выделить всё

for(int i = 0;i < 10; i ++) units =+ scale.get_units(), 10;   // усредняем показания считав 10 раз
если ставить 10 то не работают кнопки на цифровых выходах если поставить 1 то все ок но скачет 2 грамма туду сюда

Отправлено спустя 41 секунду:
вот я и хочу отключать весы когда не нужно

LCD и HX711

Добавлено: 25 июл 2018, 11:01
Sancho
[ref]Skaynet[/ref],
По совету выше пробовали?

LCD и HX711

Добавлено: 25 июл 2018, 11:34
Skaynet
[ref=#ff8000]Sancho[/ref], пробовал все равно если 10 то кнопки не работают при чем не важно подключен тензодатчик или нет но если поставить 1 то все работает но показание не стабильны

Отправлено спустя 30 минут 2 секунды:
Этот блок работает но вес показывает не правильно как бы я его не калибровал

LCD и HX711

Добавлено: 25 июл 2018, 12:41
Sancho
[ref]Skaynet[/ref],
Так пробовал?
Сколько времени идёт измерение?
Или так. 3_1

LCD и HX711

Добавлено: 25 июл 2018, 12:46
Skaynet
Нашел другой код все параметры хранятся в библиотеке ..... как с него сделать блок

Код: Выделить всё

#include"HX711.h"
int Weight = 0;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
 void setup() {
        Serial.begin(9600);
lcd.init();                      // initialize the lcd 
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(3,0);
 
  lcd.print("SINONING Scale!");
   Init_Hx711();
    Get_Maopi();   //clear the weight 
        delay(3000);                
}
void loop() {
lcd.clear();
  Weight = Get_Weight();        
        lcd.print("Weight = ");
        lcd.print(Weight);        //the true weight
        lcd.print(" g");        
                 
        delay(1000);        
}

LCD и HX711

Добавлено: 25 июл 2018, 13:00
Sancho
[ref]Skaynet[/ref],
Ты примеры попробовал?
Посмотри код - там есть
delay(1000);
это значит, что программа стоит 1000мс, ничего не делая. Вообще.

LCD и HX711

Добавлено: 25 июл 2018, 13:15
Skaynet
[ref=#ff8000]Sancho[/ref], Ошибка компиляции

Отправлено спустя 10 минут 56 секунд:
пожалуйста сделайте блок из выше указаного кода попробую еще это

LCD и HX711

Добавлено: 25 июл 2018, 14:48
Ingwar
Skaynet писал(а): 25 июл 2018, 11:34Этот блок работает но вес показывает не правильно как бы я его не калибровал
Может не в тему, но опишу как когда то делал на прикрепленном примере.
1 После первого включения на пустых весах, значения из порта подставляем на вход "Zero". Прошиваем заного.
2 Затем ставим эталонный вес и значения из порта поделив на 1000 вписываю в делитель. Прошиваем снова.
На выходе получаем вес в граммах.

З. Ы. Значение для делителя можно получить из описания калибровки https://mysku.ru/blog/aliexpress/59749.html
Эталонный прописанный вес ставить после команды "GO" в порту и ждать 10 сек. Не забудьте подкорректировать скорость порта.
[spoiler]
тест_весы.flp
[/spoiler]