Как ускорить ардуину при питании 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 как вы сказали ускорилось. Но очень хочется ещё ускорить