Go Down

Topic: Help with my engineering project (Read 465 times) previous topic - next topic

bassman_dolitsky

For my engineering project, my group and I are usiwng Arduino to calculate the frequency of a square wave and lighting certain LEDs depending on the value of the frequency. We are having trouble with the millis() function. We have the code so that when the Arduino detects a value of 1 on digitalpin2, millis() begins. When the Arduino detects a value of 0 on digitalpin2, we want it to divide 1/(difference in time) to calculate the frequency. We want this loop to be continuous and have the millis counter reset after after calculation. can anyone help us please?

Thank you,
Marc

PaulS

Quote
We have the code so that when the Arduino detects a value of 1 on digitalpin2, millis() begins.

Which you didn't post, but is impossible. The value returned by millis() starts when the Arduino resets, and is not (supposed to be) ever reset.

Quote
When the Arduino detects a value of 0 on digitalpin2, we want it to divide 1/(difference in time) to calculate the frequency.

So, what is the problem?

Quote
We want this loop to be continuous and have the millis counter reset after after calculation. can anyone help us please?

What does "continuous" mean? You are either waiting for a change in the square wave or you are doing something while periodically looking for a change (possibly interrupt based). Which is it?

You shouldn't, and don't need to, reset millis(). You don't reset your watch 15 times a day, do you? Of course not. You learn early on how to use a watch to determine the interval between two events. You should be doing the same with the millis() value.

HazardsMind

Posting what ever code you have so far, is a good start.

Another thing is to be familiar with state changes. If the pin is high, start a timer, when the pin changes state, store the time in a variable. Once you have done that twice, (HIGH and LOW), add them together and you will have your time.

Tip: Learn how to use interupts.
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

PaulS

Quote
If the pin is high, start a timer

You mean "record the time". There is no need to use a timer.

CrossRoads

Use pulseIn(). Measure the high time, measure the low time, add together, there's your period.
Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

HazardsMind

@PaulS
Yes, record the time.

My bad
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

Go Up