Arduino
TM1638
Probador nivel de batería
xsetaseta@gmail.com
/* xsetaseta@gmail.com Juan Galaz 7/SEP/2017 Nivel de carga de bateria */ #include <TM1638.h> //data(I/O) pin 8, clock(CLK) pin 9 , strobe(STB) pin 7 TM1638 module(8, 9, 7); #define ENTRADA1 A0 char cadena[50]; unsigned int vv1,test3v3; // modo=12 1.2V // modo=15 1.5V // modo=30 3.0V // modo=37 3.7V char modo=12; void setup() { //Serial.begin(9600); pinMode(ENTRADA1, INPUT); pinMode(A7, INPUT); //intensidad al minimo module.setupDisplay(1,0); module.setDisplayToString("test bat",0,0); delay(500); //toma la referencia de 3.3V test3v3=analogRead10(A7); modo=15; } void loop() { byte keys; long voltios1; int z1; vv1=analogRead10(ENTRADA1); voltios1=vv1*33; voltios1*=10; voltios1/=test3v3; z1=voltios1; switch(modo) { case 12: sprintf(cadena,"12u %03du",z1); module.setLEDs(vumeter(z1,120,100)); break; case 15: sprintf(cadena,"15u %03du",z1); module.setLEDs(vumeter(z1,150,110)); break; case 30: sprintf(cadena,"30u %03du",z1); module.setLEDs(vumeter(z1,300,240)); break; case 37: sprintf(cadena,"37u %03du",z1); module.setLEDs(vumeter(z1,370,300)); break; } module.setDisplayToString(cadena,0,0); module.setDisplayDigit(cadena[0]-48,0,1); module.setDisplayDigit(cadena[4]-48,4,1); // Serial.println(cadena); // sprintf(cadena,"vv1=%05d test=%05d ",vv1,test3v3); // Serial.println(cadena); keys = module.getButtons(); switch(keys) { case 1: modo=12; break; case 2: modo=15; break; case 4: modo=30; break; case 8: modo=37; break; } // while( 0 != module.getButtons()); delay(300); } // vumeter unsigned char vumeter(int vol,int ini, int fin) { unsigned int z,z1,z2,led,vu; z=ini-fin; z/=8; z1=1; z2=0; vu=0; for(led=0;led<8;led++) { if(vol>fin) vu=vu+z1; fin+=z; z1+=z1; } return(vu); } //lectura de 10 medidas y hace la media int analogRead10(int entrada) { int z,v; for(z=0,v=0;z<10;z++)v+=analogRead(entrada); v/=10; return(v); } |