Помогите исправить скетч для весов с выводом на семисегментники с ардуино уно

alexey3
Offline
Зарегистрирован: 25.11.2017

Помогите исправить ума не приложу как он должен цыфры вместо порта копьютера на дисплеи выводил

#include

HX711 scale(A0, A1); // Указываем в какие пины подключен АЦП hx711 (DT(DOUT) - pin A1, SCK - pin A0)
int latchPin = 8; //Пин 3 подключен к ST_CP вход 74HC595
int clockPin = 12; //Пин 4 подключен к SH_CP входу 74HC595
int dataPin = 11; //Пин 2 подключен к DS входу 74HC595
int ves = 0;
float myScale; // Инициализируем переменную в которой будем хранить текущий вес
void setup() {
Serial.begin(9600); // Инициализируем монитор порта, как устройство вывода
Serial.println("Calibration..."); // Выводим надпись

scale.set_scale(2850); // Устанавливаем калибровочный коэффициент
scale.tare(); // Сбрасываем весы на 0
myScale = round(scale.get_units(10)); // Запоминаем среднее значение без груза, но с учетом тары

Serial.println(0.00);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);// Обнуляем значение веса на мониторе порта
}

//Это закодированные цифры в 8 битах, которые пришлось подбирать методом перебора
byte cifra[]={0b00000101, 0b11001111, 0b00100110, 0b10000110, 0b11001100,
0b10010101, 0b00010101, 0b11000111, 0b00000100, 0b10000100, 0b11111111};

//Задаем индекс
int number_cifra=0;

//Устанавливаем пины на вывод данных в 74HC595

void loop()
{

scale.power_up(); // Отключаем энергосберегающий режим hx711
if (round(scale.get_units(10)) != myScale) { // Условие выполняется, если округленный до граммов вес отличается от последнего
myScale = scale.get_units(20); // Запоминаем текущий вес

if (myScale > 0.5) // Если вес не ничтожно мал
Serial.println(myScale); // то выводим его
else // иначе
Serial.println(0.00); // выводим нули

myScale = round(myScale); // Запоминаем округленный текущий вес (для сравнения)
}
scale.power_down(); // Включаем энергосберегающий режим hx711
delay(500);

digitalWrite(latchPin, HIGH); // открываем на "защелку" 74HC595
shiftOut(dataPin, clockPin, MSBFIRST, myScale); // передаем байт в 74HC595---0
shiftOut(dataPin, clockPin, MSBFIRST, myScale); // передаем байт в 74HC595---1
shiftOut(dataPin, clockPin, MSBFIRST, myScale); // передаем байт в 74HC595---2
shiftOut(dataPin, clockPin, MSBFIRST, cifra[1]); // передаем байт в 74HC595---3
shiftOut(dataPin, clockPin, MSBFIRST, cifra[1]); /// ---4
digitalWrite(latchPin, LOW); //закрываем "защелку" 74HC595

delay(1000); // пауза

}

Иван_123
Offline
Зарегистрирован: 17.01.2018
ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018
digitalWrite(latchPin, HIGH); // открываем на "защелку" 74HC595
shiftOut(dataPin, clockPin, MSBFIRST, myScale); // передаем байт в 74HC595---0
shiftOut(dataPin, clockPin, MSBFIRST, myScale); // передаем байт в 74HC595---1
shiftOut(dataPin, clockPin, MSBFIRST, myScale); // передаем байт в 74HC595---2
shiftOut(dataPin, clockPin, MSBFIRST, cifra[1]); // передаем байт в 74HC595---3
shiftOut(dataPin, clockPin, MSBFIRST, cifra[1]); /// ---4
digitalWrite(latchPin, LOW); //закрываем "защелку" 74HC595

вот ваш вывод

вам надо на каждый сигмент передавать байт данных с числом

у вас есть массив сопоставления байт-число в переменной cifra[] - так можно выводить числа сразу

а моэно самоме формировать байт выводи что угодно

чтобы вывести вес - вам надо число разобрать на отдельные знаки и точку и по знаково выводить, ставя точку после нужного числа знаков