#include #include #include /* Pins utilisés : * Si4703 : 2, A4, A5, GND, 3,3 V * Capacimètre : 5 */ // Entrée et sortie pour mesure du CV int input = 5; // Pin d'entrée du fréquencemetre int pinCalibrage = 4; // Pin pour procédure de calibrage boolean Calib=false; int minf,maxf; #define VAL_F_MIN 252 // Valeur mini de l'oscillateur #define VAL_F_MAX 933 // Valeur maxi de l'oscillateur #define F_MIN 875.0 // Fréquence basse de la bande FM #define F_MAX 1085.0 // Fréquence haute de la bande FM Si4703_Breakout radio(2, A4, A5); // Déclaration du module FM : resetPin,sdioPin,sclkPin int channel; // Canal écouté void Oscillateur(); int lastfrequency, frequency; void setup() { Serial.begin(9600); // Mise en route du module FM, volume 15 radio.powerOn(); radio.setVolume(15); pinMode(input,INPUT); pinMode(pinCalibrage,INPUT_PULLUP); lastfrequency=0; minf=EEPROM.read(0)|(EEPROM.read(1)<<8); maxf=EEPROM.read(2)|(EEPROM.read(3)<<8); Serial.println(minf); Serial.println(maxf); } void loop(){ Oscillateur(); commandeCV(); lastfrequency=frequency; if(digitalRead(pinCalibrage)==LOW) Calibration(); } void Calibration(){ if(!Calib){ digitalWrite(13,HIGH); minf=frequency; EEPROM.write(0,frequency&0xFF); EEPROM.write(1,(frequency>>8)&0xFF); Calib=true; Serial.print(frequency); } else{ maxf=frequency; EEPROM.write(2,frequency&0xFF); EEPROM.write(3,(frequency>>8)&0xFF); digitalWrite(13,LOW); Serial.println(frequency); } } void Oscillateur(){ FreqCounter::f_comp= 8; // Set compensation to 12 FreqCounter::start(100); // Start counting with gatetime of 100ms while (FreqCounter::f_ready == 0) ; // wait until counter ready frequency=FreqCounter::f_freq; // read result delay(20); } void commandeCV(){ if(fabs(lastfrequency-frequency)>1){ channel=map((int)frequency,VAL_F_MIN,VAL_F_MAX,minf,maxf); radio.setChannel(channel); } }