Bugfixing
And new modulation meter
This commit is contained in:
+77
-46
@@ -275,6 +275,7 @@ unsigned long eontickerhold;
|
|||||||
unsigned long rtticker;
|
unsigned long rtticker;
|
||||||
unsigned long rttickerhold;
|
unsigned long rttickerhold;
|
||||||
unsigned long rtplusticker;
|
unsigned long rtplusticker;
|
||||||
|
unsigned long rtplustickerhold;
|
||||||
|
|
||||||
TEF6686 radio;
|
TEF6686 radio;
|
||||||
TFT_eSprite sprite = TFT_eSprite(&tft);
|
TFT_eSprite sprite = TFT_eSprite(&tft);
|
||||||
@@ -621,14 +622,19 @@ void loop() {
|
|||||||
tft.setFreeFont(FONT7);
|
tft.setFreeFont(FONT7);
|
||||||
tft.setTextColor(ActiveColor);
|
tft.setTextColor(ActiveColor);
|
||||||
if (showmodulation) {
|
if (showmodulation) {
|
||||||
tft.drawString("20", 20, 146, GFXFF);
|
tft.drawString("10", 27, 146, GFXFF);
|
||||||
tft.drawString("40", 50, 146, GFXFF);
|
tft.drawString("30", 57, 146, GFXFF);
|
||||||
tft.drawString("60", 80, 146, GFXFF);
|
tft.drawString("50", 87, 146, GFXFF);
|
||||||
tft.drawString("80", 110, 146, GFXFF);
|
tft.drawString("70", 117, 146, GFXFF);
|
||||||
tft.drawString("100", 134, 146, GFXFF);
|
tft.drawString("100", 164, 146, GFXFF);
|
||||||
tft.drawString("120", 164, 146, GFXFF);
|
tft.drawCentreString("M", 7, 132, GFXFF);
|
||||||
tft.drawString("%", 196, 146, GFXFF);
|
for (byte segments = 0; segments < 94; segments++) {
|
||||||
tft.drawString("M", 6, 132, GFXFF);
|
if (segments > 54) {
|
||||||
|
if (((segments - 53) % 10) == 0) tft.fillRect(16 + (2 * segments), 147, 2, 3, TFT_RED);
|
||||||
|
} else {
|
||||||
|
if (((segments + 1) % 6) == 0) tft.fillRect(16 + (2 * segments), 147, 2, 3, TFT_GREEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (region == 0) tft.drawString("PI:", 216, 191, GFXFF);
|
if (region == 0) tft.drawString("PI:", 216, 191, GFXFF);
|
||||||
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF);
|
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF);
|
||||||
@@ -643,29 +649,22 @@ void loop() {
|
|||||||
if (LowLevelInit == true && menu == false) {
|
if (LowLevelInit == true && menu == false) {
|
||||||
if (screenmute == false && !afscreen && !advancedRDS) {
|
if (screenmute == false && !afscreen && !advancedRDS) {
|
||||||
tft.setFreeFont(FONT7);
|
tft.setFreeFont(FONT7);
|
||||||
tft.fillRect(20, 139, 12, 8, GreyoutColor);
|
for (byte segments = 0; segments < 94; segments++) {
|
||||||
tft.fillRect(34, 139, 12, 8, GreyoutColor);
|
if (segments > 54) {
|
||||||
tft.fillRect(48, 139, 12, 8, GreyoutColor);
|
if (((segments - 53) % 10) == 0) tft.fillRect(16 + (2 * segments), 147, 2, 3, GreyoutColor);
|
||||||
tft.fillRect(62, 139, 12, 8, GreyoutColor);
|
} else {
|
||||||
tft.fillRect(76, 139, 12, 8, GreyoutColor);
|
if (((segments + 1) % 6) == 0) tft.fillRect(16 + (2 * segments), 147, 2, 3, GreyoutColor);
|
||||||
tft.fillRect(90, 139, 12, 8, GreyoutColor);
|
}
|
||||||
tft.fillRect(104, 139, 12, 8, GreyoutColor);
|
}
|
||||||
tft.fillRect(118, 139, 12, 8, GreyoutColor);
|
|
||||||
tft.fillRect(132, 139, 12, 8, GreyoutColor);
|
|
||||||
tft.fillRect(146, 139, 12, 8, GreyoutColor);
|
|
||||||
tft.fillRect(160, 139, 12, 8, GreyoutColor);
|
|
||||||
tft.fillRect(174, 139, 12, 8, GreyoutColor);
|
|
||||||
tft.fillRect(188, 139, 12, 8, GreyoutColor);
|
|
||||||
tft.setTextColor(GreyoutColor);
|
tft.setTextColor(GreyoutColor);
|
||||||
if (showmodulation) {
|
if (showmodulation) {
|
||||||
tft.drawString("20", 20, 146, GFXFF);
|
tft.drawString("10", 27, 146, GFXFF);
|
||||||
tft.drawString("40", 50, 146, GFXFF);
|
tft.drawString("30", 57, 146, GFXFF);
|
||||||
tft.drawString("60", 80, 146, GFXFF);
|
tft.drawString("50", 87, 146, GFXFF);
|
||||||
tft.drawString("80", 110, 146, GFXFF);
|
tft.drawString("70", 117, 146, GFXFF);
|
||||||
tft.drawString("100", 134, 146, GFXFF);
|
tft.drawString("100", 164, 146, GFXFF);
|
||||||
tft.drawString("120", 164, 146, GFXFF);
|
tft.drawCentreString("M", 7, 132, GFXFF);
|
||||||
tft.drawString("%", 196, 146, GFXFF);
|
tft.fillRect(16, 139, 188, 8, GreyoutColor);
|
||||||
tft.drawString("M", 6, 132, GFXFF);
|
|
||||||
}
|
}
|
||||||
if (region == 0) tft.drawString("PI:", 216, 191, GFXFF);
|
if (region == 0) tft.drawString("PI:", 216, 191, GFXFF);
|
||||||
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF);
|
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF);
|
||||||
@@ -840,14 +839,14 @@ void WakeToSleep(bool yes) {
|
|||||||
case DEEP_SLEEP:
|
case DEEP_SLEEP:
|
||||||
power = false;
|
power = false;
|
||||||
analogWrite(SMETERPIN, 0);
|
analogWrite(SMETERPIN, 0);
|
||||||
analogWrite(CONTRASTPIN, 0);
|
MuteScreen(1);
|
||||||
StoreFrequency();
|
StoreFrequency();
|
||||||
radio.power(1);
|
radio.power(1);
|
||||||
break;
|
break;
|
||||||
case LCD_OFF:
|
case LCD_OFF:
|
||||||
power = false;
|
power = false;
|
||||||
analogWrite(SMETERPIN, 0);
|
analogWrite(SMETERPIN, 0);
|
||||||
analogWrite(CONTRASTPIN, 0);
|
MuteScreen(1);
|
||||||
StoreFrequency();
|
StoreFrequency();
|
||||||
break;
|
break;
|
||||||
case LCD_BRIGHTNESS_1_PERCENT:
|
case LCD_BRIGHTNESS_1_PERCENT:
|
||||||
@@ -873,7 +872,7 @@ void WakeToSleep(bool yes) {
|
|||||||
pinMode (STANDBYLED, OUTPUT);
|
pinMode (STANDBYLED, OUTPUT);
|
||||||
digitalWrite(STANDBYLED, LOW);
|
digitalWrite(STANDBYLED, LOW);
|
||||||
analogWrite(CONTRASTPIN, ContrastSet * 2 + 27);
|
analogWrite(CONTRASTPIN, ContrastSet * 2 + 27);
|
||||||
|
MuteScreen(0);
|
||||||
screensavertriggered = false;
|
screensavertriggered = false;
|
||||||
screensaver_IRQ = OFF;
|
screensaver_IRQ = OFF;
|
||||||
ScreensaverTimerReopen();
|
ScreensaverTimerReopen();
|
||||||
@@ -884,7 +883,7 @@ void WakeToSleep(bool yes) {
|
|||||||
pinMode (STANDBYLED, OUTPUT);
|
pinMode (STANDBYLED, OUTPUT);
|
||||||
digitalWrite(STANDBYLED, LOW);
|
digitalWrite(STANDBYLED, LOW);
|
||||||
analogWrite(CONTRASTPIN, ContrastSet * 2 + 27);
|
analogWrite(CONTRASTPIN, ContrastSet * 2 + 27);
|
||||||
|
MuteScreen(0);
|
||||||
screensavertriggered = false;
|
screensavertriggered = false;
|
||||||
screensaver_IRQ = OFF;
|
screensaver_IRQ = OFF;
|
||||||
ScreensaverTimerReopen();
|
ScreensaverTimerReopen();
|
||||||
@@ -3223,7 +3222,15 @@ void ShowAdvancedRDS() {
|
|||||||
hasrtplusold = radio.rds.hasRDSplus;
|
hasrtplusold = radio.rds.hasRDSplus;
|
||||||
}
|
}
|
||||||
if (millis() - rtplusticker >= 350) {
|
if (millis() - rtplusticker >= 350) {
|
||||||
|
if (xPos3 == 6) {
|
||||||
|
if (millis() - rtplustickerhold >= 2000) {
|
||||||
xPos4 -= charWidth;
|
xPos4 -= charWidth;
|
||||||
|
rtplustickerhold = millis();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
xPos4 -= charWidth;
|
||||||
|
rtplustickerhold = millis();
|
||||||
|
}
|
||||||
if (xPos4 < -tft.textWidth(rtplusstring) + (charWidth * 14)) xPos4 = 6;
|
if (xPos4 < -tft.textWidth(rtplusstring) + (charWidth * 14)) xPos4 = 6;
|
||||||
sprite2.setFreeFont(FONT7);
|
sprite2.setFreeFont(FONT7);
|
||||||
sprite2.setTextDatum(ML_DATUM);
|
sprite2.setTextDatum(ML_DATUM);
|
||||||
@@ -3960,13 +3967,17 @@ void BuildDisplay() {
|
|||||||
tft.drawLine(174, 30, 174, 0, FrameColor);
|
tft.drawLine(174, 30, 174, 0, FrameColor);
|
||||||
tft.drawLine(20, 120, 200, 120, TFT_DARKGREY);
|
tft.drawLine(20, 120, 200, 120, TFT_DARKGREY);
|
||||||
if (!showmodulation) tft.drawLine(20, 150, 200, 150, GreyoutColor); else tft.drawLine(20, 150, 200, 150, TFT_DARKGREY);
|
if (!showmodulation) tft.drawLine(20, 150, 200, 150, GreyoutColor); else tft.drawLine(20, 150, 200, 150, TFT_DARKGREY);
|
||||||
for (uint16_t segments = 0; segments < 94; segments++) {
|
for (byte segments = 0; segments < 94; segments++) {
|
||||||
if (segments > 54) {
|
if (segments > 54) {
|
||||||
if (((segments - 53) % 10) == 0)
|
if (((segments - 53) % 10) == 0) {
|
||||||
tft.fillRect(16 + (2 * segments), 117, 2, 3, TFT_RED);
|
tft.fillRect(16 + (2 * segments), 117, 2, 3, TFT_RED);
|
||||||
|
if (!showmodulation) tft.fillRect(16 + (2 * segments), 147, 2, 3, GreyoutColor); else tft.fillRect(16 + (2 * segments), 147, 2, 3, TFT_RED);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (((segments + 1) % 6) == 0)
|
if (((segments + 1) % 6) == 0) {
|
||||||
tft.fillRect(16 + (2 * segments), 117, 2, 3, TFT_GREEN);
|
tft.fillRect(16 + (2 * segments), 117, 2, 3, TFT_GREEN);
|
||||||
|
if (!showmodulation) tft.fillRect(16 + (2 * segments), 147, 2, 3, GreyoutColor); else tft.fillRect(16 + (2 * segments), 147, 2, 3, TFT_GREEN);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tft.setTextColor(ActiveColor);
|
tft.setTextColor(ActiveColor);
|
||||||
@@ -3974,7 +3985,7 @@ void BuildDisplay() {
|
|||||||
if (showsquelch) tft.drawString("SQ: ", 216, 150, GFXFF);
|
if (showsquelch) tft.drawString("SQ: ", 216, 150, GFXFF);
|
||||||
tft.drawString("S/N", 250, 164, GFXFF);
|
tft.drawString("S/N", 250, 164, GFXFF);
|
||||||
tft.drawString("dB", 300, 164, GFXFF);
|
tft.drawString("dB", 300, 164, GFXFF);
|
||||||
tft.drawString("S", 6, 100, GFXFF);
|
tft.drawCentreString("S", 7, 101, GFXFF);
|
||||||
if (region == 0) tft.drawString("PI: ", 216, 191, GFXFF);
|
if (region == 0) tft.drawString("PI: ", 216, 191, GFXFF);
|
||||||
if (region == 1) tft.drawString("ID: ", 216, 191, GFXFF);
|
if (region == 1) tft.drawString("ID: ", 216, 191, GFXFF);
|
||||||
tft.drawString("PS: ", 6, 191, GFXFF);
|
tft.drawString("PS: ", 6, 191, GFXFF);
|
||||||
@@ -3987,14 +3998,12 @@ void BuildDisplay() {
|
|||||||
tft.drawString(" + 10", 134, 116, GFXFF);
|
tft.drawString(" + 10", 134, 116, GFXFF);
|
||||||
tft.drawString(" + 30", 174, 116, GFXFF);
|
tft.drawString(" + 30", 174, 116, GFXFF);
|
||||||
if (!showmodulation) tft.setTextColor(GreyoutColor);
|
if (!showmodulation) tft.setTextColor(GreyoutColor);
|
||||||
tft.drawString("M", 6, 132, GFXFF);
|
tft.drawCentreString("M", 7, 132, GFXFF);
|
||||||
tft.drawString("20", 20, 146, GFXFF);
|
tft.drawString("10", 27, 146, GFXFF);
|
||||||
tft.drawString("40", 50, 146, GFXFF);
|
tft.drawString("30", 57, 146, GFXFF);
|
||||||
tft.drawString("60", 80, 146, GFXFF);
|
tft.drawString("50", 87, 146, GFXFF);
|
||||||
tft.drawString("80", 110, 146, GFXFF);
|
tft.drawString("70", 117, 146, GFXFF);
|
||||||
tft.drawString("100", 134, 146, GFXFF);
|
tft.drawString("100", 164, 146, GFXFF);
|
||||||
tft.drawString("120", 164, 146, GFXFF);
|
|
||||||
tft.drawString("%", 196, 146, GFXFF);
|
|
||||||
tft.setTextColor(ActiveColor);
|
tft.setTextColor(ActiveColor);
|
||||||
tft.setFreeFont(FONT14);
|
tft.setFreeFont(FONT14);
|
||||||
tft.drawString("kHz", 225, -5, GFXFF);
|
tft.drawString("kHz", 225, -5, GFXFF);
|
||||||
@@ -4255,7 +4264,6 @@ void ShowSignalLevel() {
|
|||||||
if (screenmute == false) {
|
if (screenmute == false) {
|
||||||
if (millis() >= snrupdatetimer + TIMER_SNR_TIMER) {
|
if (millis() >= snrupdatetimer + TIMER_SNR_TIMER) {
|
||||||
snrupdatetimer = millis();
|
snrupdatetimer = millis();
|
||||||
|
|
||||||
if (!advancedRDS) {
|
if (!advancedRDS) {
|
||||||
if (SNR > (SNRold + 1) || SNR < (SNRold - 1)) {
|
if (SNR > (SNRold + 1) || SNR < (SNRold - 1)) {
|
||||||
tft.setFreeFont(FONT7);
|
tft.setFreeFont(FONT7);
|
||||||
@@ -4506,7 +4514,29 @@ void ShowModLevel() {
|
|||||||
MStatus = 0;
|
MStatus = 0;
|
||||||
MStatusold = 1;
|
MStatusold = 1;
|
||||||
}
|
}
|
||||||
|
segments = map(MStatus, 0, 120, 0, 94);
|
||||||
|
|
||||||
|
if (segments > peakholdold) {
|
||||||
|
peakholdold = segments;
|
||||||
|
peakholdmillis = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
tft.fillRect(16, 139, 2 * constrain(segments, 0, 54), 8, TFT_GREEN);
|
||||||
|
tft.fillRect(16 + 2 * 54, 139, 2 * (constrain(segments, 54, 94) - 54), 8, TFT_RED);
|
||||||
|
tft.fillRect(16 + 2 * constrain(segments, 0, 94), 139, 2 * (94 - constrain(segments, 0, 94)), 8, GreyoutColor);
|
||||||
|
|
||||||
|
int peakHoldPosition = 16 + 2 * constrain(peakholdold, 0, 94);
|
||||||
|
tft.fillRect(peakHoldPosition, 139, 2, 8, (MStatus > 80) ? TFT_RED : PrimaryColor);
|
||||||
|
|
||||||
|
if (millis() - peakholdmillis >= 1000) {
|
||||||
|
tft.fillRect(peakHoldPosition, 139, 2, 8, GreyoutColor);
|
||||||
|
peakholdold = segments;
|
||||||
|
peakholdmillis = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
if (MStatus != MStatusold || MStatus < 10) {
|
if (MStatus != MStatusold || MStatus < 10) {
|
||||||
for (segments = 0; segments < 13; segments++) {
|
for (segments = 0; segments < 13; segments++) {
|
||||||
color = TFT_GREEN;
|
color = TFT_GREEN;
|
||||||
@@ -4529,6 +4559,7 @@ void ShowModLevel() {
|
|||||||
peakholdmillis = millis();
|
peakholdmillis = millis();
|
||||||
MStatusold = MStatus;
|
MStatusold = MStatus;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+12
-2
@@ -4,6 +4,9 @@
|
|||||||
#include <TimeLib.h> // https://github.com/PaulStoffregen/Time
|
#include <TimeLib.h> // https://github.com/PaulStoffregen/Time
|
||||||
|
|
||||||
unsigned long rdstimer = 0;
|
unsigned long rdstimer = 0;
|
||||||
|
unsigned long bitStartTime = 0;
|
||||||
|
bool lastBitState = false;
|
||||||
|
|
||||||
|
|
||||||
void TEF6686::init(byte TEF) {
|
void TEF6686::init(byte TEF) {
|
||||||
uint8_t bootstatus;
|
uint8_t bootstatus;
|
||||||
@@ -244,16 +247,23 @@ void TEF6686::readRDS(bool showrdserrors)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool bitValue = (rdsStat & (1 << 9)) != 0;
|
||||||
|
|
||||||
|
if (bitValue) {
|
||||||
|
rds.hasRDS = true; // RDS decoder synchronized and data available
|
||||||
|
bitStartTime = 0;
|
||||||
|
} else {
|
||||||
|
if (bitStartTime == 0) bitStartTime = millis(); else if (millis() - bitStartTime >= 87) rds.hasRDS = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (rds.rdsB != rdsBprevious) {
|
if (rds.rdsB != rdsBprevious) {
|
||||||
rds.correct = false;
|
rds.correct = false;
|
||||||
rds.hasRDS = false;
|
|
||||||
|
|
||||||
if (((rds.rdsErr >> 14) & 0x02) > 0) rds.rdsAerror = true; else rds.rdsAerror = false; // Any errors in Block A?
|
if (((rds.rdsErr >> 14) & 0x02) > 0) rds.rdsAerror = true; else rds.rdsAerror = false; // Any errors in Block A?
|
||||||
if (((rds.rdsErr >> 12) & 0x02) > 0) rds.rdsBerror = true; else rds.rdsBerror = false; // Any errors in Block B?
|
if (((rds.rdsErr >> 12) & 0x02) > 0) rds.rdsBerror = true; else rds.rdsBerror = false; // Any errors in Block B?
|
||||||
if (((rds.rdsErr >> 10) & 0x02) > 0) rds.rdsCerror = true; else rds.rdsCerror = false; // Any errors in Block C?
|
if (((rds.rdsErr >> 10) & 0x02) > 0) rds.rdsCerror = true; else rds.rdsCerror = false; // Any errors in Block C?
|
||||||
if (((rds.rdsErr >> 8) & 0x02) > 0) rds.rdsDerror = true; else rds.rdsDerror = false; // Any errors in Block D?
|
if (((rds.rdsErr >> 8) & 0x02) > 0) rds.rdsDerror = true; else rds.rdsDerror = false; // Any errors in Block D?
|
||||||
if (!rds.rdsAerror && !rds.rdsBerror && !rds.rdsCerror && !rds.rdsDerror) rds.correct = true; // Any errors in all blocks?
|
if (!rds.rdsAerror && !rds.rdsBerror && !rds.rdsCerror && !rds.rdsDerror) rds.correct = true; // Any errors in all blocks?
|
||||||
if ((rdsStat & (1 << 9))) rds.hasRDS = true; // RDS decoder synchronized and data available
|
|
||||||
if ((rdsStat & (1 << 15))) rdsReady = true;
|
if ((rdsStat & (1 << 15))) rdsReady = true;
|
||||||
|
|
||||||
if (rdsReady) { // We have all data to decode... let's go...
|
if (rdsReady) { // We have all data to decode... let's go...
|
||||||
|
|||||||
Reference in New Issue
Block a user