Codigo completo:
// Arduino_Gotas_V190915
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// la dirección 0x3F puede cambiar en vuestra pantalla. Si no va probad con 0x27 //
//DECLARACION DE VARIABLES GENERAL
int retardoFlash=100;
int entregotas=100;
unsigned long momentoCorte=0;
int PosCol=0;
int PosFila=2;
int tamgota1=20;
int tamgota2=20;
int numdegotas=2;
//PINES ANALOGICOS
const int analogPinPotDcha = A3; // Potenciómetro izquierda
const int analogPinPotIzda = A2; // Potenciómetro derecha
//PINES DIGITALES
const int inPinBotonInicio = 10; // pin Botón1 Inicio proceso
const int inPinBotonSaltoLinea = 8; // pin Botón2 cambio linea pantalla
const int inPinBotonEmbrague = 7; // pin Botón3 para embragar potenciómetros
const int pinAlimentaEmisor=12; // pin alimentación Emisor
const int pinReceptorIR = 2; // pin receptor Infrarrojos
const int pinDisparaValvula=11; //pin de activación válvula
const int pinDisparoFlash = 13; // pin de Disparo del Flash
const int pinDisparadorCamara = 9; // pin disparador cámara
const int pinPilotoFlash = 6; // para poner un piloto del flash en la caja
void setup()
{
Serial.begin(9600);
pinMode(inPinBotonInicio, INPUT);
pinMode(inPinBotonSaltoLinea, INPUT);
pinMode(inPinBotonEmbrague, INPUT);
pinMode(pinAlimentaEmisor,OUTPUT);
pinMode(pinDisparaValvula,OUTPUT);
pinMode(pinDisparoFlash, OUTPUT);
pinMode(pinDisparadorCamara,OUTPUT);
pinMode(pinReceptorIR, INPUT);
digitalWrite(pinDisparoFlash,LOW);
digitalWrite(pinAlimentaEmisor, HIGH);
attachInterrupt(0,CorteBarrera,FALLING);
lcd.begin(20,4); // initializa el lcd
lcd.backlight();
lcd.setBacklight(HIGH);
lcd.clear();
Serial.println("Hola");
lcd.print("Version...V190915"); //++++++++++++++++++
espera(2000);
lcd.clear();
}
void loop()
{
EsperaPulsacion(); //llamada a función
Serial.println("pulsado");
DisparadorCamara(); //llamada a función
Serial.println("disparada cámara");
ActivaValvula(); //llamada a función
Serial.println("soltada gota");
ControlaInfrarrojos(); //llamada a función
//Serial.println("cortada barrera");
Dispara_Flash(); //llamada a función
Serial.println("flash disparado");
Serial.print("retardo= ");
Serial.println(retardoFlash);
}
void EsperaPulsacion(){ // ESPERA A QUE SE PULSE EL BOTON DE INICIO //
lcd.setCursor(0,4);
lcd.print(" ");
momentoCorte=0;
escribe_valor();
digitalWrite(pinAlimentaEmisor, HIGH);
espera(1000);
}
void DisparadorCamara(){ // ACTÚA EL DISPARADOR DE LA CAMARA //
lcd.setBacklight(LOW);
digitalWrite(pinDisparadorCamara, HIGH); //si no hay cable, esto lo haremos manualmente
espera(100);
digitalWrite(pinDisparadorCamara, LOW);
lcd.setCursor(0,4);
lcd.print("Disp ");
}
void ActivaValvula(){ // ACTIVA VÁLVULA PARA SOLTAR GOTA //
digitalWrite(pinDisparaValvula, HIGH); //si no hay válvula la soltaremos manualmente
espera(tamgota1);
digitalWrite(pinDisparaValvula, LOW);
if (numdegotas==2) {
espera(entregotas);
digitalWrite(pinDisparaValvula, HIGH); //si no hay válvula la soltaremos manualmente
espera(tamgota2);
digitalWrite(pinDisparaValvula, LOW);
}
lcd.print("Gota ");
}
void ControlaInfrarrojos(){ // CONTROLA LA BARRERA DE INFRARROJOS//
while(momentoCorte==0){
espera(1);
}
lcd.print("Cor ");
}
void Dispara_Flash(){ // DISPARA EL FLASH
int diferencia;
long tiempo;
tiempo=millis();
diferencia=tiempo-momentoCorte;
int tiempoquefalta=retardoFlash-diferencia;
if (tiempoquefalta<1){
tiempoquefalta=0;
}
espera(tiempoquefalta);
digitalWrite(pinDisparoFlash, HIGH);
espera(10);
digitalWrite(pinDisparoFlash,LOW);
digitalWrite(pinPilotoFlash, HIGH);
espera(10);
digitalWrite(pinPilotoFlash,LOW);
espera(1000);
lcd.print("Fl");
lcd.setBacklight(HIGH);
espera(1000);
}
void CorteBarrera(){ // ESTABLECE EL MOMENTO DE CORTE
if (momentoCorte==0){
momentoCorte=millis();
}
}
int espera(int tiempoEspera){ // FUNCION ESPERA
long tiempoInicio;
tiempoInicio=millis();
while (millis()<tiempoInicio+tiempoEspera){
}
}
void escribe_valor(){ // ACTUALIZA VARIABLES Y PANTALLA
int embragado;
int LecturaIzda;
int LecturaDcha;
int antLecturaIzda;
int antLecturaDcha;
int iniciopulsado;
int Dif_tamgota1;
int Dif_tamgota2;
int Dif_entregotas;
int Dif_retardoFlash;
lcd.blink();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("NumGotas ");
lcd.print(numdegotas);
lcd.setCursor(0,1);
lcd.print("Gota1 ");
lcd.print(tamgota1);
lcd.setCursor(10,1);
lcd.print("Gota2 ");
lcd.print(tamgota2);
lcd.setCursor(0,2);
lcd.print("Rflas ");
lcd.print(retardoFlash);
lcd.setCursor(10,2);
lcd.print("Entreg ");
lcd.print(entregotas);
PosCol=0;
PosFila=2;
lcd.setCursor(PosCol,PosFila);
espera(1000);
iniciopulsado=digitalRead(inPinBotonInicio);
while (iniciopulsado==LOW){
antLecturaIzda=analogRead(analogPinPotIzda)/5;
antLecturaDcha=analogRead(analogPinPotDcha)/5;
espera (100);
if (PosFila==0){
LecturaIzda=analogRead(analogPinPotIzda)/5;
if(LecturaIzda>antLecturaIzda+5){
numdegotas=2;
}
if(LecturaIzda<antLecturaIzda-5){
numdegotas=1;
}
lcd.setCursor(9,0);
lcd.print(" ");
lcd.setCursor(9,0);
lcd.print(numdegotas);
lcd.setCursor(0,0);
espera(30);
}
if (PosFila==1){
LecturaIzda=analogRead(analogPinPotIzda)/5;
if(LecturaIzda>antLecturaIzda){
Dif_tamgota1=LecturaIzda-antLecturaIzda;
tamgota1=tamgota1 + Dif_tamgota1;
}
if(LecturaIzda<antLecturaIzda){
Dif_tamgota1=antLecturaIzda-LecturaIzda;
tamgota1=tamgota1 - Dif_tamgota1;
if(tamgota1<1) tamgota1=1;
}
lcd.setCursor(6,1);
lcd.print(" ");
lcd.setCursor(6,1);
lcd.print(tamgota1);
lcd.setCursor(0,1);
espera(30);
LecturaDcha=analogRead(analogPinPotDcha)/5;
if(LecturaDcha>antLecturaDcha){
Dif_tamgota2=LecturaDcha-antLecturaDcha;
tamgota2=tamgota2 + Dif_tamgota2;
}
if(LecturaDcha<antLecturaDcha){
Dif_tamgota2=antLecturaDcha-LecturaDcha;
tamgota2=tamgota2 - Dif_tamgota2;
if(tamgota2<1) tamgota2=1;
}
lcd.setCursor(16,1);
lcd.print(" ");
lcd.setCursor(17,1);
lcd.print(tamgota2);
lcd.setCursor(0,1);
espera(30);
}
if (PosFila==2){
LecturaIzda=analogRead(analogPinPotIzda)/5;
if(LecturaIzda>antLecturaIzda){
Dif_retardoFlash=LecturaIzda-antLecturaIzda;
retardoFlash=retardoFlash + Dif_retardoFlash;
}
if(LecturaIzda<antLecturaIzda){
Dif_retardoFlash=antLecturaIzda-LecturaIzda;
retardoFlash=retardoFlash - Dif_retardoFlash;
if(retardoFlash<0) retardoFlash=0;
}
lcd.setCursor(6,2);
lcd.print(" ");
lcd.setCursor(6,2);
lcd.print(retardoFlash);
lcd.setCursor(0,2);
espera(30);
LecturaDcha=analogRead(analogPinPotDcha)/5;
if(LecturaDcha>antLecturaDcha){
Dif_entregotas=LecturaDcha-antLecturaDcha;
entregotas=entregotas + Dif_entregotas;
}
if(LecturaDcha<antLecturaDcha){
Dif_entregotas=antLecturaDcha-LecturaDcha;
entregotas=entregotas - Dif_entregotas;
if(entregotas<0) entregotas=0;
}
lcd.setCursor(16,2);
lcd.print(" ");
lcd.setCursor(17,2);
lcd.print(entregotas);
//lcd.print(33);
lcd.setCursor(0,2);
espera(30);
}
embragado=digitalRead(inPinBotonEmbrague);
while (embragado==HIGH) {
antLecturaIzda=analogRead(analogPinPotIzda)/5;
antLecturaDcha=analogRead(analogPinPotDcha)/5;
embragado=digitalRead(inPinBotonEmbrague);
}
if (digitalRead(inPinBotonSaltoLinea)==HIGH) {
PosFila=PosFila+1;
if (PosFila>3){
PosFila=0; }
lcd.setCursor(PosCol,PosFila);
espera(300);
}
iniciopulsado=digitalRead(inPinBotonInicio);
}
}