diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index b816b96..f3aac32 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -1979,13 +1979,14 @@ void Round100K(unsigned int freq) { } void Round200K(unsigned int freq) { - if (freq % 10 < 5) { - frequency = (freq - freq % 10); - } else { - frequency = (freq - (freq % 10) + 10); - if ((freq % 10) % 2 != 0) frequency += 10; - } + frequency = (freq / 10) * 10; + + if (freq % 10 >= 5) frequency += 10; + if ((frequency / 100) % 2 == 0) frequency += 10; + if (frequency > 10800) frequency = 10790; + if (frequency % 20 == 0 && (frequency / 10) % 2 == 0) frequency -= 10; } + void Round5K(unsigned int freqAM) { if (freqAM % 10 < 3) { frequency_AM = (freqAM - freqAM % 10); @@ -3109,8 +3110,10 @@ void TuneUp() { if (band == BAND_FM) { frequency += temp; + if (fmdefaultstepsize == 2 && stepsize == 0 && frequency == 8795) frequency = 8790; if (frequency >= (HighEdgeSet * 10) + 1) { frequency = LowEdgeSet * 10; + if (fmdefaultstepsize == 2 && stepsize == 0 && frequency == 8750) frequency = 8775; if (edgebeep) EdgeBeeper(); } radio.SetFreq(frequency); @@ -3191,8 +3194,12 @@ void TuneDown() { if (band == BAND_FM) { frequency -= temp; + if (fmdefaultstepsize == 2 && stepsize == 0 && frequency == 8770) frequency = 8775; + if (fmdefaultstepsize == 2 && stepsize == 0 && frequency == 8755) frequency = 10790; + if (frequency < LowEdgeSet * 10) { frequency = HighEdgeSet * 10; + if (fmdefaultstepsize == 2 && stepsize == 0 && frequency == 10800) frequency = 10790; if (edgebeep) EdgeBeeper(); } radio.SetFreq(frequency); diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 3efa6cf..09cfc1e 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -149,6 +149,7 @@ void TEF6686::power(bool mode) { void TEF6686::SetFreq(uint16_t frequency) { devTEF_Radio_Tune_To(frequency); currentfreq = ((frequency + 5) / 10) * 10; + currentfreq2 = frequency; } void TEF6686::SetFreqAM(uint16_t frequency) { @@ -452,25 +453,25 @@ void TEF6686::readRDS(byte showrdserrors) if (SPIFFS.begin(true)) { delay(5); - if (currentfreq < 9000) { + if (currentfreq2 < 9000) { file = SPIFFS.open("/USA_87-90.csv"); - } else if (currentfreq > 9000 && currentfreq < 9200) { + } else if (currentfreq2 > 9000 && currentfreq2 < 9200) { file = SPIFFS.open("/USA_90-92.csv"); - } else if (currentfreq > 9200 && currentfreq < 9400) { + } else if (currentfreq2 > 9200 && currentfreq2 < 9400) { file = SPIFFS.open("/USA_92-94.csv"); - } else if (currentfreq > 9400 && currentfreq < 9600) { + } else if (currentfreq2 > 9400 && currentfreq2 < 9600) { file = SPIFFS.open("/USA_94-96.csv"); - } else if (currentfreq > 9600 && currentfreq < 9800) { + } else if (currentfreq2 > 9600 && currentfreq2 < 9800) { file = SPIFFS.open("/USA_96-98.csv"); - } else if (currentfreq > 9800 && currentfreq < 10000) { + } else if (currentfreq2 > 9800 && currentfreq2 < 10000) { file = SPIFFS.open("/USA_98-100.csv"); - } else if (currentfreq > 10000 && currentfreq < 10200) { + } else if (currentfreq2 > 10000 && currentfreq2 < 10200) { file = SPIFFS.open("/USA_100-102.csv"); - } else if (currentfreq > 10200 && currentfreq < 10400) { + } else if (currentfreq2 > 10200 && currentfreq2 < 10400) { file = SPIFFS.open("/USA_102-104.csv"); - } else if (currentfreq > 10400 && currentfreq < 10600) { + } else if (currentfreq2 > 10400 && currentfreq2 < 10600) { file = SPIFFS.open("/USA_104-106.csv"); - } else if (currentfreq > 10600) { + } else if (currentfreq2 > 10600) { file = SPIFFS.open("/USA_106-108.csv"); } @@ -506,7 +507,7 @@ void TEF6686::readRDS(byte showrdserrors) stationState[sizeof(stationState) - 1] = '\0'; } - if (frequencyValue == currentfreq && static_cast(firstColumnValue) == rds.correctPI) { + if (frequencyValue == currentfreq2 && static_cast(firstColumnValue) == rds.correctPI) { strncpy(rds.stationID, stationID, 7); strncpy(rds.stationState, stationState, 2); foundMatch = true; diff --git a/src/TEF6686.h b/src/TEF6686.h index f6dae0e..9c7dc5f 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -731,6 +731,7 @@ class TEF6686 { char RDSplus1[45]; char RDSplus2[45]; uint16_t currentfreq; + uint16_t currentfreq2; bool togglebit; bool runningbit; bool initrt;