Go Down

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

#### bassman_dolitsky

##### May 21, 2013, 09:05 pm
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

#1
##### May 21, 2013, 09:11 pm
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

#2
##### May 21, 2013, 09:15 pm
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

#3
##### May 21, 2013, 09:16 pm
Quote
If the pin is high, start a timer

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

#4
##### May 21, 2013, 09:18 pm
Use pulseIn(). Measure the high time, measure the low time, add together, there's your period.
Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

#### HazardsMind

#5
##### May 21, 2013, 09:19 pm
@PaulS
Yes, record the time.