Hola amigos. Estoy haciendo un proyecto para cargar baterias con un alternador de coche utilizando un motor de gasolina, algo parecido a esto:
Entonces mi idea es introducir con un teclado matricial los amperios que tiene la bateria y que muestre en el lcd los minutos restantes y que a cada minuto se actualice el lcd, para finalmente cuando se termine la cuenta atras, se active un rele para cortar la corriente del motor y este se detenga.
Ya tengo el codigo en arduino bastante avanzado, pero me falta hacer la funcion de cuenta atras y que se actualize el lcd a cada minuto.
Hasta aqui he llegado:
Ahora habria que pasar esos 40 minutos a segundos (eso no es problema ya que solo hay que multiplicarlo por 60) y con la funcion millis internamente hacer una funcion de cuenta atras, pero el lcd solo muestre los minutos restantes y se actualice a cada minuto.
Este es el codigo que tengo de momento:
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define I2C_ADDR 0x27
const byte filas = 4;
const byte columnas = 4;
byte pinesF[filas] = {9,8,7,6};
byte pinesC[columnas] = {5,4,3,2};
char teclas[filas][columnas] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad teclado = Keypad(makeKeymap(teclas), pinesF, pinesC, filas, columnas);
char tecla;
int v1 = 0;
int v2 = 0;
int v3 = 0;
LiquidCrystal_I2C lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);
void setup()
{
lcd.begin (16,2);
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home ();
lcd.print("Amp. bateria:");
}
void loop() {
v1 = GetNumber();
v2 = GetNumber();
v3 = GetNumber();
}
int GetNumber()
{
int num = 0;
char key = teclado.getKey();
while(key != 'D')
{
switch (key)
{
case NO_KEY:
break;
case '0': case '1': case '2': case '3': case '4': //Muestra en el lcd los digitos pulsados
case '5': case '6': case '7': case '8': case '9':
lcd.print(key);
num = num * 10 + (key - '0');
break;
case '*': //Valida los amperios introducidos y hace el calculo de los minutos restantes
lcd.setCursor (0,2);
num = num /2.5; //El alternador que utilizo es de 150 amperios/hora, asi que 150/60=2.5
lcd.print(String("Restante: ") + int(num) + String("min."));
break;
case '#': //Resetea el lcd como al principio por si nos hemos equivocado al introducir los amperios
num = 0;
lcd.clear();
lcd.print("Amp. bateria:");
break;
}
key = teclado.getKey();
}
return num;
}
Cualquier ayuda sera bien recibida. Un saludo.