Olá pessoal, é para vocês seguidores e quem acompanham nosso blog, e vídeos. Estou na caça a bons esboços, sketches ou logaritmos para tentar fazer modificações, mas está difícil achar com configuração para AM, LSB, USB, e pior ainda para telas Oled de 128 x 64. Tentei fazer uma modificação em um sketch de LCD para Oled, conseguir mas não gostei, pois é muito pobre e não tem os modos AM, SSB. O melhor são os que tem os modos AM, LSB, USB, estes servirão para nossos projetos transformar qualquer transceptor comercial como o Cobra 148 GTL ou outros, e nossas montagens Naja, Ararinha, Minhoca, Andirá, Curió, Lagunero, Alba II entre muitos publicados no blog e na WEB. Escolha o que melhor achar para seu gosto. Já publiquei aqui no blog e YouTube muitos DDS VFOs modificados por mim, sempre focado para o Cobra 148 GTL e tela Oled 128 x 64. Este agora que publico, é uma atualização do já atualizado e publicado, porem atualizado mais uma vez, ficando diferente do original que publiquei 30/08/2025. O meu maior interesse, não é ficar famoso como modificador ou programador de projetos DDS VFO, meu interesse é incentivar a qualquer um a fazer o que eu faço, vejam que em um esboço eu já atualizei muito, e ainda tem mais para atualizar, é preciso que vocês tenham interesse em começar a desenvolver um ou outro esboço, eu não tenho nenhum curso de Arduino nem eletrônica, mas no entanto estou aqui, tentando fazer minha contribuição para nosso hobby. Sobre o DDS VFO em questão, é praticamente o mesmo esquema elétrico, com uma novidade no BFO em CLK1 podemos ver a frequência na parte inferior esquerdo do Oled, podemos alterar a frequência da FI para retoque de RX ou TX sem mudar a chave de modo AM, LSB, USB, caso mude de modo a FI retornará a escrita no esboço. Para acessar o ajustar a frequência do BFO FI em CKL1, pressione o Encoder por 5 seg. o ajuste de passos Step também é feito em CLK1, ajustando ou retocando a frequência em operação enquanto o DDS estiver ligado ou permanecer no mesmo modo.
Este projeto DDS VFO não chega aos 120 MHz, vai aos 118. MHz estável, melhor usar até os 70 ou 80 MHz, Eu deixei no esboço sketch para os 60 Mhz, mas ele está indo até 118 MHz, não sei o motivo que não está obedecendo as definições de frequências mínima e máxima. Mas se for para os 100 MHz o último dígito da frequência passara para linha do BFO no display, por isso que a foto abaixo está com nome caracteres BFO mais para o lado direito do display. Se vocês quiserem no esboço na linha 128 //display.setCursor(30,25); vocês vão habilitar removendo os dois travessões no começo, e desabilitar a de linha 127 colocando // dois travessões na frente de display.setCursor(4,25); assim o nome caracteres BFO vai ficar mais ao centro. Vou publicar os dois esboços sketches, como estão nas fotos finais vocês escolhem o que quer para o seu projeto. Por favor mandem comentários por vídeo ou blog, tentem fazer modificações em outros esboços, não é difícil e sei que vocês conseguirão. Muito obrigado, desculpas pela demora do final da publicação, postarei um vídeo no YouTube explicando um pouco sobre o projeto DDS VFO.
Pronto definido o display será assim, agora vamos colocar os caracteres em suas posições corretas.
Vejam que os caracteres números da frequência estão um pouco acima. Vamos centralizar verticalmente.
Acho que dá para separar com uma linha divisória para a frequência, é só uma aparência melhor.
Vamos ajustar os caracteres números da frequência mais para a direita, horizontal.
Neste dá para ir até os 118 MHz sem o "0" atrapalhar o nome BFO.
Pronto acho que assim está bom, é deu uma visão melhor.
No modo LSB vejam que a FI BFO apresenta a frequência abaixo de 7.798.50 KHz, o Hz faz parte do VFO CLK1.
Abaixo foto do ajuste de CLK1 BFO no Encoder com passos de 1 MHz Step para FI de 10 MHz, esta frequência permanece enquanto o DDS estiver ligado e sem mexer apertar os botões de Modo, se isso acontecer o BFO FI voltará a sua origem do digitado no programa sketch. 
Abaixo esquema elétrico DDS VFO Cobra 148 GTL AM LSB USB.
Selecione todo esboço programa, copie, depois na área de trabalho abra o Arduino IDE, limpe delete e cole dentro, vá em Arquivo "Salvar como" renomeei e salve em uma pasta. Instale todas ás bibliotecas que estão com link no cabeçalho do esboço sketch. Não tenham várias bibliotecas para um mesmo periférico isso causará erros na compilação, sempre faço assim deixo só as bibliotecas que estão no esboço sketch.
//**********************************************************************************************************/
// Modifications and updates for si5351 Arduino Nano, Pro Mini Atmega 328P. Original by GE75A Julio
// and shared on YouTube by CT7API Manuel Ferreira in the version with 128 x 64 OLED. Original LCD version.
// This entire program is taken from Jason Mildrum, NT7S and Przemek Sadowski, SQ9NJE. There is not enough
// original code written by me to make it worth mentioning. http://nt7s.com/ http://sq9nje.pl/
// http://ak2b.blogspot.com/ Last update BFO CLK1 by Waldir Cardoso Blog:
// https://projetosetransceptores.blogspot.com/2026/03/dds-vfo-para-cobra-148-gtl-modificado-2.html
//------------------------------------------------------------------------------------------------------------
// Function
// 1.VFO CLK0 34 Mhz AM LSB USB MODE Cobra 148 GTL other AM SSB equipment, modify the sketch.
// 2.BFO CLK1 BFO FI 7.800 Khz AM LSB USB MODE Cobra 148 GTL other AM SSB equipment, modify the sketch.
// 3.BFO CLK1 Pressing ENCODER sets a temporary IF adjustment.
// 4.STEP(1MHz,100,10,1kHz,100,10,1Hz)
////////////////////////////////////////////////////////////////////////
//Libraries.
#include <si5351.h> //https://github.com/etherkit/Si5351Arduino/releases/tag/v1.1.2
#include <Wire.h> //IDE Standard
#include <Adafruit_SSD1306.h> //Adafruit SSD1306 https://github.com/adafruit/Adafruit_SSD1306
#include <Rotary.h> //Ben Buxton https://github.com/brianlow/Rotary
#include <Adafruit_GFX.h> //Adafruit GFX https://github.com/adafruit/Adafruit-GFX-Library
//----------------------------------------------------------------------------------------------------
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define F_MIN 10000000UL
#define F_MAX 6000000000UL
#define ENCODER_A 2 // Encoder pin A
#define ENCODER_B 3 // Encoder pin B
#define ENCODER_BTN 4
#define USB_PIN 6
#define LSB_PIN 7
#define AM_PIN 8
int lsbstate = 0;
int amstate = 0;
int usbstate = 0;
Si5351 si5351; //Si5351 I2C Address 0x60
Rotary r = Rotary(3, 2);
volatile int32_t AM = 780000000ULL;
volatile int32_t LSB = 779850000ULL; //LSB = IF - 1500Hz
volatile int32_t USB = 780150000ULL; //USB = IF + 1500Hz
volatile int32_t bfo = 780000000ULL; //Intermediary frequency IF
volatile int32_t vfo = 2696500000ULL / SI5351_FREQ_MULT; // frequency display initialization
volatile uint32_t radix = 10000; //start step size - change to suit
boolean changed_f = 0;
String tbfo = "AM";
boolean setbfo = false; // Press the ENCODER for temporary BFO tuning. Pressione sintonizar o BFO temporario.
int enc_cnt = 0; // Encoder count
#define IF_Offset //Output is the display plus or minus the bfo frequency
/**************************************/
/* Interrupt service routine for */
/* encoder frequency change */
/**************************************/
ISR(PCINT2_vect) {
unsigned char result = r.process();
if (result == DIR_CW)
enc_cnt = +1;
else if (result == DIR_CCW)
enc_cnt = -1;
if (setbfo)
set_bfo_freq();
else
set_frequency();
}
/**************************************/
/* Change the frequencies */
/**************************************/
void set_frequency()
{
vfo += enc_cnt * radix;
enc_cnt =0;
changed_f = 1;
}
void set_bfo_freq()
{
bfo += enc_cnt * radix;
enc_cnt = 0;
changed_f = 1;
}
/**************************************/
/* Read the button with debouncing */
/**************************************/
boolean get_button()
{
if (!digitalRead(ENCODER_BTN))
{
delay(20);
if (!digitalRead(ENCODER_BTN))
{
long strttime=millis();
while (!digitalRead(ENCODER_BTN));
if((millis() - strttime) > 500) // check if it was a long press
{
setbfo = !setbfo; // Pressing ENCODER will set the temporary BFO setting.
Serial.println(bfo);
changed_f = 1;
return 0;
}
else
return 1;
}
}
return 0;
}
/**************************************/
/* Displays the frequency */
/**************************************/
void display_frequency()
{
uint16_t f, g;
display.clearDisplay();
display.setTextSize(1); // Fonte tamanho letras caracteres na tela.
display.setTextColor(WHITE);
display.drawLine(0, 7, 0, 24, WHITE); // Linha descida
display.setCursor(4,0); // Posição MODE na tela.
display.drawLine(0, 7, 127, 7, WHITE); // Linha divisória acima frequência.
display.print("MODE= "); // Imprime nome na tela.
display.print(tbfo);
display.drawLine(128, 7, 127, 24, WHITE); // Linha descida.
display.setCursor(4,25); // Posição inicial BFO na tela.
//display.setCursor(30,25); // Posição central BFO para 100 MHz no display.
display.drawLine(0, 24, 127, 24, WHITE); // Linha divisória abaixo frequência.
display.print("BFO = "); //Imprime nome na tela.
display.print(bfo);
/**************************************/
/* Displays the frequency change step */
/**************************************/
display.setCursor(65,0);
display.print(F("TS="));
switch (radix)
{
case 1:
display.println(F(" 1 Hz"));
break;
case 10:
display.println(F(" 10 Hz"));
break;
case 100:
display.println(F(" 100 Hz"));
break;
case 1000:
display.println(F(" 1 kHz"));
break;
case 10000:
display.println(F(" 10 kHz"));
break;
case 100000:
display.println(F("100 kHz"));
break;
case 1000000:
display.println(F(" 1 MHz"));
break;
}
/**************************************/
/* Displays the frequency */
/**************************************/
display.setTextSize(2);
display.setCursor(5,9);
f = vfo / 1000000; //variable is now vfo instead of 'frequency'
if (f < 10)
display.print(' ');
display.print(f);
display.print('.');
f = (vfo % 1000000) / 1000;
if (f < 100)
display.print('0');
if (f < 10)
display.print('0');
display.print(f);
display.print('.');
f = vfo % 1000;
if (f < 100)
display.print('0');
if (f < 10)
display.print('0');
display.print(f);
display.display();
display.clearDisplay();
}
/**************************************/
/* S E T U P */
/**************************************/
void setup()
{
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.display();
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(USB_PIN, INPUT_PULLUP);
pinMode(LSB_PIN, INPUT_PULLUP);
pinMode(AM_PIN, INPUT_PULLUP);
// Initial text Cobra 148 GTL or other equipment display.
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(9,1);
display.println("Cobra 148");
display.setCursor(47,17);
display.print("GTL");
display.display();
delay(2000);
display.clearDisplay();
//initialize the Si5351
si5351.set_correction(18000); //**mine. There is a calibration sketch in File/Examples/si5351Arduino-Jason
si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0); //If you're using a 27Mhz crystal, put in 27000000 instead of 0
si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);
// Set CLK0 to output the starting "vfo" frequency as set above by vfo = ?
#ifdef IF_Offset
//Serial.println((long)((vfo * SI5351_FREQ_MULT) - bfo) * -1);
si5351.set_freq(((vfo * SI5351_FREQ_MULT) + bfo), SI5351_PLL_FIXED, SI5351_CLK0);
volatile uint32_t vfoT =((vfo * SI5351_FREQ_MULT) - bfo);
tbfo = "AM";
//Set CLK1 to output bfo frequency
si5351.set_freq( bfo,0, SI5351_CLK1);
si5351.drive_strength(SI5351_CLK0, SI5351_DRIVE_6MA);
si5351.drive_strength(SI5351_CLK1, SI5351_DRIVE_4MA);
#endif
pinMode(ENCODER_BTN, INPUT_PULLUP);
PCICR |= (1 << PCIE2); // Enabled pin change interrupt for the encoder
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
display_frequency(); // Update the display
}
/**************************************/
/* L O O P */
/**************************************/
void loop()
{
// Update the display if the frequency has been changed
{ display_frequency();
#ifdef IF_Offset
//you can also subtract the bfo to suit your needs
//si5351.set_freq(((vfo * SI5351_FREQ_MULT) - bfo), SI5351_PLL_FIXED, SI5351_CLK0); // VFO subtrai á IF
si5351.set_freq(( vfo * SI5351_FREQ_MULT) + bfo, SI5351_PLL_FIXED, SI5351_CLK0); // VFO soma á IF
si5351.set_freq( bfo,0, SI5351_CLK1); // BFO CLK1
si5351.output_enable(SI5351_CLK0, 1); // Enable CLK0 //1 - Enable / 0 - Disable CLK
si5351.output_enable(SI5351_CLK1, 1); // Enable CLK1
#endif
{
usbstate = digitalRead(USB_PIN);
if (usbstate == LOW) {
//USB
bfo = USB;
tbfo = "USB";
}
amstate = digitalRead(AM_PIN);
if (amstate == LOW) {
//AM
bfo = AM;
tbfo = "AM";
}
lsbstate = digitalRead(LSB_PIN);
if (lsbstate == LOW) {
// LSB
bfo = LSB;
tbfo = "LSB";
}
}
// Button press changes the frequency change step for 1 Hz steps
if (get_button())
{
switch (radix)
{
case 1:
radix = 10;
break;
case 10:
radix = 100;
break;
case 100:
radix = 1000;
break;
case 1000:
radix = 10000;
break;
case 10000:
radix = 100000;
break;
case 100000:
radix = 1000000;
break;
case 1000000:
radix = 1;
break; }
}
display_frequency();
}
}
Segundo esboço sketch, selecione todo esboço programa, copie, depois na área de trabalho abra o Arduino IDE, limpe delete e cole dentro, vá em Arquivo "Salvar como" renomeei e salve em uma pasta. Instale todas ás bibliotecas que estão com link no cabeçalho do esboço sketch. Não tenham várias bibliotecas para um mesmo periférico isso causará erros na compilação, sempre faço assim deixo só as bibliotecas que estão no esboço sketch.
//**********************************************************************************************************/
// Modifications and updates for si5351 Arduino Nano, Pro Mini Atmega 328P. Original by GE75A Julio
// and shared on YouTube by CT7API Manuel Ferreira in the version with 128 x 64 OLED. Original LCD version.
// This entire program is taken from Jason Mildrum, NT7S and Przemek Sadowski, SQ9NJE. There is not enough
// original code written by me to make it worth mentioning. http://nt7s.com/ http://sq9nje.pl/
// http://ak2b.blogspot.com/ Last update BFO CLK1 by Waldir Cardoso Blog:
// https://projetosetransceptores.blogspot.com/2026/03/dds-vfo-para-cobra-148-gtl-modificado-2.html
//---------------------------------------------------------------------------------
// Function
// 1.VFO CLK0 34 Mhz AM LSB USB MODE Cobra 148 GTL other AM SSB equipment, modify the sketch.
// 2.BFO CLK1 BFO FI 7.800 Khz AM LSB USB MODE Cobra 148 GTL other AM SSB equipment, modify the sketch.
// 3.BFO CLK1 Pressing ENCODER sets a temporary IF adjustment.
// 4.STEP(1MHz,100,10,1kHz,100,10,1Hz)
////////////////////////////////////////////////////////////////////////
//Libraries.
#include <si5351.h> //https://github.com/etherkit/Si5351Arduino/releases/tag/v1.1.2
#include <Wire.h> //IDE Standard
#include <Adafruit_SSD1306.h> //Adafruit SSD1306 https://github.com/adafruit/Adafruit_SSD1306
#include <Rotary.h> //Ben Buxton https://github.com/brianlow/Rotary
#include <Adafruit_GFX.h> //Adafruit GFX https://github.com/adafruit/Adafruit-GFX-Library
//----------------------------------------------------------------------------------------------------
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define F_MIN 10000UL
#define F_MAX 60000000UL
#define ENCODER_A 2 // Encoder pin A
#define ENCODER_B 3 // Encoder pin B
#define ENCODER_BTN 4
#define USB_PIN 6
#define LSB_PIN 7
#define AM_PIN 8
int lsbstate = 0;
int amstate = 0;
int usbstate = 0;
Si5351 si5351; //Si5351 I2C Address 0x60
Rotary r = Rotary(3, 2);
volatile int32_t AM = 780000000ULL;
volatile int32_t LSB = 779850000ULL; //LSB = IF - 1500Hz
volatile int32_t USB = 780150000ULL; //USB = IF + 1500Hz
volatile int32_t bfo = 780000000ULL; //Intermediary frequency IF
volatile int32_t vfo = 2696500000ULL / SI5351_FREQ_MULT; // frequency display initialization
volatile uint32_t radix = 10000; //start step size - change to suit
boolean changed_f = 0;
String tbfo = "AM";
boolean setbfo = false; // Press the ENCODER for temporary BFO tuning. Pressione para sintonizar o BFO temporario.
int enc_cnt = 0; // Encoder count
#define IF_Offset //Output is the display plus or minus the bfo frequency
/**************************************/
/* Interrupt service routine for */
/* encoder frequency change */
/**************************************/
ISR(PCINT2_vect) {
unsigned char result = r.process();
if (result == DIR_CW)
enc_cnt = +1;
else if (result == DIR_CCW)
enc_cnt = -1;
if (setbfo)
set_bfo_freq();
else
set_frequency();
}
/**************************************/
/* Change the frequencies */
/**************************************/
void set_frequency()
{
vfo += enc_cnt * radix;
enc_cnt =0;
changed_f = 1;
}
void set_bfo_freq()
{
bfo += enc_cnt * radix;
enc_cnt = 0;
changed_f = 1;
}
/**************************************/
/* Read the button with debouncing */
/**************************************/
boolean get_button()
{
if (!digitalRead(ENCODER_BTN))
{
delay(20);
if (!digitalRead(ENCODER_BTN))
{
long strttime=millis();
while (!digitalRead(ENCODER_BTN));
if((millis() - strttime) > 500) // check if it was a long press
{
setbfo = !setbfo; // Pressing ENCODER will set the temporary BFO setting.
Serial.println(bfo);
changed_f = 1;
return 0;
}
else
return 1;
}
}
return 0;
}
/**************************************/
/* Displays the frequency */
/**************************************/
void display_frequency()
{
uint16_t f, g;
display.clearDisplay();
display.setTextSize(1); // Fonte tamanho letras caracteres na tela.
display.setTextColor(WHITE);
display.drawLine(0, 7, 0, 24, WHITE); // Linha descida
display.setCursor(4,0); // Posição MODE na tela.
display.drawLine(0, 7, 127, 7, WHITE); // Linha divisória acima frequência.
display.print("MODE= "); // Imprime nome na tela.
display.print(tbfo);
display.drawLine(127, 7, 127, 40, WHITE); // Linha vertical descida.
//display.drawLine(127, 7, 127, 24, WHITE); // Linha vertical descida.
display.setCursor(4,25); // Posição inicial BFO na tela.
//display.setCursor(30,25); // Posição central BFO na tela para 100 MHz.
//display.drawLine(0, 24, 127, 24, WHITE); // Linha divisória horizontal abaixo frequência.
display.drawLine(0, 24, 104, 24, WHITE); // Linha divisória horizontal abaixo frequência.
display.drawLine(104, 24, 104 , 40, WHITE); // Linha vertical para frinal BFO Hz.
display.print("BFO = "); //Imprime nome na tela.
display.print(bfo);
/**************************************/
/* Displays the frequency change step */
/**************************************/
display.setCursor(65,0);
display.print(F("TS="));
switch (radix)
{
case 1:
display.println(F(" 1 Hz"));
break;
case 10:
display.println(F(" 10 Hz"));
break;
case 100:
display.println(F(" 100 Hz"));
break;
case 1000:
display.println(F(" 1 kHz"));
break;
case 10000:
display.println(F(" 10 kHz"));
break;
case 100000:
display.println(F("100 kHz"));
break;
case 1000000:
display.println(F(" 1 MHz"));
break;
}
/**************************************/
/* Displays the frequency */
/**************************************/
display.setTextSize(2);
display.setCursor(5,9);
f = vfo / 1000000; //variable is now vfo instead of 'frequency'
if (f < 10)
display.print(' ');
display.print(f);
display.print('.');
f = (vfo % 1000000) / 1000;
if (f < 100)
display.print('0');
if (f < 10)
display.print('0');
display.print(f);
display.print('.');
f = vfo % 1000;
if (f < 100)
display.print('0');
if (f < 10)
display.print('0');
display.print(f);
display.setTextSize(1);
display.setCursor(110,25);
display.println("Hz");
display.display();
display.clearDisplay();
}
/**************************************/
/* S E T U P */
/**************************************/
void setup()
{
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.display();
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(USB_PIN, INPUT_PULLUP);
pinMode(LSB_PIN, INPUT_PULLUP);
pinMode(AM_PIN, INPUT_PULLUP);
// Initial text Cobra 148 GTL or other equipment display.
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(9,1);
display.println("Cobra 148");
display.setCursor(47,17);
display.print("GTL");
display.display();
delay(2000);
display.clearDisplay();
//initialize the Si5351
si5351.set_correction(18000); //**mine. There is a calibration sketch in File/Examples/si5351Arduino-Jason
si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0); //If you're using a 27Mhz crystal, put in 27000000 instead of 0
si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);
// Set CLK0 to output the starting "vfo" frequency as set above by vfo = ?
#ifdef IF_Offset
//Serial.println((long)((vfo * SI5351_FREQ_MULT) - bfo) * -1);
si5351.set_freq(((vfo * SI5351_FREQ_MULT) + bfo), SI5351_PLL_FIXED, SI5351_CLK0);
volatile uint32_t vfoT =((vfo * SI5351_FREQ_MULT) - bfo);
tbfo = "AM";
//Set CLK1 to output bfo frequency
si5351.set_freq( bfo,0, SI5351_CLK1);
si5351.drive_strength(SI5351_CLK0, SI5351_DRIVE_6MA);
si5351.drive_strength(SI5351_CLK1, SI5351_DRIVE_4MA);
#endif
pinMode(ENCODER_BTN, INPUT_PULLUP);
PCICR |= (1 << PCIE2); // Enabled pin change interrupt for the encoder
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
display_frequency(); // Update the display
}
/**************************************/
/* L O O P */
/**************************************/
void loop()
{
// Update the display if the frequency has been changed
{ display_frequency();
#ifdef IF_Offset
//you can also subtract the bfo to suit your needs
//si5351.set_freq(((vfo * SI5351_FREQ_MULT) - bfo), SI5351_PLL_FIXED, SI5351_CLK0); // VFO subtrai á IF
si5351.set_freq(( vfo * SI5351_FREQ_MULT) + bfo, SI5351_PLL_FIXED, SI5351_CLK0); // VFO soma á IF
si5351.set_freq( bfo,0, SI5351_CLK1); // BFO CLK1
si5351.output_enable(SI5351_CLK0, 1); // Enable CLK0 //1 - Enable / 0 - Disable CLK
si5351.output_enable(SI5351_CLK1, 1); // Enable CLK1
#endif
{
usbstate = digitalRead(USB_PIN);
if (usbstate == LOW) {
//USB
bfo = USB;
tbfo = "USB";
}
amstate = digitalRead(AM_PIN);
if (amstate == LOW) {
//AM
bfo = AM;
tbfo = "AM";
}
lsbstate = digitalRead(LSB_PIN);
if (lsbstate == LOW) {
// LSB
bfo = LSB;
tbfo = "LSB";
}
}
// Button press changes the frequency change step for 1 Hz steps
if (get_button())
{
switch (radix)
{
case 1:
radix = 10;
break;
case 10:
radix = 100;
break;
case 100:
radix = 1000;
break;
case 1000:
radix = 10000;
break;
case 10000:
radix = 100000;
break;
case 100000:
radix = 1000000;
break;
case 1000000:
radix = 1;
break; }
}
display_frequency();
}
}

