Saltar la navegación

Código Vumetro con LCD

Código Vumetro con Pantalla LCD

/*Conexiones micro
Micro https://a.aliexpress.com/_uXXb9C
Vcc a 3.3V de la placa
GND a GND
Out Micro a Pin A3 de la placa
*/
 
#define MIC_PIN A3 // Out del micro a pin A3(PIN analógico)
 
//Conexiones LCD per I2C(16x2)
//GND a GND
//VCC de LCD a 5V placa o alimentación externa
//Pin SDA de LCD a A4 de Arduino Uno o Nano
//Pin SCL de LCD a A5 de Arduino Uno o Nano
 
//Librerías y creación objeto LCD
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // 27 es la dirección que llevan por defecto LCD de 16 columnas X 2 filas
 
//Conexiones Neopíxels
#define LED_PIN    6  // Pin 6 DIGITAL de Arduino a Datos tira Neopíxels
//GND tira a GND placa o alimentación externa
//VCC a +5V
 
//Libreria, número de neopíxels de la tira y definición del objeto Neopíxels
#include <Adafruit_NeoPixel.h>
#define N_PIXELS  30  // Number of pixels in strand
Adafruit_NeoPixel  pixels = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
 
//Variables
int n;//variable donde almacenamos la lectura de salida de micro
int n_neopixels;//número de neopíxels que se encenderán en función de la lectura de salida de micro
int periodo = 10;//milisegundos que tarda en regenerar datos
unsigned long TiempoAhora=0;//variable creada para control de tiempos
int brightness = 100;//variable que controla el brillo de la tira
int minimo;//variables para fijar el intervalo de sonido que activa la tira de neopíxels
int maximo;
//Variables que nos permiten dividir la tira en 7 tramos
int t1=(N_PIXELS/7);
int t2=(N_PIXELS/7)*2;
int t3=(N_PIXELS/7)*3;
int t4=(N_PIXELS/7)*4;
int t5=(N_PIXELS/7)*5;
int t6=(N_PIXELS/7)*6;
 
//Conexiones potenciómetros
//Normalmente los potenciómetros se alimentan 5V y GND por los extremos y tienen la salida por el centro
//Potenciómetro de mínimo
#define analogPinMin  A0 //salida potenciómetro que fijará el sonido mínimo que active tira a pin A0 (pin analógico A0)
//Potenciometro de máximo
#define analogPinMax  A1 //salida potenciómetro que fijará el sonido máximo que active tira a pin A1 (pin analógico A1)
 
void setup() {
pixels.setBrightness(brightness); //fija el brillo de la tira en función de la variable brightness
pixels.begin();//inicia la tira
 
lcd.init();//activa LCD
lcd.backlight();//enciende la luz posterior del LCD
 
Serial.begin(9600);//activa el monitor serie de la computadora para poder ver los cambios en las variables
}
 
void loop() {
  set_limits();//lee los valores de las salidas de los poténciometros (0-1024)
  n= analogRead(MIC_PIN); // lee los valores de salida de micro
 lectura_lcd ();//muestra por la pantalla LCD: número de neopíxels encendidos, valor de salida micro, valor mínimo y máximo(salida potenciómetros de máximo y mínimo)  
 lectura_monitor_serie ();////muestra por monitor serie: número de neopíxels encendidos, valor de salida micro, valor mínimo y máximo(salida potenciómetros de máximo y mínimo) 
 
  n_neopixels=map(n, minimo, maximo, 0, N_PIXELS);
  
    
  if (n_neopixels<0){
  n_neopixels=0;
  }
  if (n_neopixels>N_PIXELS){
  n_neopixels=N_PIXELS;
  }
  for(int i=0; i<N_PIXELS; i++) {
    if(0<=i && i<t1){
     pixels.setPixelColor(i, pixels.Color(148, 0, 211));//violeta
     }
    else if(t1<=i&&i<t2){
     pixels.setPixelColor(i, pixels.Color(0, 0, 255));//blau
     }
    else if(t2<=i&&i<t3){
     pixels.setPixelColor(i, pixels.Color(0, 255, 0));//cian
     }
    else if(t3<=i&&i<t4){
     pixels.setPixelColor(i, pixels.Color(255, 0, 0));//verd
     }
    else if(t4<=i&&i<t5){
     pixels.setPixelColor(i, pixels.Color(255, 255, 0));//groc
     }
    else if(t5<=i&&i<t6){
     pixels.setPixelColor(i, pixels.Color(255, 165, 0));//taronja
     }
    else if(t6<=i&&i<N_PIXELS){
     pixels.setPixelColor(i, pixels.Color(255, 0, 0));//vermell
     }
    if(i >= n_neopixels) {
     pixels.setPixelColor(i, pixels.Color(0, 0, 0));
     }
     pixels.show();
  }
 
TiempoAhora = millis();
while(millis() < TiempoAhora+periodo){
  }
}
 
void set_limits(){
  minimo= analogRead(analogPinMin)/2 ;
  maximo = analogRead(analogPinMax);
 }
 
 void lectura_lcd (){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LEDs ");
lcd.setCursor(5, 0);
lcd.print(n_neopixels);
lcd.setCursor(9, 0);
lcd.print("OUT ");
lcd.print(n);
lcd.setCursor(0, 1);
lcd.print("MIN");
lcd.setCursor(4, 1);
lcd.print(minimo);
lcd.setCursor(8, 1);
lcd.print("MAX");
lcd.setCursor(12, 1);
lcd.print(maximo);
}
void lectura_monitor_serie (){
  Serial.print("Neopíxels ON= ");
  Serial.print(n_neopixels);
  Serial.print(" OUT MICRO= ");
  Serial.print(n);
  Serial.print(" Minimo = ");
  Serial.print(minimo);
  Serial.print(" Maximo = ");
  Serial.println(maximo);
  }