Skip to content

Instantly share code, notes, and snippets.

@vsc55
Created August 12, 2022 19:15
Show Gist options
  • Save vsc55/04a07a553a86b198ea7a0ac61af52dba to your computer and use it in GitHub Desktop.
Save vsc55/04a07a553a86b198ea7a0ac61af52dba to your computer and use it in GitHub Desktop.
probadordefuenteLCD
//Librerias
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include "WString.h"
#include "String.h"
//Variables a usar
#define PIN_5VSB A3 // Pin +5VSB
#define PIN_5V A1 // Pin +5V
#define PIN_33V A2 // Pin +3.3V
#define PIN_12V A0 // Pin +12V
unsigned long delaytime=100;
float average = 0;
float voltage = 0;
String volts0 ="";
String volts1 ="";
int rawValue = 0;
String temp = String(100);
String databuffer = "";
/*******************************************************
Probador de fuentes de PC by david lightman
Este programa es una cutipasteada furiosa de
codigos de varias cosas asi que si ven codigo
que no hace nada o declaraciones que no apuntan
a nada es por eso xD
Se usa el display alfanumerico 20x4 con el adaptador
serial I2C, que requiere 4 pines.
VCC, GND para alimentarlo y SDA y SCL para la data.
estos se conectan a los pines correspondientes del
arduino pro micro que es el que se usa en este caso
el pro micro es como un leonardo asi que seleccionar
leonardo en el programador.
ver foto adjunta para saber bien los pines como
conectarlo.
para leer el voltage utilizamos las entradas A0 a A3
el orden no importa ya que depende a que las conecten
ustedes en la plaqueta divisora resistiva (ver foto
del circuito)
la plaqueta tiene 4 circuitos iguales uno para cada
ad (cada voltage a medir) y consta de un divisor
resistivo (27K - 47K a masa) con un pote en paralelo
de 20K multivuelta al de 47K y un zenner 5v1 en
paralelo a la resistencia de 47K para proteccion.
(si le mandamos mas de 5V a la entrada del AD del
arduino lo cocinamos, eso lo protege).
********************************************************/
// instanciamos el display definiendo el tipo de display, propiedades y tipo de conexion
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 es para el modulo de I2C
// inicializamos el display, ponemos las etiquetas y creamos las rutinas que leen el voltage
void setup() {
lcd.begin(20, 4); // definimos las capacidades del display (20 x 4 caracteres)
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(" (+5VSB) (+5V) "); // imprimimos la etiqueta superior.
delay(10);
lcd.setCursor(0,1);
lcd.print(" "); // borramos donde van los voltages para que no haya fruta.
delay(10);
lcd.setCursor(0,2);
lcd.print(" (+3.3V) (+12V) " ); // etiqueta inferior.
delay(10);
}
// funcion para leer el voltage, leemos 3 veces y calculamos el valor promedio esto es para que la
// lectura sea mas estable, 15 es el fondo de escala, 1023 es porque el AD es de 10 bits (2 ^10)
// retornamos con los 2 valores en un string llamado databuffer (lo defini global asi que va a
// estar disponible en todo el programa.
int ReadVolt(int selectPin, int numMuestra = 3){
int i;
int average = 0;
for (i = 0; i < numMuestra; i++){
rawValue = analogRead(selectPin);
average = average + rawValue;
}
int voltage = (average/numMuestra) * (15.0 / 1023.0);
return voltage;
}
void ReadV0() {
voltage = ReadVolt(PIN_5VSB, 3);
volts0 = String(voltage);
voltage = ReadVolt(PIN_5V, 3);
volts1 = String(voltage);
databuffer =+ " "+volts0+" "+volts1+" ";
}
// segunda rutina que hace lo mismo pero lee los 2 valores de abajo (fijense que lo que hay entre
// parentesis de analogRead( ) es diferente, representa el pin del AD que estamos usando.
void ReadV1() {
voltage = ReadVolt(PIN_33V, 3);
volts0 = String(voltage);
voltage = ReadVolt(PIN_12V, 3);
volts1 = String(voltage);
databuffer =+ " "+volts0+" "+volts1+" ";
}
// Programa principal super sencillo lo unico que hace es llamar a cada funcion de lectura
// de voltage, mandarla al display, y esperar un ratito, el tiempo de espera esta definido
// al principio en la declaracion de la variable delaytime, si lo reducen va a ser mas rapido.
void loop()
{
ReadV0();
lcd.setCursor(0,1);
lcd.print(databuffer);
delay(delaytime);
ReadV1();
lcd.setCursor(0,3);
lcd.print(databuffer);
delay(delaytime);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment