Receptor
por fase HF - Arduino Nano - AD9850 SSB CW AM*

Foto : Painel frontal do receptor
Um novo projeto com o Arduino nano, DDS e a antiga técnica de
recepção por fase.
O receptor recebe de 500kHz a 32MHz, tem opção de AGC,
Mute, dois VFOs, filtro de CW, LSB ou USB, bypass no filtro passa banda
e saida
para PC (SDR) tudo controlado pelo Arduino.
Controles de painel ganho de RF, volume e seleção de
filtros passa banda (frequencia e banda de passagem).
O Arduino é controlado por um controle remoto de TV Sony (pode
ser dos antigos ou novos ou um destes vendidos por camelô (para
TV Sony)), que
altera a frequencia e controla as
funções acima descritas.
O projeto somente tem alguns componentes criticos no defasador de
audio são resistores de 1% (5 valores) e capacitores de
polyester de 10nf, que devem ser selecionados com um LCmeter e devem
ficar com valores entre 1% de tolerancia (100pF).
* A recepção de LSB, USB ou CW é normal já
a
recepção de AM deve ser feita um USB ou LSB ouvindo
apenas a lateral.
Video no YouTube
Esquema Parte 1/4 :


Foto : Bobinas toko do filtro passa banda
Descrição :
Este BPF funciona com uma impedancia de 5,55 Ohms (50/9) de entrada e
de saida, estas impedancias são conseguidas via os dosi
transformadores de impedancia que estão na entrada e saida do
filtro. Com a baixa impedancia apenas um indutor e um capacitor fazem a
filtragem de banda, com cerca de 20dB de atenuação na
segunda armonica. O valor do indutor determina tambem a banda de
passagem por
exemplo com 8µH temos 200kHz (-3db), com 3,7µH temos
400kHz ... Eu usei muitos indutores queria cobrir abaixo de 500kHz, mas
como vimos com pouco capacitor (variavel) e muito indutor, a banda
passante diminui muito e ainda nosso transformador de impedancias teria
que
possuir mais voltas ou seja ter uma indutancia maior.
O rele acionado via controle remoto pelo arduino faz um bypass no BPF
ligando a antena diretamente ao receptor.
O amplificador de RF faz muita diferença e pode ser ajustado via
painel.
A seleção e ajuste do BPF é manual .. poderiam ser
automaticas mas o hardware para mudar a chave de onda teria 10 reles e
não foi viavel, já o ajuste não seria problema com
um diodo varicap.

Foto : devido as baixas indutancias envovidas dois indutores tiveram
que ser soldados diretamente na chave seletora.
Com cerca de 4 indutores podemos conseguir um otimo filtro de 80m a 10m.
Uma otima ideia seria usar um indutor central com um varicap de cada
lado, dobrando a eficiencia do filtro ou seja dois filtros em serie.
Se voce quiser desenhar um novo filtro, eu posso ajudar, é
só escrever.
Para maiores informações veja o link :
Filtro
passa banda
Esquema
parte 2 :


Foto : A direita QSD com 74AC74 (dead bug) e mixer 74HC4066 a esquerda
Descrição :
Receptor SDR comum sem maiores problemas, as modificações
ficam por conta da tensão de alimentação que
ajudam na diminuição dos tempos de
comutação. Assim o 74AC74 ficou com 5,7V e o 74HC4066 com
10,1V. A substituição do 74HC4066 por um CI moderno ajuda
muito, mas como fica dificil de comprar um no mercado nacional, optei
pelo 74HC4066.
Esquema parte 3 :


Foto : reles de comutação a esquerda LSB /USB , saida
para PC , acima no meio Rele de CW
Descrição :
Defasador
de audio
Filtro de
audio
AGC
Video do filtro
de audio 300Hz 3kHz

Foto : A esquerda no meio defasage de audio (potenciometro de
equilibrio) no centro filtro de AF (300Hz a 3kHz).
Filtro de CW
Sobre o filtro de CW desenhamos ele com um software ( o filtro de audio
tambem):
Um filtro passa banda tem dois estagios ...um filtro passa baixas e
um filtro passa altas ..assim fizemos o calculo de dois filtros com
dois estagios cada :
1.Filtro passa alta :

passa alta estagio 1

Passa
alta estagio 2

Passa
alta estagios 1 e 2
2. Filtro passa baixa

Passa
baixa estagio 1

Passa baixa estagio 2

Passa baixa estagios 1 e 2
Esquema parte 4


Foto : Arduino nano e modulo AD9850 montados em placa padrão de
pontos (ilhas) isolados.
Descrição :
Usamos um arduino nano para controle do DDS e do radio.
Para facilitar o hardware usamos um controle remoto de TV Sony, com ele
deixamos de colocar varias chaves e pelo menos um encoder.

Foto : Controles remotos Sony - a esquerda generico antigo - TVs
antigas (SKY-7333) -
centro generico novo - TVs novas MAX-039A - a direita original de TV.
Devido a diferenças entre eles eu sei apenas o teclado
numerico e outros dois botões Volume + (VOL+) e canal +
(CH+).
Na parte do VFO DDS como a frequencia maxima é de 45MHz e
necessitava de 120MHz, optei
por usar a terceira armonica do VFO, a partir de 10MHz na
recepção ...
Assim o VFO trabalha de 0 a 40MHz (frequencia de recepção
vezes quatro = 4 * F) até 9,999MHz e a partir de 10Mhz
trabalha com (a frequencia de recepção vezes 4 e
dividida por tres = 4*F/3)....
Desta forma de 10MHz na recepção o VFO trabalha em
13,333...já em 30MHz o VFO estará em 40Mhz. Abaixo de 10
Mhz temos recepção em 7Mhz VFO em 28MHz.

Foto : Layout do display, as cores não aparecem definidas nesta
foto.
Com Arduino controlamos algumas opções (tecla do controle
remoto entre parenteses):
VFO1 (VOL+) e VFO2 (CH+) podemos ajustar as frequencias dos VFOs
independentes
e com um clic corujar duas frequencias.
Mute (3) emudece o amplificador de audio.
AGC (1) liga ou desliga o AGC.
BPF (0) coloca o BPF entre a antena e o RX ou liga a antena
diretamente ao radio
LSB ou USB (7) seleciona a banda desejada.
PC (5) liga a saida estereo para o PC tornando o receptor em um
receptor SDR com VFO.
CW (9) liga o filtro de CW.
Já a mudança de casa decimal para esquerda (4) e
para direita (6).
Mudança acima na casa decimal selecionada (2)
Mudança abaixo na casa decimal selecionada (8).

Foto : Display mostrando o painel colorido em amarelo o que esta
selecionado (VFO1, LSB, AGC e BPF) alem da dezena de kHz. A Barra do
Smeter (que aparece inteira branca) tem a cor azul clara até S5
de S6 a S9 Verde e as ultimas 3 +10dB +20 e +30dB em roxo. (no
rodapé do display aparecem as cores claras)
Smeter:
O Smeter foi desenhado para ter 3dB para cada sinal S.
A barra grafica do Smeter mostra de 3 em 3 dB até S9 e S9+10,
S9+20 e S9+30db.
O valor S colocado do lado esquerdo do display é o valor
numérico da barra.
O ajuste do Smeter deve ser feito por comparação do valor
de ruido atmosférico ou de fundo e do valor de um sinal recebido
em um receptor comercial.
Eu fiz o ajuste de orelhometro (earmeter) mesmo, com S1 para ruido
muito baixo e S9+30 para sinais estupidamente altos (lineares de 2kW em
40m).

Foto : Vista geral do Receptor com montagem por modulos .
Resultado :
O receptor recebe bem OM com antena apropriada, mesmo com todos os
indutores colocados na pratica não conseguimos filtrar
estações abaixo de 800kHz.
Os 80m e 40m são recebidos de camarote (locais e DX SSB e CW).
A estação de 10Mhz do Observatorio Nacional (Radio
Relogio) tambem é recebida muito bem.
Estações locais e DX em 20m.

Foto : Vista geral dos modulos.
Problemas apareceram em 15M, devido ao VFO trabalhar em 3a armonica do
VFO o que representa exatamente 28MHz que é a frequencia
fundamental de 40m (28/4=7Mhz).
Apesar do filtro ser muito bom ele não consegue evitar a
presença de sinais de 40m.
Os sinais de 40m estarão em LSB enquanto os de 15m
estarão em USB, com o VFO em 28MHz para sinais de 7MHz teremos
LSB, já em 21MHz o VFO estará a 4*F/3 que resulta em USB.
Creio que a solução estará em fazer um novo VFO
usando o SI5351, com o uso do VFO em 4*F em toda a banda.
Já em 10m devido a má propagação ainda
não ouvi muitas estações.
Em 11m já corujei algumas rodadas.

Foto : vista por traz do painel dianteiro.
Conclusão :
Apesar da trombada em 15m o receptor tem um otimo desempenho, a
solução da troca de DDS certamente resolverá o
problema.
O Arduino mostrou ser competente para as funções
atribuidas a ele.
O display de 15 Reais (3US$) tambem correspondeu.
O receptor é muito silencioso, seletivo e estavel. (tenho
passado tardes trabalhando aqui no PC e corujando os 40m)
Apesar do pouco ganho em RF o receptor é bem sensivel para
sinais fracos.
Como novos desafios para o uso do arduino, poderiamos :
Colocar sintonia do filtro automatica usando valores tabelados de
capacitancia de um diodo varicap em função da frequencia
recebida.
Outra ideia seria colocar um scan automatico parando em uma
estação recebida. Seria baseado em valores do Smeter. De
certa forma isto já ocorre, pois o update do valor do Smeter
demora um pouco com um novo valor do sinal S, o arduino tem que apagar
o display para mostrar o novo valor e isto faz uma
interrupção acrecimo de frequencia ( como botão de
frequencia acima sempre apertado)
Sketch do Arduino
Nota : A banda lateral LSB ou USB é setada pelo controle remoto
e não esta atrelada ao uso do VFO1 ou VFO2, assim setada para
LSB em um VFO no outro continuará a mesma banda lateral
setada.
Temos um bug no programa : ao passar de 9999,990 kHz a banda lateral se
inverte e o programa não acusa. A inversão de banda
ocorre pelo fato de usarmos a 3a armonica do VFO.
Assim acima de 10Mhz o display marca LSB e na verdade é USB e
vice-versa.
Com a presença de VFO1 e VFO2 independentes e a inversão
de banda lateral acima de 10MHz a coisa se complicou e ainda não
acertei o software.
73 de py2ohh miguel
SKETCH DO ARDUINO :
#include <IRremote.h>
#include <TFT.h> // Arduino LCD library
#include <SPI.h>
#define cs 10
#define dc 8
#define rst 9
#define W_CLK 7
#define FQ_UD 6
#define DATA 5
#define RESET 4
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin,
LOW); }
volatile unsigned long frequency = 1000000;
volatile unsigned long freqini = 7000000;
volatile unsigned long freqini2 = 7100000;
float freqvelha = 0;
float freqvelha2 = 0;
long passo = 1000;
char fnal [15];
float VFO = 1 , V1, V2, V1velho, s, svelho;
int i , a;
int RECV_PIN = 12;
IRrecv irrecv(RECV_PIN);
decode_results lido;
int lsb= 0, agc=1, mute=0, cw=0, ant=0, pc=0 ;
int gs = 0;
TFT TFTscreen = TFT(cs, dc, rst);
int incr = 1;
int incr2 = 1;
int incrvelho = 1;
int incrvelho2 = 1;
int alt; //altura do diplay automatica
int larg; // largura do display automatica
// teclas do controle remoto tv sony nova/antiga
float n0 = 0x910 ; //tecla 0 key
float n1 = 0x10 ; // tecla 1 key
float n2 = 0x810 ; //tecla 2 key
float n3 = 0x410 ; //tecla 3 key
float n4 = 0xC10 ; //tecla 4 key
float n5 = 0x210 ; //tecla 5 key
float n6 = 0xA10 ; //tecla 6 key
float n7 = 0x610 ; //tecla 7 key
float n8 = 0xE10 ; //tecla 8 key
float n9 = 0x110 ; //tecla 9 key
float nf1 = 0x490 ; //tecla vol+ VFO1
float nf2 = 0x90 ; //tecla CH+ VFO2
void setup() {
TFTscreen.begin();
TFTscreen.background(0, 0, 0);
alt = TFTscreen.height();
larg = TFTscreen.width();
pinMode(FQ_UD, OUTPUT);
pinMode(W_CLK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(RESET, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(A0, OUTPUT);
pulseHigh(FQ_UD);
irrecv.enableIRIn(); // Inicializa o receptor IR
digitalWrite(A3,HIGH) ; // ligar AGC
}
void loop() {
freqini = 7000000;
sendFrequency((4*freqini));
gersin();
}
void tfr_byte(byte data)
{
for (int i = 0; i < 8; i++, data >>= 1) {
digitalWrite(DATA, data & 0x01);
pulseHigh(W_CLK);
}
}
// Send frequency and command word to AD9850
void sendFrequency(double frequency) {
int32_t freq = frequency * 4294967295 / (125000000 ); // note
125 MHz clock on 9850
for (int b = 0; b < 4; b++, freq >>= 8) {
tfr_byte(freq & 0xFF);
}
tfr_byte(0);
pulseHigh(FQ_UD);
}
void gersin() {
TFTscreen.background(0, 0, 0);
// TFTscreen.stroke(255, 255, 255);
TFTscreen.stroke(255, 255, 0);
TFTscreen.setTextSize(1);
TFTscreen.text(" RX HF
PHASE" , 0 , 2);
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 255, 255);
// TFTscreen.text("AGC Mute
PC Ant" , 0 , 32);
TFTscreen.text("AGC" , 10 , 34);
TFTscreen.text("BPF" , 130 , 34);
TFTscreen.text("LSB", 80 , 22);
TFTscreen.text("VFO1" , 40 , 22);
TFTscreen.stroke(0, 0, 255);
TFTscreen.text("PC" , 90 , 34);
TFTscreen.text("Mute", 50 , 34);
TFTscreen.text("CW" , 120 , 22);
//TFTscreen.stroke(255, 255, 255);
TFTscreen.stroke(255, 255, 0);
TFTscreen.setTextSize(1);
TFTscreen.text(" MHz
kHz Hz" , 0 , 69);
while (gs == 0) {
smeter();
if (VFO ==1) {
incrvelho2=incrvelho2 + 1;
if ((freqini != freqvelha) || (incr != incrvelho)) {
if (freqini >= 10000000) {
sendFrequency((4*freqini)/3); }
else {
sendFrequency((4*freqini));
}
TFTscreen.setTextSize(2);
format(freqini ,47);
freqvelha = freqini;
incrvelho = incr;
delay(50);
}}
if (VFO ==2) {
incrvelho=incrvelho + 1;
if ((freqini2 != freqvelha2) || (incr !=
incrvelho2)) {
if (freqini2 >= 10000000) {
sendFrequency((4*freqini2)/3); }
else {
sendFrequency((4*freqini2));
}
TFTscreen.setTextSize(2);
format(freqini2 ,84);
freqvelha2 = freqini2;
incrvelho2 = incr;
delay(50);
}}
if (irrecv.decode(&lido)) {
float result = (lido.value);
if (result) {
delay(50);
if (result ==n7) {
delay(50);
if (lsb == 0){
digitalWrite(A5,HIGH) ;
lsb = 1;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 0, 0);
TFTscreen.text("LSB" , 80 , 22);
TFTscreen.stroke(0, 255, 0);
TFTscreen.text("USB" , 80 , 22);
TFTscreen.setTextSize(2);
}
else
{
digitalWrite(A5,LOW) ;
lsb=0;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 0, 0);
TFTscreen.text("USB" , 80 , 22);
TFTscreen.stroke(0, 255, 255);
TFTscreen.text("LSB" , 80 , 22);
TFTscreen.setTextSize(2);
}
}
if (result ==n1) {
delay(50);
if (agc == 1){
digitalWrite(A3,LOW) ;
agc = 0;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 0, 255);
TFTscreen.text("AGC" , 10 , 34);
TFTscreen.setTextSize(2);
}
else
{
digitalWrite(A3,HIGH) ;
agc=1;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 255, 255);
TFTscreen.text("AGC" , 10 , 34);
TFTscreen.setTextSize(2);
}
}
if (result ==n3)
{
delay(50);
if (mute == 0){
digitalWrite(A1,HIGH);
mute = 1;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 255, 255);
TFTscreen.text("Mute" , 50 , 34);
TFTscreen.setTextSize(2);
}
else
{
digitalWrite(A1,LOW) ;
mute = 0;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 0, 255);
TFTscreen.text("Mute" , 50 , 34);
TFTscreen.setTextSize(2);
}
}
if (result ==n9)
{
delay(50);
if (cw == 0){
digitalWrite(A2,HIGH);
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 255, 255);
TFTscreen.text("CW" , 120 , 22);
TFTscreen.setTextSize(2);
cw = 1;
}
else
{
digitalWrite(A2,LOW) ;
cw = 0;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 0, 255);
TFTscreen.text("CW" , 120 , 22);
TFTscreen.setTextSize(2);
}
}
if (result ==n0)
{
delay(50);
if (ant == 0){
digitalWrite(A4,HIGH);
ant = 1;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 0, 255);
TFTscreen.text("BPF" , 130 , 34);
TFTscreen.setTextSize(2);
}
else
{
digitalWrite(A4,LOW) ;
ant = 0;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 255, 255);
TFTscreen.text("BPF" , 130 , 34);
TFTscreen.setTextSize(2);
}
}
if (result ==n5)
{
delay(50);
if (pc == 0){
digitalWrite(A0,HIGH);
pc = 1;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 255, 255);
TFTscreen.text("PC" , 90 , 34);
TFTscreen.setTextSize(2);
}
else
{
digitalWrite(A0,LOW) ;
pc = 0;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 0, 255);
TFTscreen.text("PC" , 90 , 34);
TFTscreen.setTextSize(2);
}
}
if (result == nf1) {
VFO=1 ;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 0, 0);
TFTscreen.text("VFO2" , 40 , 22);
TFTscreen.stroke(0, 255, 255);
TFTscreen.text("VFO1" , 40 , 22);
TFTscreen.setTextSize(2);
}
if (result == nf2) {
VFO=2 ;
TFTscreen.setTextSize(1);
TFTscreen.stroke(0, 0, 0);
TFTscreen.text("VFO1" , 40 , 22);
TFTscreen.stroke(0, 255, 0);
TFTscreen.text("VFO2" , 40 , 22);
TFTscreen.setTextSize(2);
}
if (result == n4) {
if (incr <=
6) incr ++ ;
}
if (result == n6) {
if (incr >=
1) (incr -- );
}
double valor = 0;
switch (incr) {
case 0:
valor = 0;
break;
case 1:
valor = 10;
break;
case 2:
valor = 100;
break;
case 3:
valor = 1000;
break;
case 4:
valor = 10000;
break;
case 5:
valor = 100000;
break;
case 6:
valor = 1000000;
break;
case 7:
valor = 10000000;
break;
}
if (VFO==1) {
if (result == n2) {
if (freqini <= 50000000) {
freqini = (freqini + valor);
}
if (freqini >
50000000) {
(freqini =
50000000);
}
}
if (result == n8) {
if (freqini >
valor) {
freqini = (freqini - valor);
}
else {
freqini = 0;
}
}
if ((freqini != freqvelha)
|| (incr != incrvelho)) {
TFTscreen.fill(0, 0, 0);
TFTscreen.stroke(0, 0, 0);
TFTscreen.rect(0, 43, 160, 20);
}
}
if (VFO==2) {
if (result == n2) {
if (freqini2 <= 50000000) {
freqini2 = (freqini2 + valor);
}
if (freqini2
> 50000000) {
(freqini2 =
50000000);
}
}
if (result == n8) {
if (freqini2
> valor) {
freqini2 = (freqini2 - valor);
}
else {
freqini2 = 0;
}
}
if ((freqini2 != freqvelha2)
|| (incr != incrvelho2)) {
TFTscreen.fill(0, 0, 0);
TFTscreen.stroke(0, 0, 0);
TFTscreen.rect(0, 80, 160, 20);
}
}
}
delay(50);
irrecv.resume();
}
}
}
void format(unsigned long value , int linha) {
unsigned long j = 10000000;
for (int i = 0; i <= 7; i++) {
int digit = (value / j) % 10;
incr == (7 - i) ? TFTscreen.stroke(0, 255, 255) :
TFTscreen.stroke(0, 255, 0);
String sfreqini = String(digit);
sfreqini.toCharArray(fnal, 15);
TFTscreen.text(fnal , 17 * i + 10, linha);
if ( (i == 4) || (i == 1)) {
TFTscreen.stroke(255, 255, 0);
TFTscreen.text("." , (17 * i + 17),
linha);
}
j /= 10;
}
delay(30);
}
void smeter() {
V2=0;
for (i=1; i<3; i++){
a = (analogRead(6));
V2=V2+a ;
}
V1=V2/2;
V1 = (a * 5000.0) / 1024.0;
if (V1 < 8) {(s=1); }
if ((V1 <10)&&(V1>7)) {(s=2); }
if ((V1 < 15)&&(V1>9)) {(s=3); }
if ((V1 < 20)&&(V1>14)) {(s=4); }
if ((V1 < 30)&&(V1>19)) {(s=5); }
if ((V1 < 40)&&(V1>29)) {(s=6); }
if ((V1 < 56)&& (V1>39)) {(s=7); }
if ((V1 < 80)&&(V1>55)) {(s=8); }
if ((V1 < 113)&&(V1>79)) {(s=9); }
if ((V1 < 356)&&(V1>112)) {(s=10); }
if ((V1 < 1130)&&(V1>355)) {(s=11); }
if ((V1 < 5000)&&(V1>1129)) {(s=12); }
if (s != svelho) {
TFTscreen.stroke(0, 0, 0);
TFTscreen.fill(0, 0, 0);
TFTscreen.rect(0, 103, 159, 25);
if (s>=1) {//S1
TFTscreen.fill(255, 220, 0);
//
TFTscreen.stroke(255,255, 0);
TFTscreen.stroke(0, 255, 255);
TFTscreen.setTextSize(1);
TFTscreen.rect(1, 125, 13, 3);
if (s==1) {
TFTscreen.text("S1" , 5 , 108);
}
delay(40);
}
if (s>=2) { //S2
TFTscreen.fill(255, 195, 0);
TFTscreen.rect(13, 124, 13, 4);
if (s==2) {
TFTscreen.text("S2" , 5 , 108);
}
delay(40);
}
if (s>=3) { //S3
TFTscreen.fill(255, 195, 0);
TFTscreen.rect(26, 123, 13, 5);
if (s==3) {
TFTscreen.text("S3" , 5 , 108);
}
delay(40);
}
if (s>=4) { //S4
TFTscreen.fill(255, 195, 0);
TFTscreen.rect(39, 122, 13, 6);
if (s==4) {
TFTscreen.text("S4" , 5 , 108);
}
delay(40);
}
if (s>=5) { //S5
TFTscreen.fill(255, 195, 0);
TFTscreen.rect(52, 121, 13, 7);
if (s==5) {
TFTscreen.text("S5" , 5 , 108);
}
delay(40);
}
if (s>=6) { //S6
TFTscreen.fill(255, 195, 0);
TFTscreen.rect(65, 120, 13, 8);
if (s==6) {
TFTscreen.text("S6" , 5 , 108);
}
delay(40);
}
if (s>=7) { //S7
if (s==7) {
//TFTscreen.setTextSize(1);
//
TFTscreen.stroke(0, 255, 255);
TFTscreen.text("S7" , 5 , 108);
}
TFTscreen.fill(120, 255, 0);
TFTscreen.rect(78, 119, 13, 9);
delay(40);
}
if (s>=8) { //S8
TFTscreen.fill(60, 255, 0);
TFTscreen.rect(91, 118, 13, 10);
if (s==8) {
TFTscreen.text("S8" , 5 , 108);
}
delay(40);
}
if (s>=9) { //S9
TFTscreen.fill(0, 255, 0);
TFTscreen.rect(104, 117, 13, 11);
if (s==9) {
TFTscreen.text("S9" , 5 , 108);
}
delay(40);
}
if (s>=10) { //S9+10dB
TFTscreen.fill(195, 0, 255);
TFTscreen.rect(117, 116, 13, 12);
if (s==10) {
TFTscreen.text("S9+10" , 5 , 108);
}
delay(40);
}
if (s>=11) { //S9+20dB
TFTscreen.fill(195, 0, 255);
TFTscreen.rect(130, 115, 13, 13);
if (s==11) {
TFTscreen.text("S9+20" , 5 , 108);
}
delay(40);
}
if (s==12) { //S9+30dB
TFTscreen.fill(195, 0, 255);
TFTscreen.rect(143, 114, 13, 14);
if (s==12) {
TFTscreen.text("S9+30" , 5 , 108);
}
delay(40);
}
delay(100);
svelho=s;
}
}