Código
Código C / C ++
/ * Medidor VU baseado em Arduino da KTAudio. Desenvolvido por ThomAce (Tamas Kamocsai) com base em siemenwauters, theredstonelabz e o medidor VU de michiel H. GNU GPL License v3 Desenvolvedor:ThomAce (Tamas Kamocsai) Mail:[email protected] Versão:1.0 Data da última modificação:2019.09.24 Versão original:https://www.instructables.com/id/ARDUINO-VU-METER/ Original descrição:medidor VU por siemenwauters, theredstonelabz e michiel H não se esqueça de curtir e se inscrever para apoiar meu trabalho. tnx Modificado por mircemk (Mirko Pavleski) * / # inclui Barra de bytes [8] ={B11111, B00000, B11111, B11111, B11111, B11111, B00000, B11111}; byte L [8] ={B00111, B01000, B10100, B10100, B10100, B10111, B01000, B00111}; byte R [8] ={B00111, B01000, B10110, B10101, B10110, B10101, B01000, B00111}; byte EndMark [8] ={B10000, B01000, B00100, B00100, B00100, B00100, B01000, B10000}; byte EmptyBar [8] ={B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111}; byte peakHoldChar [8] ={B11111, B00000, B011, B01110, B01110, B01110, B00000, B11111}; String main_version ="1.0"; int certo; // Variáveis para armazenar e calcular os níveis do canal const int numReadings =5; //Taxa de atualização. Valor mais baixo =taxa mais alta. 5 é o índice padrão R =0; int totalR =0; int maxR =0; int inputPinR =A0; // Pino de entrada analógico 0 para RIGHT channelint volR =0; int rightAvg =0; long peakHoldTime =100; // tempo de espera de pico em milissegundos de comprimento peakHold =0; int rightPeak =0; long decayTime =0; long actualMillis =0; int pin10 =10; // saída do ledint vermelho val =0; int pin9 =9; LiquidCrystal lcd (12, 11, 5, 4, 3, 2); // configuração de lcd evita setup () {lcd.begin (40, 2); // Configurando o LCD. 16 caracteres e 2 linhas lcd.createChar (1, Bar); lcd.createChar (3, R); lcd.createChar (4, EmptyBar); lcd.createChar (5, EndMark); lcd.createChar (6, peakHoldChar); // Mostrando mensagem e barra de carregamento String KTAudio ="MIRCEMK"; para (int i =0; i <=16; i ++) {lcd.setCursor (0, 0); lcd.print (KTAudio.substring (0, i)); atraso (50); } KTAudio ="detector EMF" + main_version; para (int i =0; i <=KTAudio.length (); i ++) {lcd.setCursor (0, 1); lcd.print (KTAudio.substring (0, i)); atraso (50); } atraso (500); lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Carregando ..."); para (int i =0; i <16; i ++) {lcd.setCursor (i, 1); lcd.write (4); } para (int i =0; i <16; i ++) {lcd.setCursor (i, 1); lcd.write (1); atraso (50); } atraso (500); lcd.clear (); decayTime =millis ();} void loop () {lcd.setCursor (0, 0); lcd.write ("intensidade EMF"); actualMillis =millis (); lcd.setCursor (0, 1); // Índice do canal R lcd.write (3); // símbolo R lcd.setCursor (15, 1); // tag de fechamento / índice de marca final 2 lcd.write (5); // tag de fechamento / marca final totalR =analogRead (inputPinR); if (totalR> =1) {totalR =restrição (totalR, 0, 100); // bagunce esses valores totalR =map (totalR, 0, 100, 1, 255); // para alterar a distância de resposta do dispositivo analogWrite (pin10, totalR); // * observe também que mexer no resistor deve mudar analogWrite (pin9, totalR); // a sensibilidade} else {// analogWrite (pin10, val); apenas aciona o led com // a intensidade da variável val analogWrite (pin10, 0); // a instrução else diz apenas ao microcontrolador analogWrite (pin9, 0); // para desligar a luz se não houver EMF detectado} if (totalR> maxR) {maxR =totalR; } indexR ++; if (indexR> =numReadings) {indexR =0; direita =maxR; maxR =0; } volR =direita / 3; se (volR> 14) {volR =14; } if (volR <(rightAvg - 2)) {if (decayTime (rightAvg + 2)) {volR =(rightAvg + 2); rightAvg =volR; } else {rightAvg =volR; } if (volR> rightPeak) {rightPeak =volR; } drawBar (volR, rightPeak, 1); if (decayTime