Помогите разобраться с переменными
- Войдите на сайт для отправки комментариев
Вс, 29/05/2016 - 17:26
здравствуйте! пишу код для датчиков расхода воды. Количество импульсов за секунду определил. Но мне нужен конечный результат в литрах/час. Нашел подобный код, но не могу разобраться что находиться внутри переменных currentTime и cloopTime. Помогите, пожалуйста, разобраться как работает даный код.
/* YF‐ S201 Water Flow Sensor Water Flow Sensor output processed to read in litres/hour Adaptation Courtesy: www.hobbytronics.co.uk */ volatile int flow_frequency; // Measures flow sensor pulses unsigned int l_hour; // Calculated litres/hour unsigned char flowsensor = 2; // Sensor Input unsigned long currentTime; unsigned long cloopTime; void flow () // Interrupt function { flow_frequency++; } void setup() { pinMode(flowsensor, INPUT); digitalWrite(flowsensor, HIGH); // Optional Internal Pull-Up Serial.begin(9600); attachInterrupt(0, flow, RISING); // Setup Interrupt sei(); // Enable interrupts currentTime = millis(); cloopTime = currentTime; } void loop () { currentTime = millis(); // Every second, calculate and print litres/hour if(currentTime >= (cloopTime + 1000)) { cloopTime = currentTime; // Updates cloopTime // Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min. l_hour = (flow_frequency * 60 / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour flow_frequency = 0; // Reset Counter Serial.print(l_hour, DEC); // Print litres/hour Serial.println(" L/hour"); } }
Спасибо, что не ответили) Это заставило меня сесть и разобраться с функцией millis() :) Но теперь есть другая проблемка. в программе есть переменная, в которую записывается количество импульсов за секунду, и эта переменная обнуляется каждую секунду. в мониторе порта все нормально - если импульсов нет, то печатает ноль. а вот с дисплеем все не так. после того как датчик расхода воды перестает работать на дисплее значение количества импульсов в секунду не обнуляется. Оно падает, но не до нуля. Я уже голову сломал, но так и не понял в чем проблема.
Одно время, помню в разных библиотеках была проблема с очисткой полей на лсд, скажем если 3-х значное число, и печатать одну цифру, то слева может оставаться какая-нить лабуда в 2-х разрядах, т.е. нужно принудительно печатать в позицию соток и десяток нули. Или пробел, чтоб затереть.
вот и у меня лабуда остается. я пробовал нули печатать принудительно, но получается не лучше. почему-то все при запуске нормально, а при выводе все начинает сьезжать непонятно куда...дак и пробел как печатать то, если переменная изменяется раз в секунду. выходит, что нужно написать условие для переменной (когда ноль, то печатать нули в нужной пизиции), так?
Одно время, помню в разных библиотеках была проблема с очисткой полей на лсд, скажем если 3-х значное число, и печатать одну цифру, то слева может оставаться какая-нить лабуда в 2-х разрядах, т.е. нужно принудительно печатать в позицию соток и десяток нули. Или пробел, чтоб затереть.
я все-таки принудительно напечатал нули, все работает. но это не очень удобный метод. неплохо было бы узнать почему так происходит, и исправлять проблему еще до ее возникновения :D
Можно без условия, сначала пишем 3-ри пробела, а потом цифры, поверх. Всякие буквы лучше перенести в сетап(), а то чё время терять - каждый раз печатать
Можно без условия, сначала пишем 3-ри пробела, а потом цифры, поверх. Всякие буквы лучше перенести в сетап(), а то чё время терять - каждый раз печатать
с буквами понял, все перенес. а с цифрами не очень...это вот так? тогда все куда-то "едет") мне же нули или пробелы нужно печатать только когда переменные равняются нулю... причем на место циферок...
вот так с условием работает, но каждый раз проверять не вариант...
Спасибо большое) все работает)