Created
August 12, 2022 19:15
-
-
Save vsc55/04a07a553a86b198ea7a0ac61af52dba to your computer and use it in GitHub Desktop.
probadordefuenteLCD
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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