Web Sacosta
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);
}
Obra publicada con Licencia Creative Commons Reconocimiento Compartir igual 4.0