Compare commits
40 Commits
version0.3
...
v0.33
Author | SHA1 | Date | |
---|---|---|---|
|
4f5ac283b7 | ||
|
4745790dfa | ||
|
85832de034 | ||
|
4830db78cb | ||
|
5eca64d2a9 | ||
|
3058d52551 | ||
|
04699ba074 | ||
|
aa61281c38 | ||
|
261215b1ad | ||
|
1a2f5b4fde | ||
|
8203427808 | ||
|
4e15f2150c | ||
|
82a5fd7df9 | ||
|
386a0b2d46 | ||
|
c6401af7d1 | ||
|
b153a305d6 | ||
|
e61e45d3dd | ||
|
a1f941f965 | ||
|
d1e72b3bd5 | ||
|
032e7f919f | ||
|
b6bc264332 | ||
|
b1cc5eb98a | ||
|
2fe1662d67 | ||
|
ebbc5aae5e | ||
|
209cd3a49c | ||
|
95e5c1dfe5 | ||
|
45a8479061 | ||
|
a6ad381c24 | ||
|
bcf80f851d | ||
|
16304efacd | ||
|
968024ab73 | ||
|
3e60728727 | ||
|
9781ef086b | ||
|
f27f504ea4 | ||
|
2b08a76fbf | ||
|
90655e03b8 | ||
|
8551ff1b68 | ||
|
5ce94e8e49 | ||
|
7ef9c29fa8 | ||
|
fda398046e |
26
README.md
26
README.md
@@ -1,7 +1,11 @@
|
|||||||
#IMPORTANT INFORMATION
|
#IMPORTANT INFORMATION
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
- Beta 0.26 and Beta 0.261, Beta 0.262, Beta 0.27 is complete test
|
- 0.30 Version Test only download. almost complete
|
||||||
- You can download and use it.
|
- Beta 0.26 and Beta 0.261, Beta 0.262,0.27 is complete test, 0.28 is tested.
|
||||||
|
- You can download and use it (Release section).
|
||||||
|
|
||||||
|
# Current work list (for Version 0.31)
|
||||||
|
1 Testing CAT Control with Software using hamlib on Linux
|
||||||
|
|
||||||
#NOTICE
|
#NOTICE
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
@@ -46,6 +50,24 @@ Prepared or finished tasks for the next version
|
|||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
## REVISION RECORD
|
## REVISION RECORD
|
||||||
|
0.30
|
||||||
|
- implemented the function to monitor the value of all analog inputs. This allows you to monitor the status of the CW keys connected to your uBITX.
|
||||||
|
- possible to set the ADC range for CW Keying. If no setting is made, it will have the same range as the original code. If you set the CW Keying ADC Values using uBITX Manager 0.3, you can reduce the key error.
|
||||||
|
- Added the function to select Straight Key, IAMBICA, IAMBICB key from the menu.
|
||||||
|
- default Band select is Ham Band mode, if you want common type, long press function key at band select menu, uBITX Manager can be used to modify frequencies to suit your country.
|
||||||
|
|
||||||
|
0.29
|
||||||
|
- Remove the use of initialization values in BFO settings - using crruent value, if factory reset
|
||||||
|
- Select Tune Step, default 0, 20, 50, 100, 200, Use the uBITX Manager to set the steps value you want. You can select Step by pressing and holding the Function Key (1sec ~ 2sec).
|
||||||
|
- Modify Dial Lock Function, Press the Function key for more than 3 seconds to toggle dial lock.
|
||||||
|
- created a new frequency tune method. remove original source codes, Threshold has been applied to reduce malfunction. checked the continuity of the user operating to make natural tune possible.
|
||||||
|
- stabilize and remove many warning messages - by Pullrequest and merge
|
||||||
|
- Changed cw keying method. removed the original code and applied Ron's code and Improved compatibility with original hardware and CAT commnication. It can be used without modification of hardware.
|
||||||
|
|
||||||
|
0.28
|
||||||
|
- Fixed CAT problem with hamlib on Linux
|
||||||
|
- restore Protocol autorecovery logic
|
||||||
|
|
||||||
0.27
|
0.27
|
||||||
(First alpha test version, This will be renamed to the major version 1.0)
|
(First alpha test version, This will be renamed to the major version 1.0)
|
||||||
- Dual VFO Dial Lock (vfoA Dial lock)
|
- Dual VFO Dial Lock (vfoA Dial lock)
|
||||||
|
@@ -315,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
|
||||||
@@ -482,22 +486,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -581,9 +585,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);
|
||||||
@@ -751,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
|
||||||
*/
|
*/
|
||||||
@@ -847,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;
|
||||||
@@ -1149,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();
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
@@ -205,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;
|
||||||
@@ -238,6 +241,93 @@ 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){
|
||||||
@@ -286,9 +376,10 @@ void menuSelectMode(int btn){
|
|||||||
selectModeType = 3;
|
selectModeType = 3;
|
||||||
|
|
||||||
beforeMode = selectModeType;
|
beforeMode = selectModeType;
|
||||||
|
|
||||||
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)
|
||||||
@@ -352,9 +443,9 @@ void menuSelectMode(int btn){
|
|||||||
}
|
}
|
||||||
|
|
||||||
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);
|
delay_background(500, 0);
|
||||||
@@ -363,8 +454,6 @@ void menuSelectMode(int btn){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void menuSplitOnOff(int btn){
|
void menuSplitOnOff(int btn){
|
||||||
if (!btn){
|
if (!btn){
|
||||||
if (splitOn == 0)
|
if (splitOn == 0)
|
||||||
@@ -389,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){
|
||||||
@@ -433,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)
|
||||||
@@ -470,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;
|
||||||
@@ -649,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);
|
||||||
@@ -679,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;
|
||||||
}
|
}
|
||||||
@@ -724,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);
|
||||||
@@ -752,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;
|
||||||
}
|
}
|
||||||
@@ -773,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);
|
||||||
@@ -801,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;
|
||||||
}
|
}
|
||||||
@@ -1190,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())
|
||||||
@@ -1243,9 +1328,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 +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 < 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);
|
menuIFSToggle(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
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user