commit
4f5ac283b7
@ -130,10 +130,21 @@ void CatGetFreqMode(unsigned long freq, byte fromType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Mode Check
|
//Mode Check
|
||||||
if (isUSB)
|
if (cwMode == 0)
|
||||||
CAT_BUFF[4] = CAT_MODE_USB;
|
{
|
||||||
|
if (isUSB)
|
||||||
|
CAT_BUFF[4] = CAT_MODE_USB;
|
||||||
|
else
|
||||||
|
CAT_BUFF[4] = CAT_MODE_LSB;
|
||||||
|
}
|
||||||
|
else if (cwMode == 1)
|
||||||
|
{
|
||||||
|
CAT_BUFF[4] = CAT_MODE_CW;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
CAT_BUFF[4] = CAT_MODE_LSB;
|
{
|
||||||
|
CAT_BUFF[4] = CAT_MODE_CW;
|
||||||
|
}
|
||||||
|
|
||||||
SendCatData(5);
|
SendCatData(5);
|
||||||
}
|
}
|
||||||
@ -198,12 +209,18 @@ void CatSetMode(byte tmpMode, byte fromType)
|
|||||||
|
|
||||||
if (!inTx)
|
if (!inTx)
|
||||||
{
|
{
|
||||||
if (tmpMode == CAT_MODE_USB)
|
if (tmpMode == CAT_MODE_CW)
|
||||||
{
|
{
|
||||||
|
cwMode = 1;
|
||||||
|
}
|
||||||
|
else if (tmpMode == CAT_MODE_USB)
|
||||||
|
{
|
||||||
|
cwMode = 0;
|
||||||
isUSB = true;
|
isUSB = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
cwMode = 0;
|
||||||
isUSB = false;
|
isUSB = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,10 +375,21 @@ void ReadEEPRom_FT817(byte fromType)
|
|||||||
CAT_BUFF[1] = 0xB2;
|
CAT_BUFF[1] = 0xB2;
|
||||||
break; case 0x69 : //FM Mic (#29) Contains 0-100 (decimal) as displayed
|
break; case 0x69 : //FM Mic (#29) Contains 0-100 (decimal) as displayed
|
||||||
case 0x78 :
|
case 0x78 :
|
||||||
if (isUSB)
|
if (cwMode == 0)
|
||||||
CAT_BUFF[0] = CAT_MODE_USB;
|
{
|
||||||
else
|
if (isUSB)
|
||||||
CAT_BUFF[0] = CAT_MODE_LSB;
|
CAT_BUFF[0] = CAT_MODE_USB;
|
||||||
|
else
|
||||||
|
CAT_BUFF[0] = CAT_MODE_LSB;
|
||||||
|
}
|
||||||
|
else if (cwMode == 1)
|
||||||
|
{
|
||||||
|
CAT_BUFF[0] = CAT_MODE_CW;
|
||||||
|
}
|
||||||
|
else if (cwMode == 2)
|
||||||
|
{
|
||||||
|
CAT_BUFF[0] = CAT_MODE_CW;
|
||||||
|
}
|
||||||
|
|
||||||
if (CAT_BUFF[0] != 0) CAT_BUFF[0] = 1 << 5;
|
if (CAT_BUFF[0] != 0) CAT_BUFF[0] = 1 << 5;
|
||||||
break;
|
break;
|
||||||
|
@ -151,6 +151,7 @@ int count = 0; //to generally count ticks, loops, etc
|
|||||||
#define CW_SPEED 28
|
#define CW_SPEED 28
|
||||||
|
|
||||||
//AT328 has 1KBytes EEPROM
|
//AT328 has 1KBytes EEPROM
|
||||||
|
#define CW_CAL 252
|
||||||
#define VFO_A_MODE 256
|
#define VFO_A_MODE 256
|
||||||
#define VFO_B_MODE 257
|
#define VFO_B_MODE 257
|
||||||
#define CW_DELAY 258
|
#define CW_DELAY 258
|
||||||
@ -232,7 +233,7 @@ int count = 0; //to generally count ticks, loops, etc
|
|||||||
char ritOn = 0;
|
char ritOn = 0;
|
||||||
char vfoActive = VFO_A;
|
char vfoActive = VFO_A;
|
||||||
int8_t meter_reading = 0; // a -1 on meter makes it invisible
|
int8_t meter_reading = 0; // a -1 on meter makes it invisible
|
||||||
unsigned long vfoA=7150000L, vfoB=14200000L, sideTone=800, usbCarrier;
|
unsigned long vfoA=7150000L, vfoB=14200000L, sideTone=800, usbCarrier, cwmCarrier;
|
||||||
unsigned long vfoA_eeprom, vfoB_eeprom; //for protect eeprom life
|
unsigned long vfoA_eeprom, vfoB_eeprom; //for protect eeprom life
|
||||||
unsigned long frequency, ritRxFrequency, ritTxFrequency; //frequency is the current frequency on the dial
|
unsigned long frequency, ritRxFrequency, ritTxFrequency; //frequency is the current frequency on the dial
|
||||||
|
|
||||||
@ -300,6 +301,10 @@ char inTx = 0; //it is set to 1 if in transmit mode (whatever the
|
|||||||
char splitOn = 0; //working split, uses VFO B as the transmit frequency
|
char splitOn = 0; //working split, uses VFO B as the transmit frequency
|
||||||
char keyDown = 0; //in cw mode, denotes the carrier is being transmitted
|
char keyDown = 0; //in cw mode, denotes the carrier is being transmitted
|
||||||
char isUSB = 0; //upper sideband was selected, this is reset to the default for the
|
char isUSB = 0; //upper sideband was selected, this is reset to the default for the
|
||||||
|
|
||||||
|
char cwMode = 0; //compatible original source, and extend mode //if cwMode == 0, mode check : isUSB, cwMode > 0, mode Check : cwMode
|
||||||
|
//iscwMode = 0 : ssbmode, 1 :cwl, 2 : cwu, 3 : cwn (none tx)
|
||||||
|
|
||||||
//frequency when it crosses the frequency border of 10 MHz
|
//frequency when it crosses the frequency border of 10 MHz
|
||||||
byte menuOn = 0; //set to 1 when the menu is being displayed, if a menu item sets it to zero, the menu is exited
|
byte menuOn = 0; //set to 1 when the menu is being displayed, if a menu item sets it to zero, the menu is exited
|
||||||
unsigned long cwTimeout = 0; //milliseconds to go before the cw transmit line is released and the radio goes back to rx mode
|
unsigned long cwTimeout = 0; //milliseconds to go before the cw transmit line is released and the radio goes back to rx mode
|
||||||
@ -310,6 +315,10 @@ boolean modeCalibrate = false;//this mode of menus shows extended menus to calib
|
|||||||
|
|
||||||
unsigned long beforeIdle_ProcessTime = 0; //for check Idle time
|
unsigned long beforeIdle_ProcessTime = 0; //for check Idle time
|
||||||
byte line2DisplayStatus = 0; //0:Clear, 1 : menu, 1: DisplayFrom Idle,
|
byte line2DisplayStatus = 0; //0:Clear, 1 : menu, 1: DisplayFrom Idle,
|
||||||
|
char lcdMeter[17];
|
||||||
|
|
||||||
|
byte isIFShift = 0; //1 = ifShift, 2 extend
|
||||||
|
long ifShiftValue = 0; //
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Below are the basic functions that control the uBitx. Understanding the functions before
|
* Below are the basic functions that control the uBitx. Understanding the functions before
|
||||||
@ -363,8 +372,10 @@ void setNextHamBandFreq(unsigned long f, char moveDirection)
|
|||||||
|
|
||||||
EEPROM.get(HAM_BAND_FREQS + 4 * findedIndex, resultFreq);
|
EEPROM.get(HAM_BAND_FREQS + 4 * findedIndex, resultFreq);
|
||||||
|
|
||||||
loadMode = (byte)(resultFreq >> 30);
|
//loadMode = (byte)(resultFreq >> 30);
|
||||||
resultFreq = resultFreq & 0x3FFFFFFF;
|
//resultFreq = resultFreq & 0x3FFFFFFF;
|
||||||
|
loadMode = (byte)(resultFreq >> 29);
|
||||||
|
resultFreq = resultFreq & 0x1FFFFFFF;
|
||||||
|
|
||||||
if ((resultFreq / 1000) < hamBandRange[(unsigned char)findedIndex][0] || (resultFreq / 1000) > hamBandRange[(unsigned char)findedIndex][1])
|
if ((resultFreq / 1000) < hamBandRange[(unsigned char)findedIndex][0] || (resultFreq / 1000) > hamBandRange[(unsigned char)findedIndex][1])
|
||||||
resultFreq = (unsigned long)(hamBandRange[(unsigned char)findedIndex][0]) * 1000;
|
resultFreq = (unsigned long)(hamBandRange[(unsigned char)findedIndex][0]) * 1000;
|
||||||
@ -375,7 +386,8 @@ void setNextHamBandFreq(unsigned long f, char moveDirection)
|
|||||||
|
|
||||||
void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) {
|
void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) {
|
||||||
if (bandIndex >= 0)
|
if (bandIndex >= 0)
|
||||||
EEPROM.put(HAM_BAND_FREQS + 4 * bandIndex, (f & 0x3FFFFFFF) | (mode << 30) );
|
//EEPROM.put(HAM_BAND_FREQS + 4 * bandIndex, (f & 0x3FFFFFFF) | (mode << 30) );
|
||||||
|
EEPROM.put(HAM_BAND_FREQS + 4 * bandIndex, (f & 0x1FFFFFFF) | (mode << 29) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -471,13 +483,27 @@ void setFrequency(unsigned long f){
|
|||||||
|
|
||||||
setTXFilters(f);
|
setTXFilters(f);
|
||||||
|
|
||||||
if (isUSB){
|
if (cwMode == 0)
|
||||||
si5351bx_setfreq(2, SECOND_OSC_USB - usbCarrier + f);
|
{
|
||||||
si5351bx_setfreq(1, SECOND_OSC_USB);
|
if (isUSB){
|
||||||
|
si5351bx_setfreq(2, SECOND_OSC_USB - usbCarrier + f + (isIFShift ? ifShiftValue : 0));
|
||||||
|
si5351bx_setfreq(1, SECOND_OSC_USB);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
si5351bx_setfreq(2, SECOND_OSC_LSB + usbCarrier + f + (isIFShift ? ifShiftValue : 0));
|
||||||
|
si5351bx_setfreq(1, SECOND_OSC_LSB);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else{
|
else
|
||||||
si5351bx_setfreq(2, SECOND_OSC_LSB + usbCarrier + f);
|
{
|
||||||
si5351bx_setfreq(1, SECOND_OSC_LSB);
|
if (cwMode == 1){ //CWL
|
||||||
|
si5351bx_setfreq(2, SECOND_OSC_LSB + cwmCarrier + f + (isIFShift ? ifShiftValue : 0));
|
||||||
|
si5351bx_setfreq(1, SECOND_OSC_LSB);
|
||||||
|
}
|
||||||
|
else{ //CWU
|
||||||
|
si5351bx_setfreq(2, SECOND_OSC_USB - cwmCarrier + f + (isIFShift ? ifShiftValue : 0));
|
||||||
|
si5351bx_setfreq(1, SECOND_OSC_USB);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
frequency = f;
|
frequency = f;
|
||||||
@ -530,10 +556,22 @@ void startTx(byte txMode, byte isDisplayUpdate){
|
|||||||
//shif the first oscillator to the tx frequency directly
|
//shif the first oscillator to the tx frequency directly
|
||||||
//the key up and key down will toggle the carrier unbalancing
|
//the key up and key down will toggle the carrier unbalancing
|
||||||
//the exact cw frequency is the tuned frequency + sidetone
|
//the exact cw frequency is the tuned frequency + sidetone
|
||||||
if (isUSB)
|
|
||||||
si5351bx_setfreq(2, frequency + sideTone);
|
if (cwMode == 0)
|
||||||
else
|
{
|
||||||
si5351bx_setfreq(2, frequency - sideTone);
|
if (isUSB)
|
||||||
|
si5351bx_setfreq(2, frequency + sideTone);
|
||||||
|
else
|
||||||
|
si5351bx_setfreq(2, frequency - sideTone);
|
||||||
|
}
|
||||||
|
else if (cwMode == 1) //CWL
|
||||||
|
{
|
||||||
|
si5351bx_setfreq(2, frequency - sideTone);
|
||||||
|
}
|
||||||
|
else //CWU
|
||||||
|
{
|
||||||
|
si5351bx_setfreq(2, frequency + sideTone);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reduce latency time when begin of CW mode
|
//reduce latency time when begin of CW mode
|
||||||
@ -545,7 +583,11 @@ void stopTx(){
|
|||||||
inTx = 0;
|
inTx = 0;
|
||||||
|
|
||||||
digitalWrite(TX_RX, 0); //turn off the tx
|
digitalWrite(TX_RX, 0); //turn off the tx
|
||||||
si5351bx_setfreq(0, usbCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
|
||||||
|
if (cwMode == 0)
|
||||||
|
si5351bx_setfreq(0, usbCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
else
|
||||||
|
si5351bx_setfreq(0, cwmCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
|
||||||
if (ritOn)
|
if (ritOn)
|
||||||
setFrequency(ritRxFrequency);
|
setFrequency(ritRxFrequency);
|
||||||
@ -713,6 +755,24 @@ void doRIT(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void doIFShift(){
|
||||||
|
int knob = enc_read();
|
||||||
|
unsigned long old_freq = frequency;
|
||||||
|
|
||||||
|
if (knob != 0)
|
||||||
|
{
|
||||||
|
if (knob < 0)
|
||||||
|
ifShiftValue -= 1l;
|
||||||
|
else if (knob > 0)
|
||||||
|
ifShiftValue += 1;
|
||||||
|
|
||||||
|
updateLine2Buffer(1);
|
||||||
|
setFrequency(frequency);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
save Frequency and mode to eeprom
|
save Frequency and mode to eeprom
|
||||||
*/
|
*/
|
||||||
@ -788,6 +848,7 @@ void initSettings(){
|
|||||||
if (EEPROM.read(VERSION_ADDRESS) != VERSION_NUM)
|
if (EEPROM.read(VERSION_ADDRESS) != VERSION_NUM)
|
||||||
EEPROM.write(VERSION_ADDRESS, VERSION_NUM);
|
EEPROM.write(VERSION_ADDRESS, VERSION_NUM);
|
||||||
|
|
||||||
|
EEPROM.get(CW_CAL, cwmCarrier);
|
||||||
|
|
||||||
//for Save VFO_A_MODE to eeprom
|
//for Save VFO_A_MODE to eeprom
|
||||||
//0: default, 1:not use, 2:LSB, 3:USB, 4:CW, 5:AM, 6:FM
|
//0: default, 1:not use, 2:LSB, 3:USB, 4:CW, 5:AM, 6:FM
|
||||||
@ -808,7 +869,7 @@ void initSettings(){
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Iambic_Key = true;
|
Iambic_Key = true;
|
||||||
if (cwKeyType = 1)
|
if (cwKeyType == 1)
|
||||||
keyerControl &= ~IAMBICB;
|
keyerControl &= ~IAMBICB;
|
||||||
else
|
else
|
||||||
keyerControl |= IAMBICB;
|
keyerControl |= IAMBICB;
|
||||||
@ -936,6 +997,9 @@ void initSettings(){
|
|||||||
//original code with modified by kd8cec
|
//original code with modified by kd8cec
|
||||||
if (usbCarrier > 12010000l || usbCarrier < 11990000l)
|
if (usbCarrier > 12010000l || usbCarrier < 11990000l)
|
||||||
usbCarrier = 11995000l;
|
usbCarrier = 11995000l;
|
||||||
|
|
||||||
|
if (cwmCarrier > 12010000l || cwmCarrier < 11990000l)
|
||||||
|
cwmCarrier = 11995000l;
|
||||||
|
|
||||||
if (vfoA > 35000000l || 3500000l > vfoA) {
|
if (vfoA > 35000000l || 3500000l > vfoA) {
|
||||||
vfoA = 7150000l;
|
vfoA = 7150000l;
|
||||||
@ -1020,7 +1084,7 @@ void setup()
|
|||||||
|
|
||||||
//Serial.begin(9600);
|
//Serial.begin(9600);
|
||||||
lcd.begin(16, 2);
|
lcd.begin(16, 2);
|
||||||
printLineF(1, F("CECBT v0.32"));
|
printLineF(1, F("CECBT v0.33"));
|
||||||
|
|
||||||
Init_Cat(38400, SERIAL_8N1);
|
Init_Cat(38400, SERIAL_8N1);
|
||||||
initMeter(); //not used in this build
|
initMeter(); //not used in this build
|
||||||
@ -1038,11 +1102,12 @@ void setup()
|
|||||||
}
|
}
|
||||||
|
|
||||||
initPorts();
|
initPorts();
|
||||||
|
|
||||||
|
byteToMode(vfoA_mode);
|
||||||
initOscillators();
|
initOscillators();
|
||||||
|
|
||||||
frequency = vfoA;
|
frequency = vfoA;
|
||||||
saveCheckFreq = frequency; //for auto save frequency
|
saveCheckFreq = frequency; //for auto save frequency
|
||||||
byteToMode(vfoA_mode);
|
|
||||||
setFrequency(vfoA);
|
setFrequency(vfoA);
|
||||||
updateDisplay();
|
updateDisplay();
|
||||||
|
|
||||||
@ -1106,10 +1171,12 @@ void loop(){
|
|||||||
if (!inTx){
|
if (!inTx){
|
||||||
if (ritOn)
|
if (ritOn)
|
||||||
doRIT();
|
doRIT();
|
||||||
|
//else if (isIFShift)
|
||||||
|
// doIFShift();
|
||||||
else
|
else
|
||||||
doTuningWithThresHold();
|
doTuningWithThresHold();
|
||||||
|
|
||||||
if (isCWAutoMode == 0 && beforeIdle_ProcessTime < millis() - 500) {
|
if (isCWAutoMode == 0 && beforeIdle_ProcessTime < millis() - 250) {
|
||||||
idle_process();
|
idle_process();
|
||||||
beforeIdle_ProcessTime = millis();
|
beforeIdle_ProcessTime = millis();
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@ void factory_alignment(){
|
|||||||
|
|
||||||
|
|
||||||
printLine2("#3:Test 3.5MHz");
|
printLine2("#3:Test 3.5MHz");
|
||||||
|
cwMode = 0;
|
||||||
isUSB = false;
|
isUSB = false;
|
||||||
setFrequency(3500000l);
|
setFrequency(3500000l);
|
||||||
updateDisplay();
|
updateDisplay();
|
||||||
@ -59,6 +60,7 @@ void factory_alignment(){
|
|||||||
btnWaitForClick();
|
btnWaitForClick();
|
||||||
printLine2("#5:Test 14MHz");
|
printLine2("#5:Test 14MHz");
|
||||||
|
|
||||||
|
cwMode = 0;
|
||||||
isUSB = true;
|
isUSB = true;
|
||||||
setFrequency(14000000l);
|
setFrequency(14000000l);
|
||||||
updateDisplay();
|
updateDisplay();
|
||||||
@ -80,6 +82,7 @@ void factory_alignment(){
|
|||||||
printLine2("Alignment done");
|
printLine2("Alignment done");
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
|
||||||
|
cwMode = 0;
|
||||||
isUSB = false;
|
isUSB = false;
|
||||||
setFrequency(7150000l);
|
setFrequency(7150000l);
|
||||||
updateDisplay();
|
updateDisplay();
|
||||||
|
@ -23,24 +23,55 @@ byte line2Buffer[16];
|
|||||||
//U14.150 +150khz
|
//U14.150 +150khz
|
||||||
int freqScrollPosition = 0;
|
int freqScrollPosition = 0;
|
||||||
//Example Line2 Optinal Display
|
//Example Line2 Optinal Display
|
||||||
void updateLine2Buffer()
|
//immediate execution, not call by scheulder
|
||||||
|
void updateLine2Buffer(char isDirectCall)
|
||||||
{
|
{
|
||||||
unsigned long tmpFreq = 0;
|
unsigned long tmpFreq = 0;
|
||||||
|
if (isDirectCall == 0)
|
||||||
if (ritOn)
|
|
||||||
{
|
{
|
||||||
line2Buffer[0] = 'R';
|
if (ritOn)
|
||||||
line2Buffer[1] = 'i';
|
{
|
||||||
line2Buffer[2] = 't';
|
line2Buffer[0] = 'R';
|
||||||
line2Buffer[3] = 'T';
|
line2Buffer[1] = 'i';
|
||||||
line2Buffer[4] = 'X';
|
line2Buffer[2] = 't';
|
||||||
line2Buffer[5] = ':';
|
line2Buffer[3] = 'T';
|
||||||
|
line2Buffer[4] = 'X';
|
||||||
|
line2Buffer[5] = ':';
|
||||||
|
|
||||||
|
//display frequency
|
||||||
|
tmpFreq = ritTxFrequency;
|
||||||
|
for (int i = 15; i >= 6; i--) {
|
||||||
|
if (tmpFreq > 0) {
|
||||||
|
if (i == 12 || i == 8) line2Buffer[i] = '.';
|
||||||
|
else {
|
||||||
|
line2Buffer[i] = tmpFreq % 10 + 0x30;
|
||||||
|
tmpFreq /= 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
line2Buffer[i] = ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vfoActive == VFO_B)
|
||||||
|
{
|
||||||
|
tmpFreq = vfoA;
|
||||||
|
//line2Buffer[0] = 'A';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmpFreq = vfoB;
|
||||||
|
//line2Buffer[0] = 'B';
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXAMPLE 1 & 2
|
||||||
|
//U14.150.100
|
||||||
//display frequency
|
//display frequency
|
||||||
tmpFreq = ritTxFrequency;
|
for (int i = 9; i >= 0; i--) {
|
||||||
for (int i = 15; i >= 6; i--) {
|
|
||||||
if (tmpFreq > 0) {
|
if (tmpFreq > 0) {
|
||||||
if (i == 12 || i == 8) line2Buffer[i] = '.';
|
if (i == 2 || i == 6) line2Buffer[i] = '.';
|
||||||
else {
|
else {
|
||||||
line2Buffer[i] = tmpFreq % 10 + 0x30;
|
line2Buffer[i] = tmpFreq % 10 + 0x30;
|
||||||
tmpFreq /= 10;
|
tmpFreq /= 10;
|
||||||
@ -49,106 +80,136 @@ void updateLine2Buffer()
|
|||||||
else
|
else
|
||||||
line2Buffer[i] = ' ';
|
line2Buffer[i] = ' ';
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vfoActive == VFO_B)
|
//EXAMPLE #1
|
||||||
{
|
if ((displayOption1 & 0x04) == 0x00)
|
||||||
tmpFreq = vfoA;
|
|
||||||
//line2Buffer[0] = 'A';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tmpFreq = vfoB;
|
|
||||||
//line2Buffer[0] = 'B';
|
|
||||||
}
|
|
||||||
|
|
||||||
// EXAMPLE 1 & 2
|
|
||||||
//U14.150.100
|
|
||||||
//display frequency
|
|
||||||
for (int i = 9; i >= 0; i--) {
|
|
||||||
if (tmpFreq > 0) {
|
|
||||||
if (i == 2 || i == 6) line2Buffer[i] = '.';
|
|
||||||
else {
|
|
||||||
line2Buffer[i] = tmpFreq % 10 + 0x30;
|
|
||||||
tmpFreq /= 10;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
line2Buffer[i] = ' ';
|
|
||||||
}
|
|
||||||
|
|
||||||
//EXAMPLE #1
|
|
||||||
if ((displayOption1 & 0x04) == 0x00)
|
|
||||||
line2Buffer[6] = 'k';
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//example #2
|
|
||||||
if (freqScrollPosition++ > 18)
|
|
||||||
{
|
|
||||||
line2Buffer[6] = 'k';
|
line2Buffer[6] = 'k';
|
||||||
if (freqScrollPosition > 25)
|
|
||||||
freqScrollPosition = -1;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
line2Buffer[10] = 'H';
|
//example #2
|
||||||
line2Buffer[11] = 'z';
|
if (freqScrollPosition++ > 18)
|
||||||
|
|
||||||
if (freqScrollPosition < 7)
|
|
||||||
{
|
{
|
||||||
for (int i = 11; i >= 0; i--)
|
line2Buffer[6] = 'k';
|
||||||
if (i - (7 - freqScrollPosition) >= 0)
|
if (freqScrollPosition > 25)
|
||||||
line2Buffer[i] = line2Buffer[i - (7 - freqScrollPosition)];
|
freqScrollPosition = -1;
|
||||||
else
|
|
||||||
line2Buffer[i] = ' ';
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 11; i++)
|
line2Buffer[10] = 'H';
|
||||||
if (i + (freqScrollPosition - 7) <= 11)
|
line2Buffer[11] = 'z';
|
||||||
line2Buffer[i] = line2Buffer[i + (freqScrollPosition - 7)];
|
|
||||||
else
|
if (freqScrollPosition < 7)
|
||||||
line2Buffer[i] = ' ';
|
{
|
||||||
|
for (int i = 11; i >= 0; i--)
|
||||||
|
if (i - (7 - freqScrollPosition) >= 0)
|
||||||
|
line2Buffer[i] = line2Buffer[i - (7 - freqScrollPosition)];
|
||||||
|
else
|
||||||
|
line2Buffer[i] = ' ';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 11; i++)
|
||||||
|
if (i + (freqScrollPosition - 7) <= 11)
|
||||||
|
line2Buffer[i] = line2Buffer[i + (freqScrollPosition - 7)];
|
||||||
|
else
|
||||||
|
line2Buffer[i] = ' ';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
line2Buffer[7] = ' ';
|
||||||
line2Buffer[7] = ' ';
|
} //check direct call by encoder
|
||||||
|
|
||||||
//Step
|
|
||||||
byte tmpStep = arTuneStep[tuneStepIndex -1];
|
if (isIFShift)
|
||||||
for (int i = 10; i >= 8; i--) {
|
{
|
||||||
if (tmpStep > 0) {
|
if (isDirectCall == 1)
|
||||||
line2Buffer[i] = tmpStep % 10 + 0x30;
|
for (int i = 0; i < 16; i++)
|
||||||
tmpStep /= 10;
|
line2Buffer[i] = ' ';
|
||||||
|
|
||||||
|
//IFShift Offset Value
|
||||||
|
line2Buffer[8] = 'I';
|
||||||
|
line2Buffer[9] = 'F';
|
||||||
|
|
||||||
|
if (ifShiftValue == 0)
|
||||||
|
{
|
||||||
|
line2Buffer[10] = 'S';
|
||||||
|
line2Buffer[11] = ':';
|
||||||
|
line2Buffer[12] = 'O';
|
||||||
|
line2Buffer[13] = 'F';
|
||||||
|
line2Buffer[14] = 'F';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
line2Buffer[i] = ' ';
|
{
|
||||||
}
|
line2Buffer[10] = ifShiftValue >= 0 ? '+' : 0;
|
||||||
line2Buffer[11] = 'H';
|
line2Buffer[11] = 0;
|
||||||
line2Buffer[12] = 'z';
|
line2Buffer[12] = ' ';
|
||||||
|
|
||||||
line2Buffer[13] = ' ';
|
//11, 12, 13, 14, 15
|
||||||
//if (
|
memset(b, 0, sizeof(b));
|
||||||
//Check CW Key cwKeyType = 0; //0: straight, 1 : iambica, 2: iambicb
|
ltoa(ifShiftValue, b, DEC);
|
||||||
if (cwKeyType == 0)
|
strncat(line2Buffer, b, 5);
|
||||||
{
|
}
|
||||||
line2Buffer[14] = 'S';
|
|
||||||
line2Buffer[15] = 'T';
|
if (isDirectCall == 1) //if call by encoder (not scheduler), immediate print value
|
||||||
}
|
printLine2(line2Buffer);
|
||||||
else if (cwKeyType == 1)
|
|
||||||
{
|
|
||||||
line2Buffer[14] = 'I';
|
|
||||||
line2Buffer[15] = 'A';
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
line2Buffer[14] = 'I';
|
if (isDirectCall != 0)
|
||||||
line2Buffer[15] = 'B';
|
return;
|
||||||
|
|
||||||
|
//Step
|
||||||
|
byte tmpStep = arTuneStep[tuneStepIndex -1];
|
||||||
|
for (int i = 10; i >= 8; i--) {
|
||||||
|
if (tmpStep > 0) {
|
||||||
|
line2Buffer[i] = tmpStep % 10 + 0x30;
|
||||||
|
tmpStep /= 10;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
line2Buffer[i] = ' ';
|
||||||
|
}
|
||||||
|
line2Buffer[11] = 'H';
|
||||||
|
line2Buffer[12] = 'z';
|
||||||
|
|
||||||
|
line2Buffer[13] = ' ';
|
||||||
|
//if (
|
||||||
|
//Check CW Key cwKeyType = 0; //0: straight, 1 : iambica, 2: iambicb
|
||||||
|
if (cwKeyType == 0)
|
||||||
|
{
|
||||||
|
line2Buffer[14] = 'S';
|
||||||
|
line2Buffer[15] = 'T';
|
||||||
|
}
|
||||||
|
else if (cwKeyType == 1)
|
||||||
|
{
|
||||||
|
line2Buffer[14] = 'I';
|
||||||
|
line2Buffer[15] = 'A';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
line2Buffer[14] = 'I';
|
||||||
|
line2Buffer[15] = 'B';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//meterType : 0 = S.Meter, 1 : P.Meter
|
||||||
|
void DisplayMeter(byte meterType, byte meterValue, char drawPosition)
|
||||||
|
{
|
||||||
|
drawMeter(meterValue); //call original source code
|
||||||
|
int lineNumber = 0;
|
||||||
|
if ((displayOption1 & 0x01) == 0x01)
|
||||||
|
lineNumber = 1;
|
||||||
|
|
||||||
|
lcd.setCursor(drawPosition, lineNumber);
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; i++) //meter 5 + +db 1 = 6
|
||||||
|
lcd.write(lcdMeter[i]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
byte testValue = 0;
|
||||||
|
char checkCount = 0;
|
||||||
void idle_process()
|
void idle_process()
|
||||||
{
|
{
|
||||||
//space for user graphic display
|
//space for user graphic display
|
||||||
@ -156,9 +217,20 @@ void idle_process()
|
|||||||
{
|
{
|
||||||
//if line2DisplayStatus == 0 <-- this condition is clear Line, you can display any message
|
//if line2DisplayStatus == 0 <-- this condition is clear Line, you can display any message
|
||||||
if (line2DisplayStatus == 0 || (((displayOption1 & 0x04) == 0x04) && line2DisplayStatus == 2)) {
|
if (line2DisplayStatus == 0 || (((displayOption1 & 0x04) == 0x04) && line2DisplayStatus == 2)) {
|
||||||
updateLine2Buffer();
|
if (checkCount++ > 1)
|
||||||
printLine2(line2Buffer);
|
{
|
||||||
line2DisplayStatus = 2;
|
updateLine2Buffer(0); //call by scheduler
|
||||||
|
printLine2(line2Buffer);
|
||||||
|
line2DisplayStatus = 2;
|
||||||
|
checkCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//EX for Meters
|
||||||
|
/*
|
||||||
|
DisplayMeter(0, testValue++, 7);
|
||||||
|
if (testValue > 30)
|
||||||
|
testValue = 0;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,6 +87,8 @@ void menuBand(int btn){
|
|||||||
stepChangeCount = 0;
|
stepChangeCount = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//setFrequency(frequency + 200000l);
|
||||||
}
|
}
|
||||||
else { //original source
|
else { //original source
|
||||||
if (knob < 0 && frequency > 3000000l)
|
if (knob < 0 && frequency > 3000000l)
|
||||||
@ -119,30 +121,56 @@ void menuBand(int btn){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Convert Mode, Number by KD8CEC
|
//Convert Mode, Number by KD8CEC
|
||||||
//0: default, 1:not use, 2:LSB, 3:USB, 4:CW, 5:AM, 6:FM
|
//0: default, 1:not use, 2:LSB, 3:USB, 4:CWL, 5:CWU, 6:FM
|
||||||
byte modeToByte(){
|
byte modeToByte(){
|
||||||
if (isUSB)
|
if (cwMode == 0)
|
||||||
return 3;
|
{
|
||||||
|
if (isUSB)
|
||||||
|
return 3;
|
||||||
|
else
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
else if (cwMode == 1)
|
||||||
|
{
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return 2;
|
{
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Convert Number to Mode by KD8CEC
|
//Convert Number to Mode by KD8CEC
|
||||||
void byteToMode(byte modeValue){
|
void byteToMode(byte modeValue){
|
||||||
if (modeValue == 3)
|
if (modeValue == 4)
|
||||||
isUSB = 1;
|
cwMode = 1;
|
||||||
|
else if (modeValue == 5)
|
||||||
|
cwMode = 2;
|
||||||
else
|
else
|
||||||
isUSB = 0;
|
{
|
||||||
|
cwMode = 0;
|
||||||
|
if (modeValue == 3)
|
||||||
|
isUSB = 1;
|
||||||
|
else
|
||||||
|
isUSB = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Convert Number to Mode by KD8CEC
|
//Convert Number to Mode by KD8CEC
|
||||||
void byteWithFreqToMode(byte modeValue){
|
void byteWithFreqToMode(byte modeValue){
|
||||||
if (modeValue == 3)
|
if (modeValue == 4)
|
||||||
isUSB = 1;
|
cwMode = 1;
|
||||||
else if (modeValue == 0) //Not Set
|
else if (modeValue == 5)
|
||||||
isUSB = (frequency > 10000000l) ? true : false;
|
cwMode = 2;
|
||||||
else
|
else {
|
||||||
isUSB = 0;
|
cwMode = 0;
|
||||||
|
if (modeValue == 3)
|
||||||
|
isUSB = 1;
|
||||||
|
else if (modeValue == 0) //Not Set
|
||||||
|
isUSB = (frequency > 10000000l) ? true : false;
|
||||||
|
else
|
||||||
|
isUSB = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//VFO Toggle and save VFO Information, modified by KD8CEC
|
//VFO Toggle and save VFO Information, modified by KD8CEC
|
||||||
@ -179,10 +207,11 @@ void menuVfoToggle(int btn, char isUseDelayTime)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ritDisable();
|
ritDisable();
|
||||||
|
setFrequency(frequency);
|
||||||
|
|
||||||
if (isUseDelayTime == 1) //Found Issue in wsjt-x Linux 32bit
|
if (isUseDelayTime == 1) //Found Issue in wsjt-x Linux 32bit
|
||||||
delay_background(500, 0);
|
delay_background(500, 0);
|
||||||
|
|
||||||
printLine2ClearAndUpdate();
|
printLine2ClearAndUpdate();
|
||||||
//exit the menu
|
//exit the menu
|
||||||
menuOn = 0;
|
menuOn = 0;
|
||||||
@ -212,6 +241,94 @@ void menuRitToggle(int btn){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void menuIFSToggle(int btn){
|
||||||
|
if (!btn){
|
||||||
|
if (isIFShift == 1)
|
||||||
|
printLineF2(F("IF Shift:On, Off?"));
|
||||||
|
else
|
||||||
|
printLineF2(F("IF Shift:Off, On?"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (isIFShift == 0){
|
||||||
|
printLineF2(F("IF Shift is ON"));
|
||||||
|
isIFShift = 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printLineF2(F("IF Shift is OFF"));
|
||||||
|
isIFShift = 0;
|
||||||
|
}
|
||||||
|
menuOn = 0;
|
||||||
|
delay_background(500, 0);
|
||||||
|
printLine2ClearAndUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
void menuIFSToggle(int btn){
|
||||||
|
int knob = 0;
|
||||||
|
char needApplyChangeValue = 1;
|
||||||
|
|
||||||
|
if (!btn){
|
||||||
|
if (isIFShift == 1)
|
||||||
|
printLineF2(F("IF Shift Change?"));
|
||||||
|
else
|
||||||
|
printLineF2(F("IF Shift:Off, On?"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (isIFShift == 0){
|
||||||
|
printLineF2(F("IF Shift is ON"));
|
||||||
|
delay_background(500, 0);
|
||||||
|
isIFShift = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
delay_background(500, 0);
|
||||||
|
updateLine2Buffer(1);
|
||||||
|
setFrequency(frequency);
|
||||||
|
|
||||||
|
//Off or Change Value
|
||||||
|
while(!btnDown() && digitalRead(PTT) == HIGH){
|
||||||
|
if (needApplyChangeValue ==1)
|
||||||
|
{
|
||||||
|
updateLine2Buffer(1);
|
||||||
|
setFrequency(frequency);
|
||||||
|
|
||||||
|
if (cwMode == 0)
|
||||||
|
si5351bx_setfreq(0, usbCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
else
|
||||||
|
si5351bx_setfreq(0, cwmCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
|
||||||
|
needApplyChangeValue = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
knob = enc_read();
|
||||||
|
if (knob != 0){
|
||||||
|
if (knob < 0)
|
||||||
|
ifShiftValue -= 1l;
|
||||||
|
else if (knob > 0)
|
||||||
|
ifShiftValue += 1;
|
||||||
|
|
||||||
|
needApplyChangeValue = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delay_background(500, 0); //for check Long Press function key
|
||||||
|
|
||||||
|
if (btnDown() || digitalRead(PTT) == LOW || ifShiftValue == 0)
|
||||||
|
{
|
||||||
|
isIFShift = 0;
|
||||||
|
printLineF2(F("IF Shift is OFF"));
|
||||||
|
setFrequency(frequency);
|
||||||
|
delay_background(500, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
menuOn = 0;
|
||||||
|
//delay_background(500, 0);
|
||||||
|
printLine2ClearAndUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
void menuSidebandToggle(int btn){
|
void menuSidebandToggle(int btn){
|
||||||
if (!btn){
|
if (!btn){
|
||||||
if (isUSB == true)
|
if (isUSB == true)
|
||||||
@ -220,6 +337,7 @@ void menuSidebandToggle(int btn){
|
|||||||
printLineF2(F("Select USB?"));
|
printLineF2(F("Select USB?"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
cwMode = 0;
|
||||||
if (isUSB == true){
|
if (isUSB == true){
|
||||||
isUSB = false;
|
isUSB = false;
|
||||||
printLineF2(F("LSB Selected"));
|
printLineF2(F("LSB Selected"));
|
||||||
@ -234,6 +352,107 @@ void menuSidebandToggle(int btn){
|
|||||||
menuOn = 0;
|
menuOn = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
void menuSelectMode(int btn){
|
||||||
|
int knob = 0;
|
||||||
|
int selectModeType = 0;
|
||||||
|
int beforeMode = 0;
|
||||||
|
int moveStep = 0;
|
||||||
|
|
||||||
|
if (!btn){
|
||||||
|
printLineF2(F("Select Mode?"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
delay_background(500, 0);
|
||||||
|
|
||||||
|
//LSB, USB, CWL, CWU
|
||||||
|
if (cwMode == 0 && isUSB == 0)
|
||||||
|
selectModeType = 0;
|
||||||
|
else if (cwMode == 0 && isUSB == 1)
|
||||||
|
selectModeType = 1;
|
||||||
|
else if (cwMode == 1)
|
||||||
|
selectModeType = 2;
|
||||||
|
else
|
||||||
|
selectModeType = 3;
|
||||||
|
|
||||||
|
beforeMode = selectModeType;
|
||||||
|
|
||||||
|
while(!btnDown() && digitalRead(PTT) == HIGH){
|
||||||
|
//Display Mode Name
|
||||||
|
printLineF1(F("LSB USB CWL CWU"));
|
||||||
|
if (selectModeType == 0)
|
||||||
|
printLineF1(F("LSB"));
|
||||||
|
else if (selectModeType == 1)
|
||||||
|
printLineF1(F("USB"));
|
||||||
|
else if (selectModeType == 2)
|
||||||
|
printLineF1(F("CWL"));
|
||||||
|
else if (selectModeType == 3)
|
||||||
|
printLineF1(F("CWU"));
|
||||||
|
|
||||||
|
knob = enc_read();
|
||||||
|
|
||||||
|
if (knob != 0)
|
||||||
|
{
|
||||||
|
moveStep += (knob > 0 ? 1 : -1);
|
||||||
|
if (moveStep < -3) {
|
||||||
|
if (selectModeType > 0)
|
||||||
|
selectModeType--;
|
||||||
|
|
||||||
|
moveStep = 0;
|
||||||
|
}
|
||||||
|
else if (moveStep > 3) {
|
||||||
|
if (selectModeType < 3)
|
||||||
|
selectModeType++;
|
||||||
|
|
||||||
|
moveStep = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Check_Cat(0); //To prevent disconnections
|
||||||
|
}
|
||||||
|
|
||||||
|
if (beforeMode != selectModeType) {
|
||||||
|
printLineF1(F("Changed Mode"));
|
||||||
|
|
||||||
|
if (selectModeType == 0) {
|
||||||
|
cwMode = 0; isUSB = 0;
|
||||||
|
}
|
||||||
|
else if (selectModeType == 1) {
|
||||||
|
cwMode = 0; isUSB = 1;
|
||||||
|
}
|
||||||
|
else if (selectModeType == 2) {
|
||||||
|
cwMode = 1;
|
||||||
|
}
|
||||||
|
else if (selectModeType == 3) {
|
||||||
|
cwMode = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Save Frequency & Mode Information
|
||||||
|
if (vfoActive == VFO_A)
|
||||||
|
{
|
||||||
|
vfoA = frequency;
|
||||||
|
vfoA_mode = modeToByte();
|
||||||
|
storeFrequencyAndMode(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vfoB = frequency;
|
||||||
|
vfoB_mode = modeToByte();
|
||||||
|
storeFrequencyAndMode(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cwMode == 0)
|
||||||
|
si5351bx_setfreq(0, usbCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
else
|
||||||
|
si5351bx_setfreq(0, cwmCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
|
||||||
|
setFrequency(frequency);
|
||||||
|
delay_background(500, 0);
|
||||||
|
printLine2ClearAndUpdate();
|
||||||
|
menuOn = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void menuSplitOnOff(int btn){
|
void menuSplitOnOff(int btn){
|
||||||
if (!btn){
|
if (!btn){
|
||||||
@ -259,8 +478,6 @@ void menuSplitOnOff(int btn){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
//Select CW Key Type by KD8CEC
|
//Select CW Key Type by KD8CEC
|
||||||
void menuSetupKeyType(int btn){
|
void menuSetupKeyType(int btn){
|
||||||
@ -303,14 +520,15 @@ void menuSetupKeyType(int btn){
|
|||||||
int knob = 0;
|
int knob = 0;
|
||||||
int selectedKeyType = 0;
|
int selectedKeyType = 0;
|
||||||
int moveStep = 0;
|
int moveStep = 0;
|
||||||
if (!btn && digitalRead(PTT) == HIGH){
|
if (!btn){
|
||||||
printLineF2(F("Change Key Type?"));
|
printLineF2(F("Change Key Type?"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printLineF2(F("Press PTT to set"));
|
printLineF2(F("Press to set Key"));
|
||||||
delay_background(500, 0);
|
delay_background(500, 0);
|
||||||
selectedKeyType = cwKeyType;
|
selectedKeyType = cwKeyType;
|
||||||
while(!btnDown() && digitalRead(PTT) == HIGH){
|
|
||||||
|
while(!btnDown()){
|
||||||
|
|
||||||
//Display Key Type
|
//Display Key Type
|
||||||
if (selectedKeyType == 0)
|
if (selectedKeyType == 0)
|
||||||
@ -325,12 +543,14 @@ void menuSetupKeyType(int btn){
|
|||||||
if (knob != 0)
|
if (knob != 0)
|
||||||
{
|
{
|
||||||
moveStep += (knob > 0 ? 1 : -1);
|
moveStep += (knob > 0 ? 1 : -1);
|
||||||
if (selectedKeyType > 0 && moveStep < -3) {
|
if (moveStep < -3) {
|
||||||
selectedKeyType--;
|
if (selectedKeyType > 0)
|
||||||
|
selectedKeyType--;
|
||||||
moveStep = 0;
|
moveStep = 0;
|
||||||
}
|
}
|
||||||
else if (selectedKeyType < 2 && moveStep > 3) {
|
else if (moveStep > 3) {
|
||||||
selectedKeyType++;
|
if (selectedKeyType < 2)
|
||||||
|
selectedKeyType++;
|
||||||
moveStep = 0;
|
moveStep = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -338,24 +558,21 @@ void menuSetupKeyType(int btn){
|
|||||||
Check_Cat(0); //To prevent disconnections
|
Check_Cat(0); //To prevent disconnections
|
||||||
}
|
}
|
||||||
|
|
||||||
//save the setting
|
printLineF2(F("CW Key Type set!"));
|
||||||
if (digitalRead(PTT) == LOW){
|
cwKeyType = selectedKeyType;
|
||||||
printLineF2(F("CW Key Type set!"));
|
EEPROM.put(CW_KEY_TYPE, cwKeyType);
|
||||||
cwKeyType = selectedKeyType;
|
|
||||||
EEPROM.put(CW_KEY_TYPE, cwKeyType);
|
|
||||||
|
|
||||||
if (cwKeyType == 0)
|
if (cwKeyType == 0)
|
||||||
Iambic_Key = false;
|
Iambic_Key = false;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Iambic_Key = true;
|
||||||
|
if (cwKeyType == 1)
|
||||||
|
keyerControl &= ~IAMBICB;
|
||||||
else
|
else
|
||||||
{
|
keyerControl |= IAMBICB;
|
||||||
Iambic_Key = true;
|
|
||||||
if (cwKeyType = 1)
|
|
||||||
keyerControl &= ~IAMBICB;
|
|
||||||
else
|
|
||||||
keyerControl |= IAMBICB;
|
|
||||||
}
|
|
||||||
delay_background(2000, 0);
|
|
||||||
}
|
}
|
||||||
|
delay_background(2000, 0);
|
||||||
|
|
||||||
printLine2ClearAndUpdate();
|
printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
menuOn = 0;
|
||||||
@ -517,7 +734,7 @@ void menuCWSpeed(int btn){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
printLineF1(F("Press PTT to set"));
|
printLineF1(F("Press to set WPm"));
|
||||||
strcpy(b, "WPM:");
|
strcpy(b, "WPM:");
|
||||||
itoa(wpm,c, 10);
|
itoa(wpm,c, 10);
|
||||||
strcat(b, c);
|
strcat(b, c);
|
||||||
@ -547,12 +764,12 @@ void menuCWSpeed(int btn){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//save the setting
|
//save the setting
|
||||||
if (digitalRead(PTT) == LOW){
|
//if (digitalRead(PTT) == LOW){
|
||||||
printLineF2(F("CW Speed set!"));
|
printLineF2(F("CW Speed set!"));
|
||||||
cwSpeed = 1200/wpm;
|
cwSpeed = 1200/wpm;
|
||||||
EEPROM.put(CW_SPEED, cwSpeed);
|
EEPROM.put(CW_SPEED, cwSpeed);
|
||||||
delay_background(2000, 0);
|
delay_background(2000, 0);
|
||||||
}
|
//}
|
||||||
printLine2ClearAndUpdate();
|
printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
menuOn = 0;
|
||||||
}
|
}
|
||||||
@ -592,7 +809,7 @@ void menuSetupCwDelay(int btn){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
printLineF1(F("Press PTT to set"));
|
printLineF1(F("Press, set Delay"));
|
||||||
strcpy(b, "DELAY:");
|
strcpy(b, "DELAY:");
|
||||||
itoa(tmpCWDelay,c, 10);
|
itoa(tmpCWDelay,c, 10);
|
||||||
strcat(b, c);
|
strcat(b, c);
|
||||||
@ -620,12 +837,12 @@ void menuSetupCwDelay(int btn){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//save the setting
|
//save the setting
|
||||||
if (digitalRead(PTT) == LOW){
|
//if (digitalRead(PTT) == LOW){
|
||||||
printLineF2(F("CW Delay set!"));
|
printLineF2(F("CW Delay set!"));
|
||||||
cwDelayTime = tmpCWDelay / 10;
|
cwDelayTime = tmpCWDelay / 10;
|
||||||
EEPROM.put(CW_DELAY, cwDelayTime);
|
EEPROM.put(CW_DELAY, cwDelayTime);
|
||||||
delay_background(2000, 0);
|
delay_background(2000, 0);
|
||||||
}
|
//}
|
||||||
printLine2ClearAndUpdate();
|
printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
menuOn = 0;
|
||||||
}
|
}
|
||||||
@ -641,7 +858,7 @@ void menuSetupTXCWInterval(int btn){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
printLineF1(F("Press PTT to set"));
|
printLineF1(F("Press, set Delay"));
|
||||||
strcpy(b, "Start Delay:");
|
strcpy(b, "Start Delay:");
|
||||||
itoa(tmpTXCWInterval,c, 10);
|
itoa(tmpTXCWInterval,c, 10);
|
||||||
strcat(b, c);
|
strcat(b, c);
|
||||||
@ -669,12 +886,12 @@ void menuSetupTXCWInterval(int btn){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//save the setting
|
//save the setting
|
||||||
if (digitalRead(PTT) == LOW){
|
//if (digitalRead(PTT) == LOW){
|
||||||
printLineF2(F("CW Start set!"));
|
printLineF2(F("CW Start set!"));
|
||||||
delayBeforeCWStartTime = tmpTXCWInterval / 2;
|
delayBeforeCWStartTime = tmpTXCWInterval / 2;
|
||||||
EEPROM.put(CW_START, delayBeforeCWStartTime);
|
EEPROM.put(CW_START, delayBeforeCWStartTime);
|
||||||
delay_background(2000, 0);
|
delay_background(2000, 0);
|
||||||
}
|
//}
|
||||||
printLine2ClearAndUpdate();
|
printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
menuOn = 0;
|
||||||
}
|
}
|
||||||
@ -709,6 +926,7 @@ void factoryCalibration(int btn){
|
|||||||
|
|
||||||
calibration = 0;
|
calibration = 0;
|
||||||
|
|
||||||
|
cwMode = 0;
|
||||||
isUSB = true;
|
isUSB = true;
|
||||||
|
|
||||||
//turn off the second local oscillator and the bfo
|
//turn off the second local oscillator and the bfo
|
||||||
@ -837,7 +1055,7 @@ void printCarrierFreq(unsigned long freq){
|
|||||||
strcat(c, ".");
|
strcat(c, ".");
|
||||||
strncat(c, &b[2], 3);
|
strncat(c, &b[2], 3);
|
||||||
strcat(c, ".");
|
strcat(c, ".");
|
||||||
strncat(c, &b[5], 1);
|
strncat(c, &b[5], 3);
|
||||||
printLine2(c);
|
printLine2(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -889,12 +1107,71 @@ void menuSetupCarrier(int btn){
|
|||||||
else
|
else
|
||||||
usbCarrier = prevCarrier;
|
usbCarrier = prevCarrier;
|
||||||
|
|
||||||
si5351bx_setfreq(0, usbCarrier);
|
//si5351bx_setfreq(0, usbCarrier);
|
||||||
|
if (cwMode == 0)
|
||||||
|
si5351bx_setfreq(0, usbCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
else
|
||||||
|
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
printLine2ClearAndUpdate();
|
printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
menuOn = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Append by KD8CEC
|
||||||
|
void menuSetupCWCarrier(int btn){
|
||||||
|
int knob = 0;
|
||||||
|
unsigned long prevCarrier;
|
||||||
|
|
||||||
|
if (!btn){
|
||||||
|
printLineF2(F("Set CW RX BFO"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
prevCarrier = cwmCarrier;
|
||||||
|
printLineF1(F("PTT to confirm. "));
|
||||||
|
delay_background(1000, 0);
|
||||||
|
|
||||||
|
si5351bx_setfreq(0, cwmCarrier);
|
||||||
|
printCarrierFreq(cwmCarrier);
|
||||||
|
|
||||||
|
//disable all clock 1 and clock 2
|
||||||
|
while (digitalRead(PTT) == HIGH && !btnDown())
|
||||||
|
{
|
||||||
|
knob = enc_read();
|
||||||
|
|
||||||
|
if (knob > 0)
|
||||||
|
cwmCarrier -= 5;
|
||||||
|
else if (knob < 0)
|
||||||
|
cwmCarrier += 5;
|
||||||
|
else
|
||||||
|
continue; //don't update the frequency or the display
|
||||||
|
|
||||||
|
si5351bx_setfreq(0, cwmCarrier);
|
||||||
|
printCarrierFreq(cwmCarrier);
|
||||||
|
|
||||||
|
Check_Cat(0); //To prevent disconnections
|
||||||
|
delay(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
//save the setting
|
||||||
|
if (digitalRead(PTT) == LOW){
|
||||||
|
printLineF2(F("Carrier set!"));
|
||||||
|
EEPROM.put(CW_CAL, cwmCarrier);
|
||||||
|
delay_background(1000, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
cwmCarrier = prevCarrier;
|
||||||
|
|
||||||
|
if (cwMode == 0)
|
||||||
|
si5351bx_setfreq(0, usbCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
else
|
||||||
|
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
|
||||||
|
setFrequency(frequency);
|
||||||
|
printLine2ClearAndUpdate();
|
||||||
|
menuOn = 0;
|
||||||
|
}
|
||||||
//Modified by KD8CEC
|
//Modified by KD8CEC
|
||||||
void menuSetupCwTone(int btn){
|
void menuSetupCwTone(int btn){
|
||||||
int knob = 0;
|
int knob = 0;
|
||||||
@ -998,7 +1275,7 @@ void doMenu(){
|
|||||||
//ADJUST TUNE STEP
|
//ADJUST TUNE STEP
|
||||||
if (btnDownTimeCount > (PRESS_ADJUST_TUNE / 50))
|
if (btnDownTimeCount > (PRESS_ADJUST_TUNE / 50))
|
||||||
{
|
{
|
||||||
printLineF1(F("Press Key to set"));
|
printLineF1(F("Press to set step"));
|
||||||
isNeedDisplay = 1; //check to need display for display current value
|
isNeedDisplay = 1; //check to need display for display current value
|
||||||
|
|
||||||
while (digitalRead(PTT) == HIGH && !btnDown())
|
while (digitalRead(PTT) == HIGH && !btnDown())
|
||||||
@ -1051,9 +1328,9 @@ void doMenu(){
|
|||||||
btnState = btnDown();
|
btnState = btnDown();
|
||||||
|
|
||||||
if (i > 0){
|
if (i > 0){
|
||||||
if (modeCalibrate && select + i < 180)
|
if (modeCalibrate && select + i < 200)
|
||||||
select += i;
|
select += i;
|
||||||
if (!modeCalibrate && select + i < 80)
|
if (!modeCalibrate && select + i < 100)
|
||||||
select += i;
|
select += i;
|
||||||
}
|
}
|
||||||
//if (i < 0 && select - i >= 0)
|
//if (i < 0 && select - i >= 0)
|
||||||
@ -1065,38 +1342,42 @@ void doMenu(){
|
|||||||
else if (select < 10)
|
else if (select < 10)
|
||||||
menuBand(btnState);
|
menuBand(btnState);
|
||||||
else if (select < 20)
|
else if (select < 20)
|
||||||
menuRitToggle(btnState);
|
|
||||||
else if (select < 30)
|
|
||||||
menuVfoToggle(btnState, 1);
|
menuVfoToggle(btnState, 1);
|
||||||
|
else if (select < 30)
|
||||||
|
menuSelectMode(btnState);
|
||||||
else if (select < 40)
|
else if (select < 40)
|
||||||
menuSidebandToggle(btnState);
|
menuRitToggle(btnState);
|
||||||
else if (select < 50)
|
else if (select < 50)
|
||||||
menuCWSpeed(btnState);
|
menuIFSToggle(btnState);
|
||||||
else if (select < 60)
|
else if (select < 60)
|
||||||
menuCWAutoKey(btnState);
|
menuCWSpeed(btnState);
|
||||||
else if (select < 70)
|
else if (select < 70)
|
||||||
|
menuSplitOnOff(btnState); //SplitOn / off
|
||||||
|
else if (select < 80)
|
||||||
|
menuCWAutoKey(btnState);
|
||||||
|
else if (select < 90)
|
||||||
menuSetup(btnState);
|
menuSetup(btnState);
|
||||||
else if (select < 80 && !modeCalibrate)
|
else if (select < 100)
|
||||||
menuExit(btnState);
|
menuExit(btnState);
|
||||||
else if (select < 90 && modeCalibrate)
|
|
||||||
menuSetupCalibration(btnState); //crystal
|
|
||||||
else if (select < 100 && modeCalibrate)
|
|
||||||
menuSetupCarrier(btnState); //lsb
|
|
||||||
else if (select < 110 && modeCalibrate)
|
else if (select < 110 && modeCalibrate)
|
||||||
menuSetupCwTone(btnState);
|
menuSetupCalibration(btnState); //crystal
|
||||||
else if (select < 120 && modeCalibrate)
|
else if (select < 120 && modeCalibrate)
|
||||||
menuSetupCwDelay(btnState);
|
menuSetupCarrier(btnState); //lsb
|
||||||
else if (select < 130 && modeCalibrate)
|
else if (select < 130 && modeCalibrate)
|
||||||
menuSetupTXCWInterval(btnState);
|
menuSetupCWCarrier(btnState); //lsb
|
||||||
else if (select < 140 && modeCalibrate)
|
else if (select < 140 && modeCalibrate)
|
||||||
menuSetupKeyType(btnState);
|
menuSetupCwTone(btnState);
|
||||||
else if (select < 150 && modeCalibrate)
|
else if (select < 150 && modeCalibrate)
|
||||||
menuADCMonitor(btnState);
|
menuSetupCwDelay(btnState);
|
||||||
else if (select < 160 && modeCalibrate)
|
else if (select < 160 && modeCalibrate)
|
||||||
menuSplitOnOff(btnState); //TX OFF / ON
|
menuSetupTXCWInterval(btnState);
|
||||||
else if (select < 170 && modeCalibrate)
|
else if (select < 170 && modeCalibrate)
|
||||||
menuTxOnOff(btnState, 0x01); //TX OFF / ON
|
menuSetupKeyType(btnState);
|
||||||
else if (select < 180 && modeCalibrate)
|
else if (select < 180 && modeCalibrate)
|
||||||
|
menuADCMonitor(btnState);
|
||||||
|
else if (select < 190 && modeCalibrate)
|
||||||
|
menuTxOnOff(btnState, 0x01); //TX OFF / ON
|
||||||
|
else if (select < 200 && modeCalibrate)
|
||||||
menuExit(btnState);
|
menuExit(btnState);
|
||||||
|
|
||||||
Check_Cat(0); //To prevent disconnections
|
Check_Cat(0); //To prevent disconnections
|
||||||
|
@ -109,7 +109,11 @@ void initOscillators(){
|
|||||||
//initialize the SI5351
|
//initialize the SI5351
|
||||||
si5351bx_init();
|
si5351bx_init();
|
||||||
si5351bx_vcoa = (SI5351BX_XTAL * SI5351BX_MSA) + calibration; // apply the calibration correction factor
|
si5351bx_vcoa = (SI5351BX_XTAL * SI5351BX_MSA) + calibration; // apply the calibration correction factor
|
||||||
si5351bx_setfreq(0, usbCarrier);
|
|
||||||
|
if (cwMode == 0)
|
||||||
|
si5351bx_setfreq(0, usbCarrier + (isIFShift ? ifShiftValue : 0));
|
||||||
|
else
|
||||||
|
si5351bx_setfreq(0, cwmCarrier + (isIFShift ? ifShiftValue : 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@ int btnDown(){
|
|||||||
* The current reading of the meter is assembled in the string called meter
|
* The current reading of the meter is assembled in the string called meter
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//char meter[17];
|
|
||||||
|
|
||||||
|
/*
|
||||||
const PROGMEM uint8_t s_meter_bitmap[] = {
|
const PROGMEM uint8_t s_meter_bitmap[] = {
|
||||||
B00000,B00000,B00000,B00000,B00000,B00100,B00100,B11011,
|
B00000,B00000,B00000,B00000,B00000,B00100,B00100,B11011,
|
||||||
B10000,B10000,B10000,B10000,B10100,B10100,B10100,B11011,
|
B10000,B10000,B10000,B10000,B10100,B10100,B10100,B11011,
|
||||||
@ -35,7 +35,18 @@ const PROGMEM uint8_t s_meter_bitmap[] = {
|
|||||||
B00010,B00010,B00010,B00010,B00110,B00110,B00110,B11011,
|
B00010,B00010,B00010,B00010,B00110,B00110,B00110,B11011,
|
||||||
B00001,B00001,B00001,B00001,B00101,B00101,B00101,B11011
|
B00001,B00001,B00001,B00001,B00101,B00101,B00101,B11011
|
||||||
};
|
};
|
||||||
PGM_P ps_meter_bitmap = reinterpret_cast<PGM_P>(s_meter_bitmap);
|
*/
|
||||||
|
|
||||||
|
const PROGMEM uint8_t meters_bitmap[] = {
|
||||||
|
B10000, B10000, B10000, B10000, B10000, B10000, B10000, B10000 , //custom 1
|
||||||
|
B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000 , //custom 2
|
||||||
|
B11100, B11100, B11100, B11100, B11100, B11100, B11100, B11100 , //custom 3
|
||||||
|
B11110, B11110, B11110, B11110, B11110, B11110, B11110, B11110 , //custom 4
|
||||||
|
B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111 , //custom 5
|
||||||
|
B01000, B11100, B01000, B00000, B10111, B10101, B10101, B10111 //custom 6
|
||||||
|
};
|
||||||
|
|
||||||
|
PGM_P p_metes_bitmap = reinterpret_cast<PGM_P>(meters_bitmap);
|
||||||
|
|
||||||
const PROGMEM uint8_t lock_bitmap[8] = {
|
const PROGMEM uint8_t lock_bitmap[8] = {
|
||||||
0b01110,
|
0b01110,
|
||||||
@ -60,38 +71,56 @@ void initMeter(){
|
|||||||
lcd.createChar(0, tmpbytes);
|
lcd.createChar(0, tmpbytes);
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
tmpbytes[i] = pgm_read_byte(ps_meter_bitmap + i);
|
tmpbytes[i] = pgm_read_byte(p_metes_bitmap + i);
|
||||||
lcd.createChar(1, tmpbytes);
|
lcd.createChar(1, tmpbytes);
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
tmpbytes[i] = pgm_read_byte(ps_meter_bitmap + i + 8);
|
tmpbytes[i] = pgm_read_byte(p_metes_bitmap + i + 8);
|
||||||
lcd.createChar(2, tmpbytes);
|
lcd.createChar(2, tmpbytes);
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
tmpbytes[i] = pgm_read_byte(ps_meter_bitmap + i + 16);
|
tmpbytes[i] = pgm_read_byte(p_metes_bitmap + i + 16);
|
||||||
lcd.createChar(3, tmpbytes);
|
lcd.createChar(3, tmpbytes);
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
tmpbytes[i] = pgm_read_byte(ps_meter_bitmap + i + 24);
|
tmpbytes[i] = pgm_read_byte(p_metes_bitmap + i + 24);
|
||||||
lcd.createChar(4, tmpbytes);
|
lcd.createChar(4, tmpbytes);
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
tmpbytes[i] = pgm_read_byte(ps_meter_bitmap + i + 28);
|
tmpbytes[i] = pgm_read_byte(p_metes_bitmap + i + 32);
|
||||||
lcd.createChar(5, tmpbytes);
|
lcd.createChar(5, tmpbytes);
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
tmpbytes[i] = pgm_read_byte(ps_meter_bitmap + i + 32);
|
tmpbytes[i] = pgm_read_byte(p_metes_bitmap + i + 40);
|
||||||
lcd.createChar(6, tmpbytes);
|
lcd.createChar(6, tmpbytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
//by KD8CEC
|
||||||
* The meter is drawn with special characters.
|
//0 ~ 25 : 30 over : + 10
|
||||||
* character 1 is used to simple draw the blocks of the scale of the meter
|
void drawMeter(int needle) {
|
||||||
* characters 2 to 6 are used to draw the needle in positions 1 to within the block
|
//5Char + O over
|
||||||
* This displays a meter from 0 to 100, -1 displays nothing
|
int drawCharLength = needle / 5;
|
||||||
*/
|
int drawCharLengthLast = needle % 5;
|
||||||
|
int i;
|
||||||
|
|
||||||
/*
|
for (i = 0; i < 5; i++) {
|
||||||
|
if (needle >= 5)
|
||||||
|
lcdMeter[i] = 5; //full
|
||||||
|
else if (needle > 0)
|
||||||
|
lcdMeter[i] = needle; //full
|
||||||
|
else //0
|
||||||
|
lcdMeter[i] = 0x20;
|
||||||
|
|
||||||
|
needle -= 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needle > 0)
|
||||||
|
lcdMeter[5] = 6;
|
||||||
|
else
|
||||||
|
lcdMeter[5] = 0x20;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
void drawMeter(int8_t needle){
|
void drawMeter(int8_t needle){
|
||||||
int16_t best, i, s;
|
int16_t best, i, s;
|
||||||
|
|
||||||
@ -101,19 +130,18 @@ void drawMeter(int8_t needle){
|
|||||||
s = (needle * 4)/10;
|
s = (needle * 4)/10;
|
||||||
for (i = 0; i < 8; i++){
|
for (i = 0; i < 8; i++){
|
||||||
if (s >= 5)
|
if (s >= 5)
|
||||||
meter[i] = 1;
|
lcdMeter[i] = 1;
|
||||||
else if (s >= 0)
|
else if (s >= 0)
|
||||||
meter[i] = 2 + s;
|
lcdMeter[i] = 2 + s;
|
||||||
else
|
else
|
||||||
meter[i] = 1;
|
lcdMeter[i] = 1;
|
||||||
s = s - 5;
|
s = s - 5;
|
||||||
}
|
}
|
||||||
if (needle >= 40)
|
if (needle >= 40)
|
||||||
meter[i-1] = 6;
|
lcdMeter[i-1] = 6;
|
||||||
meter[i] = 0;
|
lcdMeter[i] = 0;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// The generic routine to display one line on the LCD
|
// The generic routine to display one line on the LCD
|
||||||
void printLine(unsigned char linenmbr, const char *c) {
|
void printLine(unsigned char linenmbr, const char *c) {
|
||||||
if ((displayOption1 & 0x01) == 0x01)
|
if ((displayOption1 & 0x01) == 0x01)
|
||||||
@ -234,10 +262,21 @@ void updateDisplay() {
|
|||||||
if (ritOn)
|
if (ritOn)
|
||||||
strcpy(c, "RIT ");
|
strcpy(c, "RIT ");
|
||||||
else {
|
else {
|
||||||
if (isUSB)
|
if (cwMode == 0)
|
||||||
strcpy(c, "USB ");
|
{
|
||||||
|
if (isUSB)
|
||||||
|
strcpy(c, "USB ");
|
||||||
|
else
|
||||||
|
strcpy(c, "LSB ");
|
||||||
|
}
|
||||||
|
else if (cwMode == 1)
|
||||||
|
{
|
||||||
|
strcpy(c, "CWL ");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
strcpy(c, "LSB ");
|
{
|
||||||
|
strcpy(c, "CWU ");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (vfoActive == VFO_A) // VFO A is active
|
if (vfoActive == VFO_A) // VFO A is active
|
||||||
strcat(c, "A:");
|
strcat(c, "A:");
|
||||||
|
Loading…
Reference in New Issue
Block a user