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