Multi language start

Modified script to support multi language.

Pending: Add menu option to select language
This commit is contained in:
Sjef Verhoeven PE5PVB
2023-06-04 23:39:59 +02:00
parent ea410e46da
commit e6f2dd4b5c
2 changed files with 90 additions and 42 deletions

View File

@@ -1,5 +1,6 @@
#include "src/TEF6686.h" #include "src/TEF6686.h"
#include "src/constants.h" #include "src/constants.h"
#include "src/language.h"
#include <EEPROM.h> #include <EEPROM.h>
#include <Wire.h> #include <Wire.h>
#include <TFT_eSPI.h> // https://github.com/Bodmer/TFT_eSPI #include <TFT_eSPI.h> // https://github.com/Bodmer/TFT_eSPI
@@ -48,6 +49,7 @@ bool Stereostatusold;
bool StereoToggle = true; bool StereoToggle = true;
bool store; bool store;
bool tuned; bool tuned;
byte language = 0;
byte tunemode; byte tunemode;
byte memorypos; byte memorypos;
byte memoryposold; byte memoryposold;
@@ -263,8 +265,8 @@ void setup() {
EEPROM.commit(); EEPROM.commit();
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Rotary direction changed", 150, 70, 4); tft.drawCentreString(myLanguage[language][1], 150, 70, 4);
tft.drawCentreString("Please release button", 150, 100, 4); tft.drawCentreString(myLanguage[language][2], 150, 100, 4);
while (digitalRead(BWBUTTON) == LOW) delay(50); while (digitalRead(BWBUTTON) == LOW) delay(50);
} }
@@ -280,8 +282,8 @@ void setup() {
EEPROM.commit(); EEPROM.commit();
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Screen flipped", 150, 70, 4); tft.drawCentreString(myLanguage[language][3], 150, 70, 4);
tft.drawCentreString("Please release button", 150, 100, 4); tft.drawCentreString(myLanguage[language][2], 150, 100, 4);
while (digitalRead(MODEBUTTON) == LOW) delay(50); while (digitalRead(MODEBUTTON) == LOW) delay(50);
} }
@@ -289,8 +291,8 @@ void setup() {
analogWrite(SMETERPIN, 511); analogWrite(SMETERPIN, 511);
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Calibrate analog meter", 150, 70, 4); tft.drawCentreString(myLanguage[language][4], 150, 70, 4);
tft.drawCentreString("Release button when ready", 150, 100, 4); tft.drawCentreString(myLanguage[language][5], 150, 100, 4);
while (digitalRead(PWRBUTTON) == LOW) delay(50); while (digitalRead(PWRBUTTON) == LOW) delay(50);
analogWrite(SMETERPIN, 0); analogWrite(SMETERPIN, 0);
} }
@@ -300,14 +302,14 @@ void setup() {
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
if (optenc == 0) { if (optenc == 0) {
optenc = 1; optenc = 1;
tft.drawCentreString("encoder set to optical", 150, 70, 4); tft.drawCentreString(myLanguage[language][6], 150, 70, 4);
} else { } else {
optenc = 0; optenc = 0;
tft.drawCentreString("encoder set to standard", 150, 70, 4); tft.drawCentreString(myLanguage[language][7], 150, 70, 4);
} }
EEPROM.writeByte(42, optenc); EEPROM.writeByte(42, optenc);
EEPROM.commit(); EEPROM.commit();
tft.drawCentreString("Please release button", 150, 100, 4); tft.drawCentreString(myLanguage[language][2], 150, 100, 4);
while (digitalRead(ROTARY_BUTTON) == LOW) delay(50); while (digitalRead(ROTARY_BUTTON) == LOW) delay(50);
} }
@@ -316,7 +318,7 @@ void setup() {
tft.pushImage (0, 99, 211, 140, pe5pvblogo); tft.pushImage (0, 99, 211, 140, pe5pvblogo);
tft.pushImage (239, 200, 80, 30, nxplogo); tft.pushImage (239, 200, 80, 30, nxplogo);
tft.setTextColor(TFT_SKYBLUE); tft.setTextColor(TFT_SKYBLUE);
tft.drawCentreString("FM/AM receiver", 160, 10, 4); tft.drawCentreString(myLanguage[language][8], 160, 10, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawCentreString("Software " + String(VERSION), 160, 30, 2); tft.drawCentreString("Software " + String(VERSION), 160, 30, 2);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
@@ -336,7 +338,7 @@ void setup() {
tft.drawString("Tuner: TEF6689 Lithio FMSI DR (" + String(version) + ")", 80, 60, 2); tft.drawString("Tuner: TEF6689 Lithio FMSI DR (" + String(version) + ")", 80, 60, 2);
} else { } else {
tft.setTextColor(TFT_RED); tft.setTextColor(TFT_RED);
tft.drawString("Tuner: !None!", 80, 60, 2); tft.drawString(myLanguage[language][9], 80, 60, 2);
while (true); while (true);
for (;;); for (;;);
} }
@@ -837,7 +839,7 @@ void ButtonPress() {
switch (menuoption) { switch (menuoption) {
case 30: case 30:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Volume:", 150, 70, 4); tft.drawCentreString(myLanguage[language][10], 150, 70, 4);
tft.drawString("dB", 170, 110, 4); tft.drawString("dB", 170, 110, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
@@ -846,7 +848,7 @@ void ButtonPress() {
case 50: case 50:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Converter:", 150, 70, 4); tft.drawCentreString(myLanguage[language][11], 150, 70, 4);
tft.drawString("MHz", 170, 110, 4); tft.drawString("MHz", 170, 110, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
@@ -855,7 +857,7 @@ void ButtonPress() {
case 70: case 70:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Low bandedge:", 150, 70, 4); tft.drawCentreString(myLanguage[language][12], 150, 70, 4);
tft.drawString("MHz", 170, 110, 4); tft.drawString("MHz", 170, 110, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawRightString(String(LowEdgeSet + ConverterSet, DEC), 165, 110, 4); tft.drawRightString(String(LowEdgeSet + ConverterSet, DEC), 165, 110, 4);
@@ -863,7 +865,7 @@ void ButtonPress() {
case 90: case 90:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("High bandedge:", 150, 70, 4); tft.drawCentreString(myLanguage[language][13], 150, 70, 4);
tft.drawString("MHz", 170, 110, 4); tft.drawString("MHz", 170, 110, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawRightString(String(HighEdgeSet + ConverterSet, DEC), 165, 110, 4); tft.drawRightString(String(HighEdgeSet + ConverterSet, DEC), 165, 110, 4);
@@ -871,7 +873,7 @@ void ButtonPress() {
case 110: case 110:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("RF Level offset:", 150, 70, 4); tft.drawCentreString(myLanguage[language][14], 150, 70, 4);
tft.drawString("dB", 170, 110, 4); tft.drawString("dB", 170, 110, 4);
tft.drawString("dBuV", 190, 157, 4); tft.drawString("dBuV", 190, 157, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
@@ -882,7 +884,7 @@ void ButtonPress() {
case 130: case 130:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Stereo threshold:", 150, 70, 4); tft.drawCentreString(myLanguage[language][15], 150, 70, 4);
if (StereoLevel != 0) tft.drawString("dBuV", 170, 110, 4); if (StereoLevel != 0) tft.drawString("dBuV", 170, 110, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (StereoLevel != 0) tft.drawRightString(String(StereoLevel, DEC), 165, 110, 4); else tft.drawRightString("Off", 165, 110, 4); if (StereoLevel != 0) tft.drawRightString(String(StereoLevel, DEC), 165, 110, 4); else tft.drawRightString("Off", 165, 110, 4);
@@ -890,7 +892,7 @@ void ButtonPress() {
case 150: case 150:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("High Cut corner:", 150, 70, 4); tft.drawCentreString(myLanguage[language][16], 150, 70, 4);
if (HighCutLevel != 0) tft.drawString("Hz", 170, 110, 4); if (HighCutLevel != 0) tft.drawString("Hz", 170, 110, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (HighCutLevel != 0) tft.drawRightString(String(HighCutLevel * 100, DEC), 165, 110, 4); else tft.drawRightString("Off", 165, 110, 4); if (HighCutLevel != 0) tft.drawRightString(String(HighCutLevel * 100, DEC), 165, 110, 4); else tft.drawRightString("Off", 165, 110, 4);
@@ -898,7 +900,7 @@ void ButtonPress() {
case 170: case 170:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Highcut threshold:", 150, 70, 4); tft.drawCentreString(myLanguage[language][17], 150, 70, 4);
if (HighCutOffset != 0) tft.drawString("dBuV", 170, 110, 4); if (HighCutOffset != 0) tft.drawString("dBuV", 170, 110, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (HighCutOffset != 0) tft.drawRightString(String(HighCutOffset, DEC), 165, 110, 4); else tft.drawRightString("Off", 165, 110, 4); if (HighCutOffset != 0) tft.drawRightString(String(HighCutOffset, DEC), 165, 110, 4); else tft.drawRightString("Off", 165, 110, 4);
@@ -906,7 +908,7 @@ void ButtonPress() {
case 190: case 190:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Low level threshold:", 150, 70, 4); tft.drawCentreString(myLanguage[language][18], 150, 70, 4);
tft.drawString("dBuV", 150, 110, 4); tft.drawString("dBuV", 150, 110, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawRightString(String(LowLevelSet, DEC), 145, 110, 4); tft.drawRightString(String(LowLevelSet, DEC), 145, 110, 4);
@@ -914,7 +916,7 @@ void ButtonPress() {
case 210: case 210:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Contrast:", 150, 70, 4); tft.drawCentreString(myLanguage[language][19], 150, 70, 4);
tft.drawString("%", 170, 110, 4); tft.drawString("%", 170, 110, 4);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawRightString(String(ContrastSet, DEC), 165, 110, 4); tft.drawRightString(String(ContrastSet, DEC), 165, 110, 4);
@@ -1404,25 +1406,25 @@ void BuildMenu() {
if (HighCutOffset != 0) tft.drawRightString("dBuV", 305, 170, 2); if (HighCutOffset != 0) tft.drawRightString("dBuV", 305, 170, 2);
tft.drawRightString("dBuV", 305, 190, 2); tft.drawRightString("dBuV", 305, 190, 2);
tft.drawRightString("%", 305, 210, 2); tft.drawRightString("%", 305, 210, 2);
tft.drawString("Set volume", 20, 30, 2); tft.drawString(myLanguage[language][20], 20, 30, 2);
tft.drawString("Set converter offset", 20, 50, 2); tft.drawString(myLanguage[language][21], 20, 50, 2);
tft.drawString("Set low bandedge", 20, 70, 2); tft.drawString(myLanguage[language][22], 20, 70, 2);
tft.drawString("Set high bandedge", 20, 90, 2); tft.drawString(myLanguage[language][23], 20, 90, 2);
tft.drawString("Set level offset", 20, 110, 2); tft.drawString(myLanguage[language][24], 20, 110, 2);
tft.drawString("Set Stereo sep. threshold", 20, 130, 2); tft.drawString(myLanguage[language][25], 20, 130, 2);
tft.drawString("Set high cut corner frequency", 20, 150, 2); tft.drawString(myLanguage[language][26], 20, 150, 2);
tft.drawString("Set High cut threshold", 20, 170, 2); tft.drawString(myLanguage[language][27], 20, 170, 2);
tft.drawString("Set low level threshold", 20, 190, 2); tft.drawString(myLanguage[language][28], 20, 190, 2);
tft.drawString("Set Display brightness", 20, 210, 2); tft.drawString(myLanguage[language][29], 20, 210, 2);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (VolSet > 0) tft.drawRightString("+" + String(VolSet, DEC), 270, 30, 2); else tft.drawRightString(String(VolSet, DEC), 270, 30, 2); if (VolSet > 0) tft.drawRightString("+" + String(VolSet, DEC), 270, 30, 2); else tft.drawRightString(String(VolSet, DEC), 270, 30, 2);
tft.drawRightString(String(ConverterSet, DEC), 270, 50, 2); tft.drawRightString(String(ConverterSet, DEC), 270, 50, 2);
tft.drawRightString(String(LowEdgeSet + ConverterSet, DEC), 270, 70, 2); tft.drawRightString(String(LowEdgeSet + ConverterSet, DEC), 270, 70, 2);
tft.drawRightString(String(HighEdgeSet + ConverterSet, DEC), 270, 90, 2); tft.drawRightString(String(HighEdgeSet + ConverterSet, DEC), 270, 90, 2);
if (LevelOffset > 0) tft.drawRightString("+" + String(LevelOffset, DEC), 270, 110, 2); else tft.drawRightString(String(LevelOffset, DEC), 270, 110, 2); if (LevelOffset > 0) tft.drawRightString("+" + String(LevelOffset, DEC), 270, 110, 2); else tft.drawRightString(String(LevelOffset, DEC), 270, 110, 2);
if (StereoLevel != 0) tft.drawRightString(String(StereoLevel, DEC), 270, 130, 2); else tft.drawRightString("Off", 270, 130, 2); if (StereoLevel != 0) tft.drawRightString(String(StereoLevel, DEC), 270, 130, 2); else tft.drawRightString(myLanguage[language][30], 270, 130, 2);
if (HighCutLevel != 0) tft.drawRightString(String(HighCutLevel * 100, DEC), 270, 150, 2); else tft.drawRightString("Off", 270, 150, 2); if (HighCutLevel != 0) tft.drawRightString(String(HighCutLevel * 100, DEC), 270, 150, 2); else tft.drawRightString(myLanguage[language][30], 270, 150, 2);
if (HighCutOffset != 0) tft.drawRightString(String(HighCutOffset, DEC), 270, 170, 2); else tft.drawRightString("Off", 270, 170, 2); if (HighCutOffset != 0) tft.drawRightString(String(HighCutOffset, DEC), 270, 170, 2); else tft.drawRightString(myLanguage[language][30], 270, 170, 2);
tft.drawRightString(String(LowLevelSet, DEC), 270, 190, 2); tft.drawRightString(String(LowLevelSet, DEC), 270, 190, 2);
tft.drawRightString(String(ContrastSet, DEC), 270, 210, 2); tft.drawRightString(String(ContrastSet, DEC), 270, 210, 2);
analogWrite(SMETERPIN, 0); analogWrite(SMETERPIN, 0);
@@ -1439,8 +1441,8 @@ void MuteScreen(int setting) {
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
tft.drawRect(0, 0, 320, 240, TFT_BLUE); tft.drawRect(0, 0, 320, 240, TFT_BLUE);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString("Screen is muted!", 160, 30, 4); tft.drawCentreString(myLanguage[language][31], 160, 30, 4);
tft.drawCentreString("To unmute uncheck RF+ box", 160, 60, 2); tft.drawCentreString(myLanguage[language][32], 160, 60, 2);
} }
} }
@@ -1861,7 +1863,7 @@ void doSquelch() {
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.setCursor (216, 168); tft.setCursor (216, 168);
if (Squelchold == -100) { if (Squelchold == -100) {
tft.print("OFF"); tft.print(myLanguage[language][33]);
} else if (Squelchold == 920) { } else if (Squelchold == 920) {
tft.print("ST"); tft.print("ST");
} else { } else {
@@ -1870,7 +1872,7 @@ void doSquelch() {
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.setCursor (216, 168); tft.setCursor (216, 168);
if (Squelch == -100) { if (Squelch == -100) {
tft.print("OFF"); tft.print(myLanguage[language][33]);
} else if (Squelch == 920) { } else if (Squelch == 920) {
tft.print("ST"); tft.print("ST");
} else { } else {
@@ -2192,7 +2194,7 @@ void XDRGTKRoutine() {
tft.setTextFont(2); tft.setTextFont(2);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.setCursor (240, 168); tft.setCursor (240, 168);
if (Squelchold == -100) tft.print("OFF"); else if (Squelchold > 920) tft.print("ST"); else tft.print(Squelchold / 10); if (Squelchold == -100) tft.print(myLanguage[language][33]); else if (Squelchold > 920) tft.print("ST"); else tft.print(Squelchold / 10);
} }
} }
break; break;
@@ -2385,7 +2387,7 @@ void XDRGTKRoutine() {
tft.setTextFont(4); tft.setTextFont(4);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.setCursor (90, 60); tft.setCursor (90, 60);
tft.print("SCANNING..."); tft.print(myLanguage[language][34]);
} }
radio.SetFreq(frequencyold); radio.SetFreq(frequencyold);
if (screenmute == false) ShowFreq(0); if (screenmute == false) ShowFreq(0);
@@ -2573,8 +2575,8 @@ void SetTunerPatch() {
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
analogWrite(CONTRASTPIN, ContrastSet * 2 + 27); analogWrite(CONTRASTPIN, ContrastSet * 2 + 27);
if (TEF == 0) tft.drawCentreString("Tuner not detected", 150, 70, 4); else tft.drawCentreString(String("Tuner version set: v") + String(TEF), 150, 70, 4); if (TEF == 0) tft.drawCentreString(myLanguage[language][35], 150, 70, 4); else tft.drawCentreString(String(myLanguage[language][36]) + String(TEF), 150, 70, 4);
tft.drawCentreString("Please restart tuner", 150, 100, 4); tft.drawCentreString(myLanguage[language][37], 150, 100, 4);
EEPROM.writeByte(54, TEF); EEPROM.writeByte(54, TEF);
EEPROM.commit(); EEPROM.commit();
while (true); while (true);

46
src/language.h Normal file
View File

@@ -0,0 +1,46 @@
// [number of languages][number of texts][max. length of text]
const char myLanguage[1][41][30] = {
{ "English",
"Rotary direction changed",
"Please release button",
"Screen flipped",
"Calibrate analog meter",
"Release button when ready",
"encoder set to optical",
"encoder set to standard",
"FM/AM receiver",
"Tuner: !None!",
"Volume:",
"Converter:",
"Low bandedge:",
"High bandedge:",
"RF Level offset:",
"Stereo threshold:",
"High Cut corner:",
"Highcut threshold:",
"Low level threshold:",
"Contrast:",
"Set volume",
"Set converter offset",
"Set low bandedge",
"Set high bandedge",
"Set level offset",
"Set Stereo sep. threshold",
"Set high cut corner frequency",
"Set High cut threshold",
"Set low level threshold",
"Set Display brightness",
"Off",
"Screen is muted!",
"To unmute uncheck RF+ box",
"OFF",
"SCANNING...",
"Tuner not detected",
"Tuner version set: v",
"Please restart tuner",
"Show RDS errors",
"Language",
"Choose your language"
}//,
};