88 lines
2.3 KiB
C++
88 lines
2.3 KiB
C++
/* Program to measure the frequenncy of a input, on digital pin 8
|
|
* Made by Oyvind Skaaden
|
|
*/
|
|
#include <FreqMeasure.h> // Library for measuring the frequency
|
|
#define r_in 8 // Pinnen som brukes til å lese frekvensen
|
|
|
|
// Pinner som skal skrives til
|
|
#define u_out 6
|
|
#define b_out 7
|
|
|
|
// Frekvensene som blir brukt til demodulering
|
|
const unsigned int f0 = 325;
|
|
const unsigned int f1 = 750;
|
|
|
|
// Diverse kalkulasjoner for å kompensere for at frekvensen kan leses
|
|
// eller være feil på
|
|
const float offs = 0.05;
|
|
const float lowB = 1 - offs;
|
|
const float highB = 1 + offs;
|
|
|
|
// Hvor mange målinger som skal snittes
|
|
const unsigned int maxCount = 10;
|
|
|
|
// #### Globale verdier ####
|
|
double sum = 0;
|
|
unsigned int count = 0;
|
|
|
|
// Variabel for en timeoutfunksjon
|
|
unsigned long mesTime = 0;
|
|
|
|
void setup() {
|
|
// Starter en seriel kommunikasjonsport for å kunne bruke det
|
|
// demodulerte signalet gjennom feks en data
|
|
Serial.begin(9600);
|
|
// Start opp måling av frekvenser på pinne 8
|
|
FreqMeasure.begin();
|
|
|
|
// Setter pinmode til utgangspinnene
|
|
pinMode(u_out, OUTPUT);
|
|
pinMode(b_out, OUTPUT);
|
|
}
|
|
|
|
void loop() {
|
|
// Dersom biblioteket kan lese frekvenser...
|
|
if (FreqMeasure.available()) {
|
|
// Time-out funksjonen
|
|
mesTime = millis();
|
|
|
|
// Summer sammen målinger for å snitte dem
|
|
sum = sum + FreqMeasure.read();
|
|
count = count + 1;
|
|
if (count > maxCount) {
|
|
// Snitt målingene for å gi en bedre måling
|
|
float freq = FreqMeasure.countToFrequency(sum / count);
|
|
|
|
// Her er grensene for hva som er lav og høy bit på FSK signalet.
|
|
if (freq > f0 * lowB && freq < f0 * highB) {
|
|
digitalWrite(b_out, LOW);
|
|
digitalWrite(u_out, HIGH);
|
|
Serial.print("LOW : ");
|
|
}
|
|
else if (freq > f1 * lowB && freq < f1 * highB) {
|
|
digitalWrite(b_out, HIGH);
|
|
digitalWrite(u_out, HIGH);
|
|
Serial.print("HIGH : ");
|
|
}
|
|
else {
|
|
digitalWrite(b_out, LOW);
|
|
digitalWrite(u_out, LOW);
|
|
Serial.print("OFF : ");
|
|
}
|
|
Serial.println(freq);
|
|
sum = 0;
|
|
count = 0;
|
|
}
|
|
}
|
|
else{
|
|
// Time-out funksjonen, dersom du ikke får noe signal på 10 ms,
|
|
// sett alle utganger til LOW
|
|
if (millis() - mesTime > 10){
|
|
digitalWrite(b_out, LOW);
|
|
digitalWrite(u_out, LOW);
|
|
Serial.println("OFF");
|
|
delay(10);
|
|
}
|
|
}
|
|
}
|