#include // biblioteca comunicação #include // biblioteca LCD #include // biblioteca controle remoto #define W_CLK 7 // Pino D7 - ligue ao pino (CLK) "word load clock" do modulo AD9850 #define FQ_UD 6 // Pino D6 - ligue ao pino (FQ) "freq update" do modulo AD9850 #define DATA 5 //Pino D5 - ligue ao pino (DATA) "serial data load" do modulo AD9850 #define RESET 4 //Pino D4 - ligue ao pino (RST) "reset" do modulo AD9850 #define FREQCORR 0 // correção de frequencia por software #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); } volatile unsigned long frequencia = 1000000; // Starts at 10mhz String letra; // uma letra ou numero considerado como letra String palavra = ""; //uma palavra ou sequencia de letras long numero = 0; // um numero a palavra transformada em numero int freq; // valor da frequencia int IRRX_pino = 11; // define o pino de recepção do IR como D11 IRrecv irrecv(IRRX_pino); decode_results resultado; // apresenta o valor lido no IR em resultado float armazenavalor; // aramzena o valor lido do IR int num = 0; // num é um flag ou bandeira se altera a bandeira ocorre algo int digi = 5; // posição do cursor da frequencia começa no meio 5 double degrau = 0.1; // é o valor em que o cursor da frequencia esta int i = 1; // long frmax = 45000000; long frmin = 10; int espa = 1; String branco = " "; // Inicializa o display, geralmente. no endereco 0x27 o meu eh 0x3F LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // teclas do controle remoto float n0 = 0xFF6897 ; //tecla 0 float n1 = 0xFF30CF ; // tecla 1 float n2 = 0xFF18E7 ; //tecla 2 float n3 = 0xFF7A85 ; //tecla 3 float n4 = 0xFF10EF ; //tecla 4 float n5 = 0xFF38C7 ; //tecla 5 float n6 = 0xFF5AA5 ; //tecla 6 float n7 = 0xFF42BD ; //tecla 7 float n8 = 0xFF4AB5 ; //tecla 8 float n9 = 0xFF52AD ; //tecla9 float nn = 0xFF629D ; //tecla CH entrar valor numerico da freq. em kHz float nncfm = 0xFF906F ; //tecla EQ confirma valor numerico da frequencia float nce = 0xFF22DD ; //tecla <<= seta cursor a esquerda float ncd = 0xFF02FD ; //tecla =>> seta cursor a direita float nsobe = 0xFFA857 ; //tecla + sobe um valor na posição do cursor float ndesce = 0xFFE01F ; //tecla - abaixa um valor na posição do cursor void setup() { Serial.begin(9600); lcd.begin (16, 2); pinMode(FQ_UD, OUTPUT); pinMode(W_CLK, OUTPUT); pinMode(DATA, OUTPUT); pinMode(RESET, OUTPUT); pulseHigh(FQ_UD); irrecv.enableIRIn(); // Inicializa o receptor IR } void loop () { if (frequencia > frmax) { (frequencia = frmax) ; } if (frequencia < frmin) { (frequencia = frmin); } if (frequencia >= 10000000) { espa = 1; branco = " "; } if ((frequencia < 10000000) && (frequencia > 999999)) { (espa = 2); branco = " 0"; } if ((frequencia < 1000000) && (frequencia > 99999)) { (espa = 3); branco = " 00"; } if ((frequencia < 100000) && (frequencia > 9999)) { (espa = 4); branco = " 000"; } if ((frequencia < 10000) && (frequencia > 999)) { (espa = 5); branco = " 0000"; } if ((frequencia < 1000) && (frequencia > 99)) { (espa = 6); branco = " 00000"; } if ((frequencia < 100) && (frequencia > 9)) { (espa = 7); branco = " 00000"; } lcd.setCursor(2, 0); lcd.print("Frequencia"); lcd.setCursor(0, 1); lcd.print(branco); lcd.setCursor(espa, 1); sendFrequency(frequencia); lcd.print(frequencia); lcd.print(" Hz"); if (irrecv.decode(&resultado)) { armazenavalor = (resultado.value); if (armazenavalor == nn) { lcd.clear(); lcd.setCursor(10, 0); lcd.print("in kHz"); delay (1000); numerico(); lcd.clear(); } if (armazenavalor == ncd) { digi = (digi + 1); if (digi > 8 ) { digi = 1 ; } lcd.setCursor(digi, 1); lcd.cursor(); delay(1000); } if (armazenavalor == nce) { digi = (digi - 1); if (digi < 1 ) { digi = 8 ; } lcd.setCursor(digi, 1); lcd.cursor(); delay(1000); } if (armazenavalor == nsobe) //soma { do { degrau = degrau * 10; i = i + 1; } while (i < (10 - digi)); frequencia = frequencia + degrau; delay(500); i = 1; degrau = 0.1; } if (armazenavalor == ndesce) //abaixa { do { degrau = degrau * 10; i = i + 1; } while (i < (10 - digi)); frequencia = frequencia - degrau; delay(500); i = 1; degrau = 0.1; } lcd.noCursor(); irrecv.resume(); } num = 0; } void tfr_byte(byte data) { for (int i = 0; i < 8; i++, data >>= 1) { digitalWrite(DATA, data & 0x01); pulseHigh(W_CLK); //after each bit sent, CLK is pulsed high } } // Send frequency and command word to AD9850 void sendFrequency(double frequencia) { int32_t freq = frequencia * 4294967295 / (125000000 + FREQCORR); // 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 numerico() { // put your main code here, to run repeatedly: while (num == 0) { if (irrecv.decode(&resultado)) { armazenavalor = (resultado.value); if (armazenavalor == n1) { letra = "1"; palavra = palavra + letra; delay (500); } if (armazenavalor == n2) { letra = "2"; palavra = palavra + letra; delay (500); } if (armazenavalor == n3) { letra = "3"; palavra = palavra + letra; delay (500); } if (armazenavalor == n4) { letra = "4"; palavra = palavra + letra; delay (500); } if (armazenavalor == n5) { letra = "5"; palavra = palavra + letra; delay (500); } if (armazenavalor == n6) { letra = "6"; palavra = palavra + letra; delay (500); } if (armazenavalor == n7) { letra = "7"; palavra = palavra + letra; delay (500); } if (armazenavalor == n8) { letra = "8"; palavra = palavra + letra; delay (500); } if (armazenavalor == n9) { letra = "9"; palavra = palavra + letra; delay (500); } if (armazenavalor == n0) { letra = "0"; palavra = palavra + letra; delay (500); } // xero = xero + ero; //lcd.clear(); lcd.setCursor(0, 0); lcd.print(palavra); lcd.print("kHz"); // delay(2000); if (armazenavalor == nncfm) { palavra = (palavra + "000"); numero = palavra.toInt(); lcd.setCursor(0, 1); if (numero > 45000000) { (numero = 45000000); } if (numero < 1000) { (numero = 1000); } frequencia = numero; lcd.print(numero); freq = numero; palavra = ""; letra = ""; numero = 0; num = 1; delay(1000); } irrecv.resume(); } } }