Весы на ардуино HX 711

Fond1
Offline
Зарегистрирован: 08.02.2022

Здравствуйте. Вижу по поиску, что данная тема не первая, но всё же прошу помощи. 

Собрал код. Всё откалибровал и в мониторе порта отображается верное значение груза.

А вот вывести на дисплей (TM 1637) совсем никак не получается.  Перепробовал почти все библиотеки, где в названии есть TM 1637. И либо отображается только до 100 грамм( если выше 100г. видны только десятки) либо ничего не выводится.

По коду ниже раз в секунду выводятся случайные числа. 

Плата Ардуино Uno. Тензодатчик до 20кг. Версия IDE 1.8.19

Заранее спасибо. 

#include "HX711.h"                                            // подключаем библиотеку для работы с тензодатчиком
#include <TM1637.h>

#define DT  6                                                // Указываем номер вывода, к которому подключен вывод DT  датчика
#define SCK 7                                                // Указываем номер вывода, к которому подключен вывод SCK датчика

HX711 scale;                                                 // создаём объект scale
TM1637 tm(3, 2); 

float calibration_factor = 3.74/0.035274;                    // вводим калибровочный коэффициент с переводим из унций
float units;                                                 // задаём переменную для измерений в граммах

void setup() {
  Serial.begin(9600);                                        // инициируем работу последовательного порта на скорости 9600 бод
  tm.begin();
  scale.begin(DT, SCK);                                      // инициируем работу с датчиком
  scale.set_scale();                                         // выполняем измерение значения без калибровочного коэффициента
  scale.tare();                                              // сбрасываем значения веса на датчике в 0
  scale.set_scale(calibration_factor);                       // устанавливаем калибровочный коэффициент
}

void loop() {
  Serial.print("Reading: ");                                  // выводим текст в монитор последовательного порта
    units = scale.get_units(10);                              // считываем среднее значение 10 замеров
  tm.display(units);                                         //вывод на дисплей
  Serial.print(units);                                       // выводим в монитор последовательного порта вес в граммах
  Serial.println(" grams");                                  // выводим текст в монитор последовательного порта
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

попробуй библиотеку от DetSimen у него выравнивание по правому краю и флоат понимает

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Fond1 пишет:

А вот вывести на дисплей (TM 1637) совсем никак не получается.  Перепробовал почти все библиотеки, где в названии есть TM 1637. И либо отображается только до 100 грамм( если выше 100г. видны только десятки) либо ничего не выводится.

Нет, ну меня это умиляет: тема называется "Весы на ардуино HX 711", а вопрос - исключительно по дисплею TM 1637.

У Вас никогда ничего не получится, если Вы не научитесь выделять главное и правильно формулировать свои мысли.

Если проблемы с дисплеем, так выкиньте из кода все, относящееся к весам, и налаживайте только дисплей. А когда дисплей будет всегда выводить именно то, что Вам нужно, только тогда подключайте к нему обратно весы. 

Кстати, у любой библиотеки TM1637 есть набор примеров. Они работают?

 

Fond1
Offline
Зарегистрирован: 08.02.2022

ua6em пишет:

попробуй библиотеку от DetSimen у него выравнивание по правому краю и флоат понимает

Библиотеку установил, количество функцией много, выделить нужную мне не получается.

Можете подсказать на примере моего когда ? 

Fond1
Offline
Зарегистрирован: 08.02.2022

andriano пишет:

Fond1 пишет:

А вот вывести на дисплей (TM 1637) совсем никак не получается.  Перепробовал почти все библиотеки, где в названии есть TM 1637. И либо отображается только до 100 грамм( если выше 100г. видны только десятки) либо ничего не выводится.

Нет, ну меня это умиляет: тема называется "Весы на ардуино HX 711", а вопрос - исключительно по дисплею TM 1637.

У Вас никогда ничего не получится, если Вы не научитесь выделять главное и правильно формулировать свои мысли.

Если проблемы с дисплеем, так выкиньте из кода все, относящееся к весам, и налаживайте только дисплей. А когда дисплей будет всегда выводить именно то, что Вам нужно, только тогда подключайте к нему обратно весы. 

Кстати, у любой библиотеки TM1637 есть набор примеров. Они работают?

 

Согласен, название темы отобразил не корректно. Извиняюсь.

Да, примеры из библиотек, без весов, работают абсолютно нормально. 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Fond1 пишет:

Да, примеры из библиотек, без весов, работают абсолютно нормально. 

А в этих примерах используется функция display() или showNumberDec()?

Fond1
Offline
Зарегистрирован: 08.02.2022

andriano пишет:

Fond1 пишет:

Да, примеры из библиотек, без весов, работают абсолютно нормально. 

А в этих примерах используется функция display() или showNumberDec()?

Чаще display, иногда print.  Этой  showNumberDec()не встречал ни разу 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну в той библиотеке, которой я пользуюсь, числа выводятся именно showNumberDec().

Еще раз поясните, правильно ли я понял: при использовании одной и той же функции библиотеки (например? display)?

- в примерах к библиотеке удается вывести число больше 100,

- в Вашей программе числа больше 100 вывести не удается.

Ну и еще: правда ли, что в библиотеке в примерах используются именно числа float?

Fond1
Offline
Зарегистрирован: 08.02.2022

andriano пишет:

Ну в той библиотеке, которой я пользуюсь, числа выводятся именно showNumberDec().

Еще раз поясните, правильно ли я понял: при использовании одной и той же функции библиотеки (например? display)?

- в примерах к библиотеке удается вывести число больше 100,

- в Вашей программе числа больше 100 вывести не удается.

Ну и еще: правда ли, что в библиотеке в примерах используются именно числа float?

Основу кода для работы датчика брал отсюда (https://wiki.iarduino.ru/page/hx_711_with_tenzo/)

В видео и на странице они почему-то разные. Брал из видео.

Именно в этом варианте получается выводить значения до 100 грамм.

Дальше, если груз будет например 120 грамм, то на дисплее отображется только цифра 20. 

 

- в примерах к библиотеке удается вывести число больше 100 - да.

- в Вашей программе числа больше 100 вывести не удается. - да.

Я не никак не привязан именно к этому коду. Просто ищу тот который заработает. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Еще раз: в примерах к библиотеке дисплея используются числа float?

b707
Offline
Зарегистрирован: 26.05.2017

Fond1 пишет:

- в примерах к библиотеке удается вывести число больше 100 - да.

- в Вашей программе числа больше 100 вывести не удается. - да.


ну осталось только сравнить примеры с вашим кодом и понять в чем разница

Fond1
Offline
Зарегистрирован: 08.02.2022

andriano пишет:

Еще раз: в примерах к библиотеке дисплея используются числа float?

Я не вижу применения float/ 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну вот и обнаружилась разница между кодом примера и Вашим кодом.

1. Посмотрите заголовочный файл библиотеки - есть ли там функции работы с float.

2. Замените при обращении к библиотечной функции float на int.

Fond1
Offline
Зарегистрирован: 08.02.2022

andriano пишет:

Ну вот и обнаружилась разница между кодом примера и Вашим кодом.

1. Посмотрите заголовочный файл библиотеки - есть ли там функции работы с float.

2. Замените при обращении к библиотечной функции float на int.

Понял, буду пробовать спасибо. 

Fond1
Offline
Зарегистрирован: 08.02.2022

andriano пишет:

Ну вот и обнаружилась разница между кодом примера и Вашим кодом.

1. Посмотрите заголовочный файл библиотеки - есть ли там функции работы с float.

2. Замените при обращении к библиотечной функции float на int.

Сработало.  Спасибо вам большое! 

Теперь понял, о чем говорил человек выше, выравнивание числе вправо.