Paso 4: Software
Para ahorrar batería en el software tiene una función de retroiluminación de la LCD. Al pulsar cualquier tecla, se enciende la retroiluminación de la LCD.Código fuente:
Artículo http://english.cxem.net/arduino/arduino6.php
Versión 1.0
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#define axis_X 0 / / eje X de Joystic conectado a analógico 0
#define axis_Y 1 / eje Y de Joystic conectado a analógico 1
#define axis_Z 2 / botón eje Z de Joystic conectado a Digital 2
#define pinIRLED 10 / IR LED
#define LEDUFO 13 / LED a bordo
#define autoOFF 10 / / autoOFF retroiluminación LCD
Lcd(0x27,16,2) de LiquidCrystal_I2C; configurar la dirección de LCD a 0x27 para un 16 caracteres y 2 línea de la pantalla
int value_X, value_Y, value_Z = 0;   valores de eje
int pos = 0;                         posición actual (retraso 0 -, 1 - trabajo)
intervalo de int = 1;                    pausa entre tomas (seg)
int cntPict = 0;                     tomas Conde
trabajo boolean = false;
currentTime largo sin firmar;
unsigned TimeShot largo, TimeLCDOff;
void setup()
{
pinMode (axis_Z, entrada);         Botón de joystic
pinMode (pinIRLED, salida);      IR LED
LCD.init();                     init LCD
LCD.Backlight();                encender la luz de fondo LCD
LCD.Clear();                    borrar LCD
show_menu();                    menú de función
currentTime = millis();
TimeShot = currentTime;         contador de Disparos
TimeLCDOff = currentTime;       temporizador de luz de fondo
Serial.Begin(115200);
}
void loop()
{
value_X = analogRead(axis_X);    leer el valor analógico del eje X
value_Y = analogRead(axis_Y);    leer el valor analógico del eje Y
value_Z = digitalRead(axis_Z);   leer el valor del eje Z (botón) digital
value_Z = value_Z ^ 1;           invertir el valor
if(Working == false) {}
if(value_Y > 540) {/ / joystick hacia arriba
pos = 0;
LCD.Backlight();              LCD backlight ON
TimeLCDOff = currentTime;     nuevo valor de TimeLCDOff
show_menu();
}
else if (value_Y < 500) {/ / joystick abajo
POS = 1;
LCD.Backlight();              LCD backlight ON
TimeLCDOff = currentTime;     nuevo valor de TimeLCDOff
show_menu();
}
if(value_X > 530) {/ / palanca de mando izquierda
LCD.Backlight();              LCD backlight ON
TimeLCDOff = currentTime;     nuevo valor de TimeLCDOff
if(pos == 0) {}
--intervalo;
Si (value_X > 900) intervalo = intervalo-10;  izquierda completo joystick
Si (intervalo < 1) intervalo = 1;
}
show_menu();
}
else if (value_X < 490) {/ / palanca de mando derecha
LCD.Backlight();              LCD backlight ON
TimeLCDOff = currentTime;     nuevo valor de TimeLCDOff
if(pos == 0) {}
++ intervalo;
Si (value_X < 100) intervalo = intervalo de + 10;  palanca de mando completamente a la derecha
}
show_menu();
}
}
if(value_Z == 1) {/ / joystick botón Presione
LCD.Backlight();              LCD backlight ON
TimeLCDOff = currentTime;
if(Working == true) {}
trabajar = false;
pos = 0;
show_menu();
}
if(POS == 1) show_working();  Active el modo de trabajo
}
Delay(200);
currentTime = millis();
if(Working == true) {}
Si (currentTime > = (TimeShot + (intervalo * 1000))) {}
digitalWrite (LEDUFO, alto);                   parpadea el LED a bordo
Delay(100);
digitalWrite (LEDUFO, LOW);
takePicture();                                  enviar IR
TimeShot = currentTime;
++ cntPict;                                      aumentar las tomas de contador
show_working();                                 refrescar pantalla LCD
}
}
Si (currentTime > = (TimeLCDOff + (autoOFF * 1000))) {}
lcd.noBacklight();                              Contraluz del LCD apagado
}
}
void show_menu()
{
cntPict = 0;        cero fotos de contador
LCD.Clear();
lcd.setCursor (0, pos);
LCD.Print("*");     posición actual
lcd.setCursor (1, 0);
LCD.Print("Delay:");
lcd.setCursor (8, 0);
LCD.Print(Interval);
lcd.setCursor (1, 1);
LCD.Print ("trabajo ir");
}
void show_working()
{
LCD.Clear();
lcd.setCursor (3, 0);
LCD.Print("Working...");
lcd.setCursor (2, 1);
LCD.Print("shots:");
lcd.setCursor (9, 1);
LCD.Print(cntPict);
trabajo = true;
}
void pulseON (int pulseTime) {}
endPulse largo sin signo = micros() + pulseTime;        crear los microsegundos para pulso para
mientras que (micros() < endPulse) {}
digitalWrite (pinIRLED, HIGH);                       Encienda IR
delayMicroseconds(13);                              el reloj de medio ciclo de 38Khz - por ejemplo, la 'por' parte de nuestra onda
digitalWrite (pinIRLED, bajo);                        Apague el IR
delayMicroseconds(13);                              retardo para la otra mitad del ciclo para generar onda / oscilación
}
}
void pulseOFF (unsigned startDelay largo) {}
endDelay largo sin signo = micros() + startDelay;       crear los microsegundos para retrasar por
while(micros() < endDelay);
}
void takePicture() {}
para (int i = 0; i < 2; i ++) {/ / impulso de enviar dos veces
pulseON(2336);
pulseOFF(646);
.......
.......
.......
pulseON(99);
pulseOFF(646);
}
}
Video:
Descargar código completo del PDE y Fritzing proyecto f












