Hola a todos y gracias de antemano.
Escribo para hacer una consulta sobre la programacion de mi arduino uno atmega 16u2.
Anduve largo tiempo liado realizando una programacion para llevar a cabo el proceso de maceracion de cerveza mediante arduino. Al final consegui el proposito supongo que con muchos errores, pero funciona. Os muestro la programacion:
int rela = 2;
int relb = 3;
int pina = 5;
int pinb = 6;
int pinc = 4;
int ledv = 10;
int leda = 16;
int ledr = 15;
int i = 0;
int u = 0;
int o = 0;
void setup()
{
pinMode(rela, OUTPUT);
pinMode(relb, OUTPUT);
pinMode(pina, INPUT);
pinMode(pinb, INPUT);
pinMode(pinc, INPUT);
pinMode(ledv, OUTPUT);
pinMode(leda, OUTPUT);
pinMode(ledr, OUTPUT);
}
void loop()
{
if(digitalRead(pinc)) //si pulsamos interruptor de arduino
{
while ( o <=1)//solo lo repetira una vez
{
digitalWrite(rela, HIGH); //activamos proceso i rele de termostato1=resistencia
o++;
i = digitalRead (0);
}}
if(digitalRead(pina )){//cuando termostato1 llega a la temperatura y entra rele de alarma
while ( i <=1 ) //repetimos el proceso solo una vez
{
if ( o ==2){
digitalWrite (ledv, HIGH);
delay(5000);//esperar x segundos. 1ª parada de maceracion
digitalWrite (ledv, LOW);
digitalWrite(rela, LOW);//desactivamos rele de termostato1=resistencia
digitalWrite(relb, HIGH);//activamos rele de termostato2=resistencia
i++;
u = digitalRead (0);
}
else {
i++;
}
}}
if(digitalRead(pinb )){ //si entra alm de termostato 2
while ( u <=1) //repetimos el proceso solo una vez
{
if ( i ==2 ){
digitalWrite (leda, HIGH);
delay(5000);//esperar x segundos.2ª parada de maceracion
digitalWrite (leda, LOW);
digitalWrite(relb, LOW);
digitalWrite(rela,LOW); //caer los dos reles de resistencia 1
digitalWrite (ledr, HIGH);
u++;
}
else{
u++;
}
}}
if (digitalRead (rela)){
digitalWrite (ledr,LOW);
digitalWrite (ledv, HIGH);
delay (200);
digitalWrite (ledv, LOW);
delay (200);
}
if (digitalRead (relb) == HIGH && digitalRead (rela) == LOW){
digitalWrite (leda, HIGH);
delay (200);
digitalWrite (leda, LOW);
delay (200);
}}
Ahora viene mi quebradero de cabeza, y es que como los tiempos de pausa del macerado varian de un tipo a otro de cerveza, pense que no era un buen plan el tener que estar conectando con el ordenador, cada dos por tres, para cambiar los delay de la programacion. Se me ocurrio que con un teclado y una pantallita le indicaria los tiempos de los delay y asunto arreglado. Pero me estoy volviendo loco intentando comprender los programas ya realizados con teclados y pantallas asi que he decidido pediros ayuda. La programacion que muestro acontinuacion seria la que añadiria a la anterior. Esto es todo lo que he sacado en claro:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 13, 10, 9, 8); //pines de control de la lcd
#include <Keypad.h>
const byte filas = 4; //four rows
const byte columnas = 3; //three columns
char teclas[filas][columnas] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'#','0','*'}
};
byte PinsFilas[filas] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte PinsColumnas[columnas] = {8, 7, 6}; //connect to the column pinouts of the keypad
Keypad teclado = Keypad( makeKeymap(teclas), PinsFilas, PinsColumnas, filas, columnas );
char tecla;
void setup(){
Serial.begin(9600);
}
void loop(){
char tecla = teclado.getKey();
if (key != NO_KEY){
Serial.println(key);
}
}
Me he bloqueado. Quizas de intentar comprender tanto programa realizado por otra gente y no coger un buen tutorial.
Lo que intento es que cuando conecto el arduino me de la opcion de elegir los minutos de espera que quiero en cada escalon y una vez arranque en el renglon de arriba aparezca tiempo 1 y al lado los minutos y segundos descontando. En el renglon de abajo de la pantalla apareceria tiempo 2 y el tiempo programado. Este comenzaria a descontar cuando llegara su turno. Me gustaria elegir solo los minutos y que en la pantalla aparezca, cuando esta descontando o en espera, minutos y segundos. No se si esto sera mucho pedir o si este foro no esta para este tipo de consultas. De todas formas gracias.