Compare commits
8 Commits
version0.3
...
version0.3
Author | SHA1 | Date | |
---|---|---|---|
|
60777178a8 | ||
|
dd68b38454 | ||
|
d229a10092 | ||
|
3d019cdd44 | ||
|
4745790dfa | ||
|
85832de034 | ||
|
4830db78cb | ||
|
5eca64d2a9 |
@@ -365,6 +365,11 @@ void controlAutoCW(){
|
|||||||
//check interval time, if you want adjust interval between chars, modify below
|
//check interval time, if you want adjust interval between chars, modify below
|
||||||
if (isAutoCWHold == 0 && (millis() - autoCWbeforeTime > cwSpeed * 3))
|
if (isAutoCWHold == 0 && (millis() - autoCWbeforeTime > cwSpeed * 3))
|
||||||
{
|
{
|
||||||
|
if (!inTx){ //if not TX Status, change RX -> TX
|
||||||
|
keyDown = 0;
|
||||||
|
startTx(TX_CW, 0); //disable updateDisplay Command for reduce latency time
|
||||||
|
}
|
||||||
|
|
||||||
sendCWChar(EEPROM.read(CW_AUTO_DATA + autoCWSendCharIndex++));
|
sendCWChar(EEPROM.read(CW_AUTO_DATA + autoCWSendCharIndex++));
|
||||||
|
|
||||||
if (autoCWSendCharIndex > autoCWSendCharEndIndex) { //finish auto cw send
|
if (autoCWSendCharIndex > autoCWSendCharEndIndex) { //finish auto cw send
|
||||||
|
@@ -160,7 +160,8 @@ int count = 0; //to generally count ticks, loops, etc
|
|||||||
#define TX_TUNE_TYPE 261 //
|
#define TX_TUNE_TYPE 261 //
|
||||||
#define HAM_BAND_RANGE 262 //FROM (2BYTE) TO (2BYTE) * 10 = 40byte
|
#define HAM_BAND_RANGE 262 //FROM (2BYTE) TO (2BYTE) * 10 = 40byte
|
||||||
#define HAM_BAND_FREQS 302 //40, 1 BAND = 4Byte most bit is mode
|
#define HAM_BAND_FREQS 302 //40, 1 BAND = 4Byte most bit is mode
|
||||||
#define TUNING_STEP 342 //TUNING STEP * 6 (index 1 + STEPS 5)
|
#define TUNING_STEP 342 //TUNING STEP * 6 (index 1 + STEPS 5) //1STEP :
|
||||||
|
|
||||||
|
|
||||||
//for reduce cw key error, eeprom address
|
//for reduce cw key error, eeprom address
|
||||||
#define CW_ADC_MOST_BIT1 348 //most 2bits of DOT_TO , DOT_FROM, ST_TO, ST_FROM
|
#define CW_ADC_MOST_BIT1 348 //most 2bits of DOT_TO , DOT_FROM, ST_TO, ST_FROM
|
||||||
@@ -260,7 +261,7 @@ byte sideToneSub = 0;
|
|||||||
//DialLock
|
//DialLock
|
||||||
byte isDialLock = 0; //000000[0]vfoB [0]vfoA 0Bit : A, 1Bit : B
|
byte isDialLock = 0; //000000[0]vfoB [0]vfoA 0Bit : A, 1Bit : B
|
||||||
byte isTxType = 0; //000000[0 - isSplit] [0 - isTXStop]
|
byte isTxType = 0; //000000[0 - isSplit] [0 - isTXStop]
|
||||||
byte arTuneStep[5];
|
long arTuneStep[5];
|
||||||
byte tuneStepIndex; //default Value 0, start Offset is 0 because of check new user
|
byte tuneStepIndex; //default Value 0, start Offset is 0 because of check new user
|
||||||
|
|
||||||
byte displayOption1 = 0;
|
byte displayOption1 = 0;
|
||||||
@@ -315,6 +316,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
|
||||||
@@ -377,7 +382,7 @@ void setNextHamBandFreq(unsigned long f, char moveDirection)
|
|||||||
resultFreq = (unsigned long)(hamBandRange[(unsigned char)findedIndex][0]) * 1000;
|
resultFreq = (unsigned long)(hamBandRange[(unsigned char)findedIndex][0]) * 1000;
|
||||||
|
|
||||||
setFrequency(resultFreq);
|
setFrequency(resultFreq);
|
||||||
byteWithFreqToMode(loadMode);
|
byteToMode(loadMode, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) {
|
void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) {
|
||||||
@@ -482,22 +487,22 @@ void setFrequency(unsigned long f){
|
|||||||
if (cwMode == 0)
|
if (cwMode == 0)
|
||||||
{
|
{
|
||||||
if (isUSB){
|
if (isUSB){
|
||||||
si5351bx_setfreq(2, SECOND_OSC_USB - usbCarrier + f);
|
si5351bx_setfreq(2, SECOND_OSC_USB - usbCarrier + f + (isIFShift ? ifShiftValue : 0));
|
||||||
si5351bx_setfreq(1, SECOND_OSC_USB);
|
si5351bx_setfreq(1, SECOND_OSC_USB);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
si5351bx_setfreq(2, SECOND_OSC_LSB + usbCarrier + f);
|
si5351bx_setfreq(2, SECOND_OSC_LSB + usbCarrier + f + (isIFShift ? ifShiftValue : 0));
|
||||||
si5351bx_setfreq(1, SECOND_OSC_LSB);
|
si5351bx_setfreq(1, SECOND_OSC_LSB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (cwMode == 1){ //CWL
|
if (cwMode == 1){ //CWL
|
||||||
si5351bx_setfreq(2, SECOND_OSC_LSB + cwmCarrier + f);
|
si5351bx_setfreq(2, SECOND_OSC_LSB + cwmCarrier + f + (isIFShift ? ifShiftValue : 0));
|
||||||
si5351bx_setfreq(1, SECOND_OSC_LSB);
|
si5351bx_setfreq(1, SECOND_OSC_LSB);
|
||||||
}
|
}
|
||||||
else{ //CWU
|
else{ //CWU
|
||||||
si5351bx_setfreq(2, SECOND_OSC_USB - cwmCarrier + f);
|
si5351bx_setfreq(2, SECOND_OSC_USB - cwmCarrier + f + (isIFShift ? ifShiftValue : 0));
|
||||||
si5351bx_setfreq(1, SECOND_OSC_USB);
|
si5351bx_setfreq(1, SECOND_OSC_USB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -532,12 +537,12 @@ void startTx(byte txMode, byte isDisplayUpdate){
|
|||||||
if (vfoActive == VFO_B) {
|
if (vfoActive == VFO_B) {
|
||||||
vfoActive = VFO_A;
|
vfoActive = VFO_A;
|
||||||
frequency = vfoA;
|
frequency = vfoA;
|
||||||
byteToMode(vfoA_mode);
|
byteToMode(vfoA_mode, 0);
|
||||||
}
|
}
|
||||||
else if (vfoActive == VFO_A){
|
else if (vfoActive == VFO_A){
|
||||||
vfoActive = VFO_B;
|
vfoActive = VFO_B;
|
||||||
frequency = vfoB;
|
frequency = vfoB;
|
||||||
byteToMode(vfoB_mode);
|
byteToMode(vfoB_mode, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
@@ -581,9 +586,9 @@ void stopTx(){
|
|||||||
digitalWrite(TX_RX, 0); //turn off the tx
|
digitalWrite(TX_RX, 0); //turn off the tx
|
||||||
|
|
||||||
if (cwMode == 0)
|
if (cwMode == 0)
|
||||||
si5351bx_setfreq(0, usbCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
si5351bx_setfreq(0, usbCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
else
|
else
|
||||||
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
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);
|
||||||
@@ -592,12 +597,12 @@ void stopTx(){
|
|||||||
if (vfoActive == VFO_B){
|
if (vfoActive == VFO_B){
|
||||||
vfoActive = VFO_A;
|
vfoActive = VFO_A;
|
||||||
frequency = vfoA;
|
frequency = vfoA;
|
||||||
byteToMode(vfoA_mode);
|
byteToMode(vfoA_mode, 0);
|
||||||
}
|
}
|
||||||
else if (vfoActive == VFO_A){
|
else if (vfoActive == VFO_A){
|
||||||
vfoActive = VFO_B;
|
vfoActive = VFO_B;
|
||||||
frequency = vfoB;
|
frequency = vfoB;
|
||||||
byteToMode(vfoB_mode);
|
byteToMode(vfoB_mode, 0);
|
||||||
}
|
}
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
} //end of else
|
} //end of else
|
||||||
@@ -750,9 +755,8 @@ void doRIT(){
|
|||||||
updateDisplay();
|
updateDisplay();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
/**
|
save Frequency and mode to eeprom for Auto Save with protected eeprom cycle, by kd8cec
|
||||||
save Frequency and mode to eeprom
|
|
||||||
*/
|
*/
|
||||||
void storeFrequencyAndMode(byte saveType)
|
void storeFrequencyAndMode(byte saveType)
|
||||||
{
|
{
|
||||||
@@ -784,6 +788,22 @@ void storeFrequencyAndMode(byte saveType)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//calculate step size from 1 byte, compatible uBITX Manager, by KD8CEC
|
||||||
|
unsigned int byteToSteps(byte srcByte) {
|
||||||
|
byte powerVal = (byte)(srcByte >> 6);
|
||||||
|
unsigned int baseVal = srcByte & 0x3F;
|
||||||
|
|
||||||
|
if (powerVal == 1)
|
||||||
|
return baseVal * 10;
|
||||||
|
else if (powerVal == 2)
|
||||||
|
return baseVal * 100;
|
||||||
|
else if (powerVal == 3)
|
||||||
|
return baseVal * 1000;
|
||||||
|
else
|
||||||
|
return baseVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The settings are read from EEPROM. The first time around, the values may not be
|
* The settings are read from EEPROM. The first time around, the values may not be
|
||||||
* present or out of range, in this case, some intelligent defaults are copied into the
|
* present or out of range, in this case, some intelligent defaults are copied into the
|
||||||
@@ -847,7 +867,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;
|
||||||
@@ -904,8 +924,8 @@ void initSettings(){
|
|||||||
findedValidValueCount = 0;
|
findedValidValueCount = 0;
|
||||||
EEPROM.get(TUNING_STEP, tuneStepIndex);
|
EEPROM.get(TUNING_STEP, tuneStepIndex);
|
||||||
for (byte i = 0; i < 5; i++) {
|
for (byte i = 0; i < 5; i++) {
|
||||||
arTuneStep[i] = EEPROM.read(TUNING_STEP + i + 1);
|
arTuneStep[i] = byteToSteps(EEPROM.read(TUNING_STEP + i + 1));
|
||||||
if (arTuneStep[i] >= 1 && arTuneStep[i] < 251) //Maximum 250 for check valid Value
|
if (arTuneStep[i] >= 1 && arTuneStep[i] <= 60000) //Maximum 650 for check valid Value
|
||||||
findedValidValueCount++;
|
findedValidValueCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -981,12 +1001,12 @@ void initSettings(){
|
|||||||
|
|
||||||
if (vfoA > 35000000l || 3500000l > vfoA) {
|
if (vfoA > 35000000l || 3500000l > vfoA) {
|
||||||
vfoA = 7150000l;
|
vfoA = 7150000l;
|
||||||
vfoA_mode = 2;
|
vfoA_mode = 2; //LSB
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vfoB > 35000000l || 3500000l > vfoB) {
|
if (vfoB > 35000000l || 3500000l > vfoB) {
|
||||||
vfoB = 14150000l;
|
vfoB = 14150000l;
|
||||||
vfoB_mode = 3;
|
vfoB_mode = 3; //USB
|
||||||
}
|
}
|
||||||
//end of original code section
|
//end of original code section
|
||||||
|
|
||||||
@@ -1062,7 +1082,7 @@ void setup()
|
|||||||
|
|
||||||
//Serial.begin(9600);
|
//Serial.begin(9600);
|
||||||
lcd.begin(16, 2);
|
lcd.begin(16, 2);
|
||||||
printLineF(1, F("CECBT v0.33"));
|
printLineF(1, F("CECBT v0.35"));
|
||||||
|
|
||||||
Init_Cat(38400, SERIAL_8N1);
|
Init_Cat(38400, SERIAL_8N1);
|
||||||
initMeter(); //not used in this build
|
initMeter(); //not used in this build
|
||||||
@@ -1081,7 +1101,7 @@ void setup()
|
|||||||
|
|
||||||
initPorts();
|
initPorts();
|
||||||
|
|
||||||
byteToMode(vfoA_mode);
|
byteToMode(vfoA_mode, 0);
|
||||||
initOscillators();
|
initOscillators();
|
||||||
|
|
||||||
frequency = vfoA;
|
frequency = vfoA;
|
||||||
@@ -1094,13 +1114,11 @@ void setup()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The loop checks for keydown, ptt, function button and tuning.
|
|
||||||
*/
|
|
||||||
//for debug
|
//for debug
|
||||||
int dbgCnt = 0;
|
int dbgCnt = 0;
|
||||||
byte flasher = 0;
|
byte flasher = 0;
|
||||||
|
|
||||||
|
//Auto save Frequency and Mode with Protected eeprom life by KD8CEC
|
||||||
void checkAutoSaveFreqMode()
|
void checkAutoSaveFreqMode()
|
||||||
{
|
{
|
||||||
//when tx or ritOn, disable auto save
|
//when tx or ritOn, disable auto save
|
||||||
@@ -1149,10 +1167,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();
|
||||||
}
|
}
|
||||||
|
@@ -17,16 +17,18 @@
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
byte line2Buffer[16];
|
char line2Buffer[16];
|
||||||
//KD8CEC 200Hz ST
|
//KD8CEC 200Hz ST
|
||||||
//L14.150 200Hz ST
|
//L14.150 200Hz ST
|
||||||
//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)
|
if (ritOn)
|
||||||
{
|
{
|
||||||
line2Buffer[0] = 'R';
|
line2Buffer[0] = 'R';
|
||||||
@@ -51,8 +53,11 @@ void updateLine2Buffer()
|
|||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
} //end of ritOn display
|
||||||
|
|
||||||
|
//======================================================
|
||||||
|
//other VFO display
|
||||||
|
//======================================================
|
||||||
if (vfoActive == VFO_B)
|
if (vfoActive == VFO_B)
|
||||||
{
|
{
|
||||||
tmpFreq = vfoA;
|
tmpFreq = vfoA;
|
||||||
@@ -80,18 +85,18 @@ void updateLine2Buffer()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//EXAMPLE #1
|
//EXAMPLE #1
|
||||||
if ((displayOption1 & 0x04) == 0x00)
|
if ((displayOption1 & 0x04) == 0x00) //none scroll display
|
||||||
line2Buffer[6] = 'k';
|
line2Buffer[6] = 'k';
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//example #2
|
//example #2
|
||||||
if (freqScrollPosition++ > 18)
|
if (freqScrollPosition++ > 18) //none scroll display time
|
||||||
{
|
{
|
||||||
line2Buffer[6] = 'k';
|
line2Buffer[6] = 'k';
|
||||||
if (freqScrollPosition > 25)
|
if (freqScrollPosition > 25)
|
||||||
freqScrollPosition = -1;
|
freqScrollPosition = -1;
|
||||||
}
|
}
|
||||||
else
|
else //scroll frequency
|
||||||
{
|
{
|
||||||
line2Buffer[10] = 'H';
|
line2Buffer[10] = 'H';
|
||||||
line2Buffer[11] = 'z';
|
line2Buffer[11] = 'z';
|
||||||
@@ -113,21 +118,75 @@ void updateLine2Buffer()
|
|||||||
line2Buffer[i] = ' ';
|
line2Buffer[i] = ' ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} //scroll
|
||||||
line2Buffer[7] = ' ';
|
|
||||||
|
|
||||||
|
line2Buffer[7] = ' ';
|
||||||
|
} //check direct call by encoder
|
||||||
|
|
||||||
|
if (isIFShift)
|
||||||
|
{
|
||||||
|
if (isDirectCall == 1)
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
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
|
||||||
|
{
|
||||||
|
line2Buffer[10] = ifShiftValue >= 0 ? '+' : 0;
|
||||||
|
line2Buffer[11] = 0;
|
||||||
|
line2Buffer[12] = ' ';
|
||||||
|
|
||||||
|
//11, 12, 13, 14, 15
|
||||||
|
memset(b, 0, sizeof(b));
|
||||||
|
ltoa(ifShiftValue, b, DEC);
|
||||||
|
strncat(line2Buffer, b, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDirectCall == 1) //if call by encoder (not scheduler), immediate print value
|
||||||
|
printLine2(line2Buffer);
|
||||||
|
} // end of display IF
|
||||||
|
else // step display
|
||||||
|
{
|
||||||
|
if (isDirectCall != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
memset(&line2Buffer[8], ' ', 8);
|
||||||
//Step
|
//Step
|
||||||
byte tmpStep = arTuneStep[tuneStepIndex -1];
|
long tmpStep = arTuneStep[tuneStepIndex -1];
|
||||||
for (int i = 10; i >= 8; i--) {
|
|
||||||
|
byte isStepKhz = 0;
|
||||||
|
if (tmpStep >= 1000)
|
||||||
|
{
|
||||||
|
isStepKhz = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 10; i >= 8 - isStepKhz; i--) {
|
||||||
if (tmpStep > 0) {
|
if (tmpStep > 0) {
|
||||||
line2Buffer[i] = tmpStep % 10 + 0x30;
|
line2Buffer[i + isStepKhz] = tmpStep % 10 + 0x30;
|
||||||
tmpStep /= 10;
|
tmpStep /= 10;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
line2Buffer[i] = ' ';
|
line2Buffer[i +isStepKhz] = ' ';
|
||||||
}
|
}
|
||||||
|
//if (isStepKhz == 1)
|
||||||
|
// line2Buffer[10] = 'k';
|
||||||
|
|
||||||
|
if (isStepKhz == 0)
|
||||||
|
{
|
||||||
line2Buffer[11] = 'H';
|
line2Buffer[11] = 'H';
|
||||||
line2Buffer[12] = 'z';
|
line2Buffer[12] = 'z';
|
||||||
|
}
|
||||||
|
|
||||||
line2Buffer[13] = ' ';
|
line2Buffer[13] = ' ';
|
||||||
//if (
|
//if (
|
||||||
@@ -147,18 +206,51 @@ void updateLine2Buffer()
|
|||||||
line2Buffer[14] = 'I';
|
line2Buffer[14] = 'I';
|
||||||
line2Buffer[15] = 'B';
|
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
|
||||||
if (menuOn == 0)
|
if (menuOn == 0)
|
||||||
{
|
{
|
||||||
|
if ((displayOption1 & 0x10) == 0x10) //always empty topline
|
||||||
|
return;
|
||||||
|
|
||||||
//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)
|
||||||
|
{
|
||||||
|
updateLine2Buffer(0); //call by scheduler
|
||||||
printLine2(line2Buffer);
|
printLine2(line2Buffer);
|
||||||
line2DisplayStatus = 2;
|
line2DisplayStatus = 2;
|
||||||
|
checkCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//EX for Meters
|
||||||
|
/*
|
||||||
|
DisplayMeter(0, testValue++, 7);
|
||||||
|
if (testValue > 30)
|
||||||
|
testValue = 0;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,36 @@
|
|||||||
#define printLineF1(x) (printLineF(1, x))
|
#define printLineF1(x) (printLineF(1, x))
|
||||||
#define printLineF2(x) (printLineF(0, x))
|
#define printLineF2(x) (printLineF(0, x))
|
||||||
|
|
||||||
|
void FrequencyToVFO(byte isSaveFreq)
|
||||||
|
{
|
||||||
|
//Save Frequency & Mode Information
|
||||||
|
if (vfoActive == VFO_A)
|
||||||
|
{
|
||||||
|
vfoA = frequency;
|
||||||
|
vfoA_mode = modeToByte();
|
||||||
|
|
||||||
|
if (isSaveFreq)
|
||||||
|
storeFrequencyAndMode(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vfoB = frequency;
|
||||||
|
vfoB_mode = modeToByte();
|
||||||
|
|
||||||
|
if (isSaveFreq)
|
||||||
|
storeFrequencyAndMode(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menuClearExit(int delayTime)
|
||||||
|
{
|
||||||
|
if (delayTime > 0)
|
||||||
|
delay_background(delayTime, 0);
|
||||||
|
|
||||||
|
printLine2ClearAndUpdate();
|
||||||
|
menuOn = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//Ham band move by KD8CEC
|
//Ham band move by KD8CEC
|
||||||
void menuBand(int btn){
|
void menuBand(int btn){
|
||||||
int knob = 0;
|
int knob = 0;
|
||||||
@@ -27,8 +57,7 @@ void menuBand(int btn){
|
|||||||
printLineF2(F("Press to confirm"));
|
printLineF2(F("Press to confirm"));
|
||||||
//wait for the button menu select button to be lifted)
|
//wait for the button menu select button to be lifted)
|
||||||
while (btnDown()) {
|
while (btnDown()) {
|
||||||
delay(50);
|
delay_background(50, 0);
|
||||||
Check_Cat(0); //To prevent disconnections
|
|
||||||
if (btnPressCount++ > 20) {
|
if (btnPressCount++ > 20) {
|
||||||
btnPressCount = 0;
|
btnPressCount = 0;
|
||||||
if (tuneTXType > 0) { //Just toggle 0 <-> 2, if tuneTXType is 100, 100 -> 0 -> 2
|
if (tuneTXType > 0) { //Just toggle 0 <-> 2, if tuneTXType is 100, 100 -> 0 -> 2
|
||||||
@@ -57,23 +86,13 @@ void menuBand(int btn){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(50);
|
//delay(50);
|
||||||
ritDisable();
|
ritDisable();
|
||||||
|
|
||||||
while(!btnDown()){
|
while(!btnDown()){
|
||||||
|
|
||||||
knob = enc_read();
|
knob = enc_read();
|
||||||
if (knob != 0){
|
if (knob != 0){
|
||||||
/*
|
|
||||||
if (band > 3 && knob < 0)
|
|
||||||
band--;
|
|
||||||
if (band < 30 && knob > 0)
|
|
||||||
band++;
|
|
||||||
if (band > 10)
|
|
||||||
isUSB = true;
|
|
||||||
else
|
|
||||||
isUSB = false;
|
|
||||||
setFrequency(((unsigned long)band * 1000000l) + offset); */
|
|
||||||
if (tuneTXType == 2 || tuneTXType == 3 || tuneTXType == 102 || tuneTXType == 103) { //only ham band move
|
if (tuneTXType == 2 || tuneTXType == 3 || tuneTXType == 102 || tuneTXType == 103) { //only ham band move
|
||||||
if (knob < 0) {
|
if (knob < 0) {
|
||||||
if (stepChangeCount-- < -3) {
|
if (stepChangeCount-- < -3) {
|
||||||
@@ -87,7 +106,7 @@ void menuBand(int btn){
|
|||||||
stepChangeCount = 0;
|
stepChangeCount = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} //end of only ham band move
|
||||||
else { //original source
|
else { //original source
|
||||||
if (knob < 0 && frequency > 3000000l)
|
if (knob < 0 && frequency > 3000000l)
|
||||||
setFrequency(frequency - 200000l);
|
setFrequency(frequency - 200000l);
|
||||||
@@ -103,19 +122,21 @@ void menuBand(int btn){
|
|||||||
updateDisplay();
|
updateDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(20);
|
delay_background(20, 0);
|
||||||
Check_Cat(0); //To prevent disconnections
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
while(btnDown()) {
|
while(btnDown()) {
|
||||||
delay(50);
|
delay(50);
|
||||||
Check_Cat(0); //To prevent disconnections
|
Check_Cat(0); //To prevent disconnections
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
FrequencyToVFO(1);
|
||||||
|
|
||||||
delay(50);
|
//printLine2ClearAndUpdate();
|
||||||
|
//delay_background(500, 0);
|
||||||
printLine2ClearAndUpdate();
|
//menuOn = 0;
|
||||||
menuOn = 0;
|
menuClearExit(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Convert Mode, Number by KD8CEC
|
//Convert Mode, Number by KD8CEC
|
||||||
@@ -139,7 +160,9 @@ byte modeToByte(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Convert Number to Mode by KD8CEC
|
//Convert Number to Mode by KD8CEC
|
||||||
void byteToMode(byte modeValue){
|
//autoSetModebyFreq : 0
|
||||||
|
//autoSetModebyFreq : 1, if (modValue is not set, set mode by frequency)
|
||||||
|
void byteToMode(byte modeValue, byte autoSetModebyFreq){
|
||||||
if (modeValue == 4)
|
if (modeValue == 4)
|
||||||
cwMode = 1;
|
cwMode = 1;
|
||||||
else if (modeValue == 5)
|
else if (modeValue == 5)
|
||||||
@@ -149,11 +172,14 @@ void byteToMode(byte modeValue){
|
|||||||
cwMode = 0;
|
cwMode = 0;
|
||||||
if (modeValue == 3)
|
if (modeValue == 3)
|
||||||
isUSB = 1;
|
isUSB = 1;
|
||||||
|
else if (autoSetModebyFreq == 1 && (modeValue == 0))
|
||||||
|
isUSB = (frequency > 10000000l) ? true : false;
|
||||||
else
|
else
|
||||||
isUSB = 0;
|
isUSB = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
//Convert Number to Mode by KD8CEC
|
//Convert Number to Mode by KD8CEC
|
||||||
void byteWithFreqToMode(byte modeValue){
|
void byteWithFreqToMode(byte modeValue){
|
||||||
if (modeValue == 4)
|
if (modeValue == 4)
|
||||||
@@ -170,99 +196,71 @@ void byteWithFreqToMode(byte modeValue){
|
|||||||
isUSB = 0;
|
isUSB = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void menuIFSSetup(int btn){
|
||||||
|
int knob = 0;
|
||||||
|
char needApplyChangeValue = 1;
|
||||||
|
|
||||||
//VFO Toggle and save VFO Information, modified by KD8CEC
|
|
||||||
void menuVfoToggle(int btn, char isUseDelayTime)
|
|
||||||
{
|
|
||||||
if (!btn){
|
if (!btn){
|
||||||
if (vfoActive == VFO_A)
|
if (isIFShift == 1)
|
||||||
printLineF2(F("Select VFO B?"));
|
printLineF2(F("IF Shift Change?"));
|
||||||
else
|
else
|
||||||
printLineF2(F("Select VFO A?"));
|
printLineF2(F("IF Shift:Off, On?"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (vfoActive == VFO_B){
|
//if (isIFShift == 0){
|
||||||
vfoB = frequency;
|
//printLineF2(F("IF Shift is ON"));
|
||||||
vfoB_mode = modeToByte();
|
//delay_background(500, 0);
|
||||||
storeFrequencyAndMode(2); //vfoB -> eeprom
|
isIFShift = 1;
|
||||||
|
//}
|
||||||
|
|
||||||
vfoActive = VFO_A;
|
|
||||||
frequency = vfoA;
|
|
||||||
saveCheckFreq = frequency;
|
|
||||||
byteToMode(vfoA_mode);
|
|
||||||
printLineF2(F("Selected VFO A"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
vfoA = frequency;
|
|
||||||
vfoA_mode = modeToByte();
|
|
||||||
storeFrequencyAndMode(1); //vfoA -> eeprom
|
|
||||||
|
|
||||||
vfoActive = VFO_B;
|
|
||||||
frequency = vfoB;
|
|
||||||
saveCheckFreq = frequency;
|
|
||||||
byteToMode(vfoB_mode);
|
|
||||||
printLineF2(F("Selected VFO B"));
|
|
||||||
}
|
|
||||||
|
|
||||||
ritDisable();
|
|
||||||
|
|
||||||
if (isUseDelayTime == 1) //Found Issue in wsjt-x Linux 32bit
|
|
||||||
delay_background(500, 0);
|
delay_background(500, 0);
|
||||||
|
updateLine2Buffer(1);
|
||||||
|
setFrequency(frequency);
|
||||||
|
|
||||||
printLine2ClearAndUpdate();
|
//Off or Change Value
|
||||||
//exit the menu
|
while(!btnDown() ){
|
||||||
menuOn = 0;
|
if (needApplyChangeValue ==1)
|
||||||
}
|
{
|
||||||
}
|
updateLine2Buffer(1);
|
||||||
|
setFrequency(frequency);
|
||||||
|
|
||||||
void menuRitToggle(int btn){
|
if (cwMode == 0)
|
||||||
if (!btn){
|
si5351bx_setfreq(0, usbCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
if (ritOn == 1)
|
|
||||||
printLineF2(F("RIT:On, Off?"));
|
|
||||||
else
|
else
|
||||||
printLineF2(F("RIT:Off, On?"));
|
si5351bx_setfreq(0, cwmCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (ritOn == 0){
|
|
||||||
printLineF2(F("RIT is ON"));
|
|
||||||
//enable RIT so the current frequency is used at transmit
|
|
||||||
ritEnable(frequency);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
printLineF2(F("RIT is OFF"));
|
|
||||||
ritDisable();
|
|
||||||
}
|
|
||||||
menuOn = 0;
|
|
||||||
delay_background(500, 0);
|
|
||||||
printLine2ClearAndUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
needApplyChangeValue = 0;
|
||||||
void menuSidebandToggle(int btn){
|
|
||||||
if (!btn){
|
|
||||||
if (isUSB == true)
|
|
||||||
printLineF2(F("Select LSB?"));
|
|
||||||
else
|
|
||||||
printLineF2(F("Select USB?"));
|
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
cwMode = 0;
|
knob = enc_read();
|
||||||
if (isUSB == true){
|
if (knob != 0){
|
||||||
isUSB = false;
|
if (knob < 0)
|
||||||
printLineF2(F("LSB Selected"));
|
ifShiftValue -= 50l;
|
||||||
|
else if (knob > 0)
|
||||||
|
ifShiftValue += 50;
|
||||||
|
|
||||||
|
needApplyChangeValue = 1;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
isUSB = true;
|
|
||||||
printLineF2(F("USB Selected"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delay_background(500, 0); //for check Long Press function key
|
||||||
|
|
||||||
|
if (btnDown() || ifShiftValue == 0)
|
||||||
|
{
|
||||||
|
isIFShift = 0;
|
||||||
|
printLineF2(F("IF Shift is OFF"));
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
delay_background(500, 0);
|
delay_background(500, 0);
|
||||||
printLine2ClearAndUpdate();
|
}
|
||||||
menuOn = 0;
|
|
||||||
|
//menuOn = 0;
|
||||||
|
//printLine2ClearAndUpdate();
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
void menuSelectMode(int btn){
|
void menuSelectMode(int btn){
|
||||||
int knob = 0;
|
int knob = 0;
|
||||||
int selectModeType = 0;
|
int selectModeType = 0;
|
||||||
@@ -289,6 +287,7 @@ void menuSelectMode(int btn){
|
|||||||
|
|
||||||
while(!btnDown() && digitalRead(PTT) == HIGH){
|
while(!btnDown() && digitalRead(PTT) == HIGH){
|
||||||
//Display Mode Name
|
//Display Mode Name
|
||||||
|
printLineF1(F("LSB USB CWL CWU"));
|
||||||
if (selectModeType == 0)
|
if (selectModeType == 0)
|
||||||
printLineF1(F("LSB"));
|
printLineF1(F("LSB"));
|
||||||
else if (selectModeType == 1)
|
else if (selectModeType == 1)
|
||||||
@@ -321,8 +320,7 @@ void menuSelectMode(int btn){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (beforeMode != selectModeType) {
|
if (beforeMode != selectModeType) {
|
||||||
printLineF1(F("Changed Mode"));
|
//printLineF1(F("Changed Mode"));
|
||||||
|
|
||||||
if (selectModeType == 0) {
|
if (selectModeType == 0) {
|
||||||
cwMode = 0; isUSB = 0;
|
cwMode = 0; isUSB = 0;
|
||||||
}
|
}
|
||||||
@@ -336,111 +334,37 @@ void menuSelectMode(int btn){
|
|||||||
cwMode = 2;
|
cwMode = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Save Frequency & Mode Information
|
FrequencyToVFO(1);
|
||||||
if (vfoActive == VFO_A)
|
|
||||||
{
|
|
||||||
vfoA = frequency;
|
|
||||||
vfoA_mode = modeToByte();
|
|
||||||
storeFrequencyAndMode(1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vfoB = frequency;
|
|
||||||
vfoB_mode = modeToByte();
|
|
||||||
storeFrequencyAndMode(2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cwMode == 0)
|
if (cwMode == 0)
|
||||||
si5351bx_setfreq(0, usbCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
si5351bx_setfreq(0, usbCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
else
|
else
|
||||||
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
si5351bx_setfreq(0, cwmCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
delay_background(500, 0);
|
|
||||||
printLine2ClearAndUpdate();
|
//delay_background(500, 0);
|
||||||
menuOn = 0;
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void menuSplitOnOff(int btn){
|
|
||||||
if (!btn){
|
|
||||||
if (splitOn == 0)
|
|
||||||
printLineF2(F("Split On?"));
|
|
||||||
else
|
|
||||||
printLineF2(F("Split Off?"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (splitOn == 1){
|
|
||||||
splitOn = 0;
|
|
||||||
printLineF2(F("Split Off!"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
splitOn = 1;
|
|
||||||
if (ritOn == 1)
|
|
||||||
ritOn = 0;
|
|
||||||
printLineF2(F("Split On!"));
|
|
||||||
}
|
|
||||||
delay_background(500, 0);
|
|
||||||
printLine2ClearAndUpdate();
|
|
||||||
menuOn = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
//Select CW Key Type by KD8CEC
|
|
||||||
void menuSetupKeyType(int btn){
|
|
||||||
if (!btn && digitalRead(PTT) == HIGH){
|
|
||||||
if (Iambic_Key)
|
|
||||||
printLineF2(F("Key: Straight?"));
|
|
||||||
else
|
|
||||||
printLineF2(F("Key: Fn=A, PTT=B"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (Iambic_Key)
|
|
||||||
{
|
|
||||||
printLineF2(F("Straight Key!"));
|
|
||||||
Iambic_Key = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Iambic_Key = true;
|
|
||||||
if (btn)
|
|
||||||
{
|
|
||||||
keyerControl &= ~IAMBICB;
|
|
||||||
printLineF2(F("IAMBICA Key!"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
keyerControl |= IAMBICB;
|
|
||||||
printLineF2(F("IAMBICB Key!"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delay_background(500, 0);
|
|
||||||
printLine2ClearAndUpdate();
|
|
||||||
menuOn = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
//Select CW Key Type by KD8CEC
|
//Select CW Key Type by KD8CEC
|
||||||
void menuSetupKeyType(int btn){
|
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)
|
||||||
@@ -470,8 +394,6 @@ void menuSetupKeyType(int btn){
|
|||||||
Check_Cat(0); //To prevent disconnections
|
Check_Cat(0); //To prevent disconnections
|
||||||
}
|
}
|
||||||
|
|
||||||
//save the setting
|
|
||||||
if (digitalRead(PTT) == LOW){
|
|
||||||
printLineF2(F("CW Key Type set!"));
|
printLineF2(F("CW Key Type set!"));
|
||||||
cwKeyType = selectedKeyType;
|
cwKeyType = selectedKeyType;
|
||||||
EEPROM.put(CW_KEY_TYPE, cwKeyType);
|
EEPROM.put(CW_KEY_TYPE, cwKeyType);
|
||||||
@@ -481,16 +403,16 @@ void menuSetupKeyType(int btn){
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Iambic_Key = true;
|
Iambic_Key = true;
|
||||||
if (cwKeyType = 1)
|
if (cwKeyType == 1)
|
||||||
keyerControl &= ~IAMBICB;
|
keyerControl &= ~IAMBICB;
|
||||||
else
|
else
|
||||||
keyerControl |= IAMBICB;
|
keyerControl |= IAMBICB;
|
||||||
}
|
}
|
||||||
delay_background(2000, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
printLine2ClearAndUpdate();
|
//delay_background(2000, 0);
|
||||||
menuOn = 0;
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -570,10 +492,109 @@ void menuADCMonitor(int btn){
|
|||||||
delay_background(200, 0);
|
delay_background(200, 0);
|
||||||
} //end of while
|
} //end of while
|
||||||
|
|
||||||
printLine2ClearAndUpdate();
|
//printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//VFO Toggle and save VFO Information, modified by KD8CEC
|
||||||
|
void menuVfoToggle(int btn, char isUseDelayTime)
|
||||||
|
{
|
||||||
|
if (!btn){
|
||||||
|
if (vfoActive == VFO_A)
|
||||||
|
printLineF2(F("Select VFO B?"));
|
||||||
|
else
|
||||||
|
printLineF2(F("Select VFO A?"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
FrequencyToVFO(1);
|
||||||
|
|
||||||
|
if (vfoActive == VFO_B){
|
||||||
|
//vfoB = frequency;
|
||||||
|
//vfoB_mode = modeToByte();
|
||||||
|
//storeFrequencyAndMode(2); //vfoB -> eeprom
|
||||||
|
|
||||||
|
vfoActive = VFO_A;
|
||||||
|
frequency = vfoA;
|
||||||
|
saveCheckFreq = frequency;
|
||||||
|
byteToMode(vfoA_mode, 0);
|
||||||
|
//printLineF2(F("Selected VFO A"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//vfoA = frequency;
|
||||||
|
//vfoA_mode = modeToByte();
|
||||||
|
//storeFrequencyAndMode(1); //vfoA -> eeprom
|
||||||
|
|
||||||
|
vfoActive = VFO_B;
|
||||||
|
frequency = vfoB;
|
||||||
|
saveCheckFreq = frequency;
|
||||||
|
byteToMode(vfoB_mode, 0);
|
||||||
|
//printLineF2(F("Selected VFO B"));
|
||||||
|
}
|
||||||
|
|
||||||
|
ritDisable();
|
||||||
|
setFrequency(frequency);
|
||||||
|
|
||||||
|
//if (isUseDelayTime == 1) //Found Issue in wsjt-x Linux 32bit
|
||||||
|
// delay_background(500, 0);
|
||||||
|
|
||||||
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menuRitToggle(int btn){
|
||||||
|
if (!btn){
|
||||||
|
if (ritOn == 1)
|
||||||
|
printLineF2(F("RIT:On, Off?"));
|
||||||
|
else
|
||||||
|
printLineF2(F("RIT:Off, On?"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (ritOn == 0){
|
||||||
|
printLineF2(F("RIT is ON"));
|
||||||
|
//enable RIT so the current frequency is used at transmit
|
||||||
|
ritEnable(frequency);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printLineF2(F("RIT is OFF"));
|
||||||
|
ritDisable();
|
||||||
|
}
|
||||||
|
//delay_background(500, 0);
|
||||||
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menuSplitOnOff(int btn){
|
||||||
|
if (!btn){
|
||||||
|
if (splitOn == 0)
|
||||||
|
printLineF2(F("Split On?"));
|
||||||
|
else
|
||||||
|
printLineF2(F("Split Off?"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (splitOn == 1){
|
||||||
|
splitOn = 0;
|
||||||
|
printLineF2(F("Split Off!"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
splitOn = 1;
|
||||||
|
if (ritOn == 1)
|
||||||
|
ritOn = 0;
|
||||||
|
printLineF2(F("Split On!"));
|
||||||
|
}
|
||||||
|
|
||||||
|
//delay_background(500, 0);
|
||||||
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Function to disbled transmission
|
//Function to disbled transmission
|
||||||
//by KD8CEC
|
//by KD8CEC
|
||||||
void menuTxOnOff(int btn, byte optionType){
|
void menuTxOnOff(int btn, byte optionType){
|
||||||
@@ -592,9 +613,11 @@ void menuTxOnOff(int btn, byte optionType){
|
|||||||
isTxType &= ~(optionType);
|
isTxType &= ~(optionType);
|
||||||
printLineF2(F("TX ON!"));
|
printLineF2(F("TX ON!"));
|
||||||
}
|
}
|
||||||
delay_background(500, 0);
|
|
||||||
printLine2ClearAndUpdate();
|
//delay_background(500, 0);
|
||||||
menuOn = 0;
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -617,21 +640,19 @@ void menuSetup(int btn){
|
|||||||
modeCalibrate = false;
|
modeCalibrate = false;
|
||||||
printLineF2(F("Setup:Off"));
|
printLineF2(F("Setup:Off"));
|
||||||
}
|
}
|
||||||
delay_background(2000, 0);
|
//delay_background(2000, 0);
|
||||||
printLine2Clear();
|
//printLine2Clear();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void menuExit(int btn){
|
void menuExit(int btn){
|
||||||
|
|
||||||
if (!btn){
|
if (!btn){
|
||||||
printLineF2(F("Exit Menu?"));
|
printLineF2(F("Exit Menu?"));
|
||||||
}
|
}
|
||||||
else{
|
else
|
||||||
printLine2ClearAndUpdate();
|
menuClearExit(0);
|
||||||
menuOn = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void menuCWSpeed(int btn){
|
void menuCWSpeed(int btn){
|
||||||
@@ -649,7 +670,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);
|
||||||
@@ -679,14 +700,15 @@ 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;
|
||||||
|
menuClearExit(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Builtin CW Keyer Logic by KD8CEC
|
//Builtin CW Keyer Logic by KD8CEC
|
||||||
@@ -724,7 +746,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);
|
||||||
@@ -752,14 +774,15 @@ 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;
|
||||||
|
menuClearExit(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
//CW Time delay by KD8CEC
|
//CW Time delay by KD8CEC
|
||||||
@@ -773,7 +796,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);
|
||||||
@@ -801,14 +824,15 @@ 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;
|
||||||
|
menuClearExit(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -891,7 +915,8 @@ void factoryCalibration(int btn){
|
|||||||
|
|
||||||
while(btnDown())
|
while(btnDown())
|
||||||
delay(50);
|
delay(50);
|
||||||
delay(100);
|
|
||||||
|
menuClearExit(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
void menuSetupCalibration(int btn){
|
void menuSetupCalibration(int btn){
|
||||||
@@ -955,8 +980,9 @@ void menuSetupCalibration(int btn){
|
|||||||
initOscillators();
|
initOscillators();
|
||||||
//si5351_set_calibration(calibration);
|
//si5351_set_calibration(calibration);
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
printLine2ClearAndUpdate();
|
//printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void printCarrierFreq(unsigned long freq){
|
void printCarrierFreq(unsigned long freq){
|
||||||
@@ -1029,8 +1055,9 @@ void menuSetupCarrier(int btn){
|
|||||||
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
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;
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Append by KD8CEC
|
//Append by KD8CEC
|
||||||
@@ -1065,8 +1092,9 @@ void menuSetupCWCarrier(int btn){
|
|||||||
si5351bx_setfreq(0, cwmCarrier);
|
si5351bx_setfreq(0, cwmCarrier);
|
||||||
printCarrierFreq(cwmCarrier);
|
printCarrierFreq(cwmCarrier);
|
||||||
|
|
||||||
Check_Cat(0); //To prevent disconnections
|
//Check_Cat(0); //To prevent disconnections
|
||||||
delay(100);
|
//delay(100);
|
||||||
|
delay_background(100, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//save the setting
|
//save the setting
|
||||||
@@ -1084,9 +1112,11 @@ void menuSetupCWCarrier(int btn){
|
|||||||
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
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;
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Modified by KD8CEC
|
//Modified by KD8CEC
|
||||||
void menuSetupCwTone(int btn){
|
void menuSetupCwTone(int btn){
|
||||||
int knob = 0;
|
int knob = 0;
|
||||||
@@ -1119,21 +1149,23 @@ void menuSetupCwTone(int btn){
|
|||||||
itoa(sideTone, b, 10);
|
itoa(sideTone, b, 10);
|
||||||
printLine2(b);
|
printLine2(b);
|
||||||
|
|
||||||
delay(100);
|
//delay(100);
|
||||||
Check_Cat(0); //To prevent disconnections
|
//Check_Cat(0); //To prevent disconnections
|
||||||
|
delay_background(100, 0);
|
||||||
}
|
}
|
||||||
noTone(CW_TONE);
|
noTone(CW_TONE);
|
||||||
//save the setting
|
//save the setting
|
||||||
if (digitalRead(PTT) == LOW){
|
if (digitalRead(PTT) == LOW){
|
||||||
printLineF2(F("Sidetone set!"));
|
printLineF2(F("Sidetone set!"));
|
||||||
EEPROM.put(CW_SIDETONE, usbCarrier);
|
EEPROM.put(CW_SIDETONE, sideTone);
|
||||||
delay_background(2000, 0);
|
delay_background(2000, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sideTone = prev_sideTone;
|
sideTone = prev_sideTone;
|
||||||
|
|
||||||
printLine2ClearAndUpdate();
|
//printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Lock Dial move by KD8CEC
|
//Lock Dial move by KD8CEC
|
||||||
@@ -1171,8 +1203,9 @@ void doMenu(){
|
|||||||
|
|
||||||
//Appened Lines by KD8CEC for Adjust Tune step and Set Dial lock
|
//Appened Lines by KD8CEC for Adjust Tune step and Set Dial lock
|
||||||
while(btnDown()){
|
while(btnDown()){
|
||||||
delay(50);
|
//delay(50);
|
||||||
Check_Cat(0); //To prevent disconnections
|
//Check_Cat(0); //To prevent disconnections
|
||||||
|
delay_background(50, 0);
|
||||||
|
|
||||||
if (btnDownTimeCount++ == (PRESS_ADJUST_TUNE / 50)) { //Set Tune Step
|
if (btnDownTimeCount++ == (PRESS_ADJUST_TUNE / 50)) { //Set Tune Step
|
||||||
printLineF2(F("Set Tune Step?"));
|
printLineF2(F("Set Tune Step?"));
|
||||||
@@ -1190,13 +1223,14 @@ 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())
|
||||||
{
|
{
|
||||||
Check_Cat(0); //To prevent disconnections
|
//Check_Cat(0); //To prevent disconnections
|
||||||
delay(50); //debounce
|
//delay(50); //debounce
|
||||||
|
delay_background(50, 0);
|
||||||
|
|
||||||
if (isNeedDisplay) {
|
if (isNeedDisplay) {
|
||||||
strcpy(b, "Tune Step:");
|
strcpy(b, "Tune Step:");
|
||||||
@@ -1243,9 +1277,9 @@ void doMenu(){
|
|||||||
btnState = btnDown();
|
btnState = btnDown();
|
||||||
|
|
||||||
if (i > 0){
|
if (i > 0){
|
||||||
if (modeCalibrate && select + i < 190)
|
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)
|
||||||
@@ -1257,40 +1291,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 < 40)
|
else if (select < 30)
|
||||||
menuSelectMode(btnState);
|
menuSelectMode(btnState);
|
||||||
|
else if (select < 40)
|
||||||
|
menuRitToggle(btnState);
|
||||||
else if (select < 50)
|
else if (select < 50)
|
||||||
menuCWSpeed(btnState);
|
menuIFSSetup(btnState);
|
||||||
else if (select < 60)
|
else if (select < 60)
|
||||||
menuCWAutoKey(btnState);
|
menuCWSpeed(btnState);
|
||||||
else if (select < 70)
|
else if (select < 70)
|
||||||
menuSetup(btnState);
|
|
||||||
else if (select < 80 && !modeCalibrate)
|
|
||||||
menuExit(btnState);
|
|
||||||
else if (select < 90 && modeCalibrate)
|
|
||||||
menuSetupCalibration(btnState); //crystal
|
|
||||||
else if (select < 100 && modeCalibrate)
|
|
||||||
menuSetupCarrier(btnState); //lsb
|
|
||||||
else if (select < 110 && modeCalibrate)
|
|
||||||
menuSetupCWCarrier(btnState); //lsb
|
|
||||||
else if (select < 120 && modeCalibrate)
|
|
||||||
menuSetupCwTone(btnState);
|
|
||||||
else if (select < 130 && modeCalibrate)
|
|
||||||
menuSetupCwDelay(btnState);
|
|
||||||
else if (select < 140 && modeCalibrate)
|
|
||||||
menuSetupTXCWInterval(btnState);
|
|
||||||
else if (select < 150 && modeCalibrate)
|
|
||||||
menuSetupKeyType(btnState);
|
|
||||||
else if (select < 160 && modeCalibrate)
|
|
||||||
menuADCMonitor(btnState);
|
|
||||||
else if (select < 170 && modeCalibrate)
|
|
||||||
menuSplitOnOff(btnState); //SplitOn / off
|
menuSplitOnOff(btnState); //SplitOn / off
|
||||||
|
else if (select < 80)
|
||||||
|
menuCWAutoKey(btnState);
|
||||||
|
else if (select < 90)
|
||||||
|
menuSetup(btnState);
|
||||||
|
else if (select < 100)
|
||||||
|
menuExit(btnState);
|
||||||
|
else if (select < 110 && modeCalibrate)
|
||||||
|
menuSetupCalibration(btnState); //crystal
|
||||||
|
else if (select < 120 && modeCalibrate)
|
||||||
|
menuSetupCarrier(btnState); //lsb
|
||||||
|
else if (select < 130 && modeCalibrate)
|
||||||
|
menuSetupCWCarrier(btnState); //lsb
|
||||||
|
else if (select < 140 && modeCalibrate)
|
||||||
|
menuSetupCwTone(btnState);
|
||||||
|
else if (select < 150 && modeCalibrate)
|
||||||
|
menuSetupCwDelay(btnState);
|
||||||
|
else if (select < 160 && modeCalibrate)
|
||||||
|
menuSetupTXCWInterval(btnState);
|
||||||
|
else if (select < 170 && modeCalibrate)
|
||||||
|
menuSetupKeyType(btnState);
|
||||||
else if (select < 180 && modeCalibrate)
|
else if (select < 180 && modeCalibrate)
|
||||||
menuTxOnOff(btnState, 0x01); //TX OFF / ON
|
menuADCMonitor(btnState);
|
||||||
else if (select < 190 && modeCalibrate)
|
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
|
||||||
@@ -1298,9 +1334,8 @@ void doMenu(){
|
|||||||
|
|
||||||
//debounce the button
|
//debounce the button
|
||||||
while(btnDown()){
|
while(btnDown()){
|
||||||
delay(50);
|
delay_background(50, 0); //To prevent disconnections
|
||||||
Check_Cat(0); //To prevent disconnections
|
|
||||||
}
|
}
|
||||||
delay(50);
|
//delay(50);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -111,9 +111,9 @@ void initOscillators(){
|
|||||||
si5351bx_vcoa = (SI5351BX_XTAL * SI5351BX_MSA) + calibration; // apply the calibration correction factor
|
si5351bx_vcoa = (SI5351BX_XTAL * SI5351BX_MSA) + calibration; // apply the calibration correction factor
|
||||||
|
|
||||||
if (cwMode == 0)
|
if (cwMode == 0)
|
||||||
si5351bx_setfreq(0, usbCarrier);
|
si5351bx_setfreq(0, usbCarrier + (isIFShift ? ifShiftValue : 0));
|
||||||
else
|
else
|
||||||
si5351bx_setfreq(0, cwmCarrier);
|
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)
|
||||||
@@ -207,7 +235,6 @@ char byteToChar(byte srcByte){
|
|||||||
void updateDisplay() {
|
void updateDisplay() {
|
||||||
// tks Jack Purdum W8TEE
|
// tks Jack Purdum W8TEE
|
||||||
// replaced fsprint commmands by str commands for code size reduction
|
// replaced fsprint commmands by str commands for code size reduction
|
||||||
|
|
||||||
// replace code for Frequency numbering error (alignment, point...) by KD8CEC
|
// replace code for Frequency numbering error (alignment, point...) by KD8CEC
|
||||||
int i;
|
int i;
|
||||||
unsigned long tmpFreq = frequency; //
|
unsigned long tmpFreq = frequency; //
|
||||||
|
Reference in New Issue
Block a user