Stap 3: sinusgolf frequentie detectie
prevData = newData; //store vorige waarde
newData = ADCH; //get waarde van A0
Als (prevData < 127 & & newData > = 127) {//if verhogen en Overstekende middelpunt
periode = timer; //get periode van de huidige waarde van de timer
timer = 0; //reset timer
}
timer ++; //increment-timer
Vervolgens in de belangrijkste loop-functie berekend ik de frequentie door de timer-tarief door de periode. Ik gebruikte Serial.print voor het afdrukken van deze resultaten in de Arduino seriële monitor.
frequentie = 38462/periode; //timer tarief/periode
resultaten afdrukken
Serial.Print(Frequency);
Serial.println ("hz");
Fig 1 geeft het signaal binnenkomt A0. Het begin en einde van een cyclus, gemeten door timer wordt aangegeven door de afbeelding notitie. Fig. 2 toont de output uit de seriële monitor (command/ctrl + shift + m). Deze techniek werkt geweldig voor sinus golven, maar wanneer Golf nog gecompliceerder geworden (en 2.5V meer dan het dubbele kruis in één cyclus) deze techniek breekt.
//sine wave freq detection with 38.5kHz sampling rate and interrupts //by Amanda Ghassaei