RuiViana

Untitled

May 4th, 2015
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.70 KB | None | 0 0
  1. // **************** Frequencimetro e voltagem 60Hz *********************
  2. // Usa ponte retificadora e 4N25
  3.  
  4. #include <LiquidCrystal.h> // Biblioteca do LCD
  5. LiquidCrystal lcd(13,12,11,10,9,8); // Pinos do LCD
  6.  
  7. unsigned int flag = 0; // flag para saber se houve interrupt
  8. int adc_value = 0; // Variavel para ADC de tensão
  9. long freq, // Frequencia calculada
  10. Tmedido, // Tempo entre um crosszero e outro
  11. Told, // Tempo do ultimo crosszero
  12. Tnew, // Tempo do crosszero atual
  13. Zera ; // Contador para limpar LCD
  14.  
  15. void frequencia() // Função chamada pela interrupção
  16. {
  17. Tmedido = micros(); // Salva tempo atual em micros segundos
  18. Told = Tmedido - Tnew; // Ultimo crosszero = medido menos o novo
  19. Tnew = Tmedido; // Salva o medido como novo
  20. flag = 1; // Indica que houve interrupt
  21. }
  22. //=============================== Setup =======================================
  23. void setup()
  24. {
  25. Serial.begin(9600); // Inicializa Serial
  26. pinMode(2,INPUT); // D2 input Pino que permite interrupt
  27. lcd.begin(20, 2); // Inicializa LCD de 20 posiçoes e 2 linhas
  28. lcd.setCursor(1,0); // Posiciona cursor na 1 posição da 1a linha
  29. lcd.print(" FREQ VOLTS "); // Imprime no LCD V
  30. attachInterrupt(0, frequencia, RISING); // Enable interrupt no D2
  31. } // Interrupt 0, chama função frequencia, interrupt ao subir
  32. //=============================== Loop ========================================
  33. void loop()
  34. {
  35. //=============================== VOLTAGE ========================================//
  36. adc_value = analogRead(A1); // Le o valor da tensão
  37. lcd.setCursor(9,1); // Posiciona cursor na 10 posição da 2a linha
  38. lcd.print(adc_value * 0.00488); // Imprime no LCD valor da voltagem calculada
  39. lcd.print("V "); // Imprime no LCD V
  40. Serial.print(adc_value * 0.00488); // Imprime no Serial Monitor valor da voltagem calculada
  41. Serial.println(" V"); // Imprime no Serial Monitor V
  42. //=============================== Frequencia ==================================
  43. if (flag == 1) // Executa se houve interrupt.
  44. {
  45. freq = (502000/Told); // Calcula a frequencia
  46. lcd.setCursor(2,1); // Posiciona cursor na 3 posição da 2a linha
  47. lcd.print(freq); // Imprime no LCD valor acumulado dividido por 10
  48. lcd.print("Hz "); // Imprime no LCD Hz
  49. Serial.print(freq); // Imprime no Serial Monitor valor acumulado dividido por 10
  50. Serial.println(" Hz"); // Imprime no Serial Monitor Hz
  51. flag = 0; // Desliga flag de interrupt
  52. Zera = 0; // Limpa contador de limpeza de LCD
  53. }
  54. Zera++; // Incrementa contador para limpar LCD
  55.  
  56. if (Zera >20)
  57. {
  58. lcd.setCursor(2,1); // Posiciona cursor n 3 posição da 2a linha
  59. lcd.print(" "); // Limpa linha 2 do LCD
  60. Zera = 0; // Limpa contador de limpeza de LCD
  61. }
  62. }
Add Comment
Please, Sign In to add comment