Buongiorno a tutti.
Sto iniziando ad utilizzare la libreria FreqMeasure ( FreqMeasure Library, for Measuring Frequencies in the 0.1 to 1000 Hz range, or RPM Tachometer Applications) per leggere una frequenza dal D8 di un arduino nano (identico quindi ad arduino uno), ma volevo implementare la possibilità di attivare la funzione di lettura solamente quando necessario, liberando i pin pwm bloccati quando non devo leggere la frequenza.
Nell'esempio della libreria FreqMeasure.begin() viene inserito all'interno di void.setup(), ma così facendo la lettura è continua a prescindere.
Cercando un pò su internet ho visto che inserendolo all'interno di void.loop() è possibile iniziare la lettura a piacimento e terminarla quando serve con FreqMeasure.end()... solo che a me non funziona, non legge mai la frequenza e non scrive mai nulla sull'lcd.
Dove sbaglio?
/* FreqMeasure - Example with serial output
* http://www.pjrc.com/teensy/td_libs_FreqMeasure.html
*
* This example code is in the public domain.
*/
#include <FreqMeasure.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
long sum = 0;
int count = 0;
int freq = 0;
int frequency = 0;
unsigned long previousMillis = 0;
const long interval = 1000;
void setup()
{
// FreqMeasure.begin();
pinMode(2, OUTPUT);
lcd.begin(16,2);
pinMode(13, OUTPUT);
}
void loop()
{
unsigned long currentMillis = millis();
lcd.backlight();
digitalWrite(2, HIGH);
if(currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
FreqMeasure.begin();
if (FreqMeasure.available())
{
digitalWrite(13, HIGH);
sum = sum + FreqMeasure.read();
count = count + 1;
if (count > 100)
{
frequency = FreqMeasure.countToFrequency(sum / count);
freq = map(frequency, 7310, 5895, 0, 99);
sum = 0;
count = 0;
if (freq > 99)
freq = 99;
if (freq < 0)
freq = 0;
lcd.setCursor(0,0);
if (freq < 10)
lcd.print("0");
lcd.print(freq);
lcd.setCursor(0,1);
if (frequency > 9000)
frequency = 9000;
lcd.print(frequency);
digitalWrite(13, LOW);
FreqMeasure.end();
}
}
}
}