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