/* Program to measure the frequenncy of a input, on digital pin 8 * Made by Oyvind Skaaden */ #include // 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); } } }