TTT4265/D9/D9Arduino/D9Arduino.ino

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);
}
}
}