Как ускорить ардуину при питании 3.3 вольта напрямую к ноге ардуины ???
- Войдите на сайт для отправки комментариев
Втр, 20/03/2018 - 07:57
В общем есть скетчь весов но работает он с задержкой в 5 - 10 секунд а ето очень долго
#include <HX711.h>
HX711 scale(A0, A1); // Указываем в какие пины подключен АЦП hx711 (DT(DOUT) - pin A1, SCK - pin A0)
int latchPin = 8; //Пин 8 пиодключен к ST_CP вход 74HC595
int clockPin = 12; //Пин 12 подключен к SH_CP входу 74HC595
int dataPin = 11; //Пин 2 подключен к DS входу 74HC595
int ves = 0;
int button = 4;
float myScale; // Инициализируем переменную в которой будем хранить текущий вес
//Задаем индекс
int a; //Переменные регистров
int b;
int c;
int d;
int i;
void setup() {
// Выводим надпись
scale.set_scale(2850); // Устанавливаем калибровочный коэффициент
scale.tare(); // Сбрасываем весы на 0
myScale = round(scale.get_units(10)); // Запоминаем среднее значение без груза, но с учетом тары
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT); // Обнуляем значение веса на мониторе порта
pinMode(button, INPUT_PULLUP);
}
//Это закодированные цифры в 8 битах, которые пришлось подбирать методом перебора
byte cifra[]={0b00000101, 0b11001111, 0b00100110, 0b10000110, 0b11001100,
0b10010100, 0b00010100, 0b11000111, 0b00000100, 0b10000100, 0b11111111,
0b01110100, 0b00001101, 0b00111101};
//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(50);
int i = (int)(myScale + 0.5);
if (i < 0) {i = -i;}
int a = (i/1000);//округляем до тысячь
//if (a < 0) {a * a;}
int b = (i%1000)/100;//округляем до сотен
//if (b < 0) {b * b;}
int c = (i%100)/10;//округляем до десятков
//if (c < 0) {c * c;}
int d = (i%10);//округляем до едениц
//if (d < 0) {d * c;}
if ((digitalRead(4)) == 0)
{
scale.tare();
}
if (i > 1000)
{
a = 11;
b = 12;
c = 13;
d = 13;
}
digitalWrite(latchPin, HIGH); // открываем на "защелку" 74HC595
shiftOut(dataPin, clockPin, MSBFIRST, cifra[d]); // передаем байт в 74HC595---0
shiftOut(dataPin, clockPin, MSBFIRST, cifra[c]); // передаем байт в 74HC595---1
shiftOut(dataPin, clockPin, MSBFIRST, cifra[b]); // передаем байт в 74HC595---2
shiftOut(dataPin, clockPin, MSBFIRST, cifra[a]); // передаем байт в 74HC595---потушен
shiftOut(dataPin, clockPin, MSBFIRST, cifra[10]); /// ---4
digitalWrite(latchPin, LOW);
}
Измерение веса - процедура длительная.
Значит, не следует ее делать лишний раз. А у Вас в строках 44 и 45 она повторяется. Измерьте один раз и результат измерения используйте как в строке 44, так и в строке 45, длительность цикла уменьшится втрое.
Если этого недостаточно, остается только увеличивать скорость измерения за счет снижения точности, т.е. уменьшении количества итераций на одно измерение.
alexey3 - Во-первых, как уже сказал andriano, у вас в скетче куча лишних действий. Например, после scale.tare();в строке 23 нет смысла считывать вес в строке 24 - он должен быть равен нулю, если весы оттарировались.
Во-вторых, вот вы дважды считываете вес - в строках 44 и 45. Вы в курсе, что означает цифра 20 в параметрах scale.get_units(20); ? - это вы делаете измерение ДВАДЦАТЬ раз! - оно вам надо? Каждое измерение занимает около 100мс - так что в одной этой строке вы теряете 2 секунды.
Кроме того, хочу отметить, что библиотека HX711 - довольно глючная (см ссылку глюки hx711h) и явно не для real-time скетчей. Взвешивание занимает приличное время- и что еще хуже - этот процесс блокирующий, то есть ваш скетч в эти моменты ничего другого делать не может. Если для вас это критично - советую отказаться от библиотеки и работать с весами напрямую. Мне для моего проекта пришлось писать свою версию либы HX711
А не могли бы вы поделится собственной библиотекой или обьяснить что и как исправить, 20 заменил на 1 как вы сказали ускорилось. Но очень хочется ещё ускорить