Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // **************** Frequencimetro e voltagem 60Hz *********************
- // Usa ponte retificadora e 4N25
- #include <LiquidCrystal.h> // Biblioteca do LCD
- LiquidCrystal lcd(13,12,11,10,9,8); // Pinos do LCD
- unsigned int flag = 0; // flag para saber se houve interrupt
- int adc_value = 0; // Variavel para ADC de tensão
- long freq, // Frequencia calculada
- Tmedido, // Tempo entre um crosszero e outro
- Told, // Tempo do ultimo crosszero
- Tnew, // Tempo do crosszero atual
- Zera ; // Contador para limpar LCD
- void frequencia() // Função chamada pela interrupção
- {
- Tmedido = micros(); // Salva tempo atual em micros segundos
- Told = Tmedido - Tnew; // Ultimo crosszero = medido menos o novo
- Tnew = Tmedido; // Salva o medido como novo
- flag = 1; // Indica que houve interrupt
- }
- //=============================== Setup =======================================
- void setup()
- {
- Serial.begin(9600); // Inicializa Serial
- pinMode(2,INPUT); // D2 input Pino que permite interrupt
- lcd.begin(20, 2); // Inicializa LCD de 20 posiçoes e 2 linhas
- lcd.setCursor(1,0); // Posiciona cursor na 1 posição da 1a linha
- lcd.print(" FREQ VOLTS "); // Imprime no LCD V
- attachInterrupt(0, frequencia, RISING); // Enable interrupt no D2
- } // Interrupt 0, chama função frequencia, interrupt ao subir
- //=============================== Loop ========================================
- void loop()
- {
- //=============================== VOLTAGE ========================================//
- adc_value = analogRead(A1); // Le o valor da tensão
- lcd.setCursor(9,1); // Posiciona cursor na 10 posição da 2a linha
- lcd.print(adc_value * 0.00488); // Imprime no LCD valor da voltagem calculada
- lcd.print("V "); // Imprime no LCD V
- Serial.print(adc_value * 0.00488); // Imprime no Serial Monitor valor da voltagem calculada
- Serial.println(" V"); // Imprime no Serial Monitor V
- //=============================== Frequencia ==================================
- if (flag == 1) // Executa se houve interrupt.
- {
- freq = (502000/Told); // Calcula a frequencia
- lcd.setCursor(2,1); // Posiciona cursor na 3 posição da 2a linha
- lcd.print(freq); // Imprime no LCD valor acumulado dividido por 10
- lcd.print("Hz "); // Imprime no LCD Hz
- Serial.print(freq); // Imprime no Serial Monitor valor acumulado dividido por 10
- Serial.println(" Hz"); // Imprime no Serial Monitor Hz
- flag = 0; // Desliga flag de interrupt
- Zera = 0; // Limpa contador de limpeza de LCD
- }
- Zera++; // Incrementa contador para limpar LCD
- if (Zera >20)
- {
- lcd.setCursor(2,1); // Posiciona cursor n 3 posição da 2a linha
- lcd.print(" "); // Limpa linha 2 do LCD
- Zera = 0; // Limpa contador de limpeza de LCD
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement