Lab_interaccio/2010/reloj_2wire_particula_20min/Photoduino.pde

575 lines
24 KiB
Plaintext
Raw Normal View History

2025-02-25 21:29:42 +01:00
/**
*
* - Photoduino
* - http://code.google.com/p/photoduino/
*
* This file is part of Photoduino.
*
* Photoduino is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Photoduino is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Photoduino. If not, see <http://www.gnu.org/licenses/>.
*/
/* ------------------------------------------------------------------------------------------- *
* *
* CONFIGURATION VALUES: *
* You can set the next configuration values *
* before compile and upload this sketch *
* *
* ------------------------------------------------------------------------------------------- */
//
// Language of menus:
// - Set the language of menus in LCD
//
// Valid values:
// - LANGUAGE_ES for (Spanish)
// - LANGUAGE_EN for (English)
//
#define LANGUAGE_ES
//
// Default Shutterlag:
// - The default value for shutterlag to load when you reset configs
//
// Valid values:
// - Number between 0 and 59999 in miliseconds
// - Check your camera model at: http://code.google.com/p/photoduino/wiki/CameraReference
//
#define DEFAULT_SHUTTERLAG 100
//
// Default intercicle time:
// - The default value in miliseconds camera needs to process photo and be ready for the next
//
// Valid values:
// - Number between 0 and 59999 in miliseconds
//
#define DEFAULT_INTERCICLE_TIME 200
//
// Pulse width for shooting flashes:
// - Time in microseconds of the pulse to shoot the flashes.
// - Increase this value if you have problems with your flash model (very rare).
//
// Valid values:
// - Number between 0 and 59999 in microseconds
//
#define DEVICES_FLASHES_SHOOTING_PULSE 1
//
// Camera mirror lock-up time limit:
// - When use the mirror lock-up shooting mode, all cameras has a limit time (about 30 seconds) to
// make the photo while the mirror is locked up. After that time, the mirror is automaticaly unlocked
// by the camera without taking photo. The next value is this time in miliseconds to say to photoduino
// when to re-lock-up the mirror if no photo has taken.
//
// Valid values:
// - Number between 0 and 59999 in miliseconds
//
#define DEVICES_CAMERA_MIRROR_LOCKUP_TIMELIMIT 31000
//
// Default sensor tunning mode:
// - When you set the limit of a sensor you have two modes available. Visual and numeric. This is the
// default value but also you can change this preference through the system config menu.
//
// Valid values:
// - SENSORLIMIT_VISUAL
// - SENSORLIMIT_NUMERIC
//
#define DEFAULT_system_interfaceSensorLimit SENSORLIMIT_VISUAL
//
// Arduino board type:
// - Make the firmware compatible with different boards
//
// Valid values:
// - BOARD_ARDUINO_DUEMILANOVE (With Atmega328)
// - BOARD_ARDUINO_MEGA
//
#define BOARD_ARDUINO_DUEMILANOVE
/* ------------------------------------------------------------------------------------------- *
* *
* IMPORTANT NOTE: *
* You don't need to modify the code below this lines *
* *
* ------------------------------------------------------------------------------------------- */
// Import libraries
#include <LiquidCrystal.h>
#include <EEPROM.h>
// Signature and version codes
#define SIGNATURE_CODE1 0x21 // day
#define SIGNATURE_CODE2 0x08 // month
#define SIGNATURE_CODE3 0x20 // century
#define SIGNATURE_CODE4 0x10 // year of century
#define CODE_MAYOR_VERSION 0x00 // mayor version
#define CODE_MINOR_VERSION 0x09 // minor version
// Default system config
#define DEFAULT_system_useBacklight true
#define DEFAULT_system_useSpeaker true
// Default interval mode config
#define DEFAULT_intervalMode_autofocusTime 0
#define DEFAULT_intervalMode_shutterLagTime DEFAULT_SHUTTERLAG
#define DEFAULT_intervalMode_useFlash1 false
#define DEFAULT_intervalMode_preFlash1Time 0
#define DEFAULT_intervalMode_useFlash2 false
#define DEFAULT_intervalMode_preFlash2Time 0
#define DEFAULT_intervalMode_preCloseTime 0
#define DEFAULT_intervalMode_intervalUnits UNITS_SECS
#define DEFAULT_intervalMode_intervalValue 1
#define DEFAULT_intervalMode_numCicles 0
// Audio trigger mode default config
#define DEFAULT_audioTriggerMode_sensorLimit 512
#define DEFAULT_audioTriggerMode_shootingMode SHOOTINGMODE_NORMAL
#define DEFAULT_audioTriggerMode_autofocusTime 0
#define DEFAULT_audioTriggerMode_shutterLagTime DEFAULT_SHUTTERLAG
#define DEFAULT_audioTriggerMode_preCloseTime 0
#define DEFAULT_audioTriggerMode_useFlash1 false
#define DEFAULT_audioTriggerMode_preFlash1Time 0
#define DEFAULT_audioTriggerMode_useFlash2 false
#define DEFAULT_audioTriggerMode_preFlash2Time 0
#define DEFAULT_audioTriggerMode_numCicles 0
#define DEFAULT_audioTriggerMode_interCicleTime DEFAULT_INTERCICLE_TIME
// Shock trigger mode default config
#define DEFAULT_shockTriggerMode_sensorLimit 512
#define DEFAULT_shockTriggerMode_shootingMode SHOOTINGMODE_NORMAL
#define DEFAULT_shockTriggerMode_autofocusTime 0
#define DEFAULT_shockTriggerMode_shutterLagTime DEFAULT_SHUTTERLAG
#define DEFAULT_shockTriggerMode_preCloseTime 0
#define DEFAULT_shockTriggerMode_useFlash1 false
#define DEFAULT_shockTriggerMode_preFlash1Time 0
#define DEFAULT_shockTriggerMode_useFlash2 false
#define DEFAULT_shockTriggerMode_preFlash2Time 0
#define DEFAULT_shockTriggerMode_numCicles 0
#define DEFAULT_shockTriggerMode_interCicleTime DEFAULT_INTERCICLE_TIME
// Barrier mode default config
#define DEFAULT_barrierMode_sensorLimit 512
#define DEFAULT_barrierMode_shootingMode SHOOTINGMODE_NORMAL
#define DEFAULT_barrierMode_autofocusTime 0
#define DEFAULT_barrierMode_shutterLagTime DEFAULT_SHUTTERLAG
#define DEFAULT_barrierMode_preCloseTime 0
#define DEFAULT_barrierMode_useFlash1 false
#define DEFAULT_barrierMode_preFlash1Time 0
#define DEFAULT_barrierMode_useFlash2 false
#define DEFAULT_barrierMode_preFlash2Time 0
#define DEFAULT_barrierMode_numCicles 0
#define DEFAULT_barrierMode_interCicleTime DEFAULT_INTERCICLE_TIME
// Flash slave default config
#define DEFAULT_flashSlave_sensorLimit 512
#define DEFAULT_flashSlave_useFlash1 true
#define DEFAULT_flashSlave_preFlash1Time 0
#define DEFAULT_flashSlave_useFlash2 true
#define DEFAULT_flashSlave_preFlash2Time 0
// LCD settings
#define LCD_COLS 16 // columns
#define LCD_ROWS 2 // rows
// Pinout settings
#define PINS_LCD_LED 13 //(digital pin)
#define PINS_LCD_RS 12 //(digital pin)
#define PINS_LCD_ENABLE 11 //(digital pin)
#define PINS_LCD_DB4 10 //(digital pin)
#define PINS_LCD_DB5 9 //(digital pin)
#define PINS_LCD_DB6 8 //(digital pin)
#define PINS_LCD_DB7 7 //(digital pin)
#define PINS_BUZZER 6 //(pwm6 pin)
#define PINS_SHUTTER 5 //(digital pin)
#define PINS_AUTOFOCUS 4 //(digital pin)
#ifdef BOARD_ARDUINO_MEGA // For ArduinoMega compatibility
#define PINS_FLASH1 56 // 56 = Mega 16 = Duemilanova //(digital pin)
#define PINS_FLASH2 55 // 55 = Mega 15 = Duemilanova //(digital pin)
#define PINS_RESERVED 54 // 54 = Mega 14 = Duemilanova //(digital pin)
#else
#define PINS_FLASH1 16 //(digital pin)
#define PINS_FLASH2 15 //(digital pin)
#define PINS_RESERVED 14 //(digital pin)
#endif
#define PINS_LASER PINS_RESERVED // alias(digital pin)
#define PINS_BTN_A 3 //(digital pin)
#define PINS_BTN_B 2 //(digital pin)
#define PINS_SENSOR_SHOCK 5 //(analog pin)
#define PINS_SENSOR_BARRIER 4 //(analog pin)
#define PINS_SENSOR_MIC 3 //(analog pin)
// Measure units
#define UNITS_MS 0 // miliseconds
#define UNITS_SECS 1 // seconds
#define UNITS_MINS 2 // minutes
#define UNITS_HOURS 3 // hours
#define UNITS_DAYS 4 // days
#define UNITS_CICLES 10 // cicles
#define UNITS_US 11 // microseconds
// Sensor limit modes
#define SENSOR_MODE_LOWER 0 // for trigg by lower values
#define SENSOR_MODE_HIGHER 1 // for trigg by higher values
// Shooting modes
#define SHOOTINGMODE_NORMAL 0 // Normal mode
#define SHOOTINGMODE_PREBULB 1 // Prebulb mode
#define SHOOTINGMODE_MIRRORLOCKUP 2 // Mirror lookup mode
// Interface modes
#define SENSORLIMIT_VISUAL 0 // Visual
#define SENSORLIMIT_NUMERIC 1 // Visual
// Keycodes
#define NO_KEY 0 // No keys pressed
#define KEY_A 1 // Button A was pressed
#define KEY_B 2 // Button B was pressed
#define KEY_AH 3 // Button A was pressed and holded (KEY_HOLD_TIME) milisecons
#define KEY_BH 4 // Button B was pressed and holded (KEY_HOLD_TIME) milisecons
// Keyboard times
#define KEY_DEBOUNCE_TIME 30 // debounce time (ms) to prevent flickering when pressing or releasing the button
#define KEY_HOLD_TIME 400 // holding period (ms) how long to wait for press+hold event
// Characters and symbols addreses on lcd eeprom
#define SYMBOL_DOWN 0x00
#define SYMBOL_UP 0x01
#define SYMBOL_BOX 0xff
// EEPROM size in bytes
#define EEPROM_SIZE 512
// EEPROM Addreses for signature code and version of firmware
#define EE_ADDR_SIGNATURE_CODE1 0x00 // BYTE
#define EE_ADDR_SIGNATURE_CODE2 0x01 // BYTE
#define EE_ADDR_SIGNATURE_CODE3 0x02 // BYTE
#define EE_ADDR_SIGNATURE_CODE4 0x03 // BYTE
#define EE_ADDR_CODE_MAYOR_VERSION 0x04 // BYTE
#define EE_ADDR_CODE_MINOR_VERSION 0x05 // BYTE
// EEPROM Addreses for system config
#define EE_ADDR_system_useBacklight 0x10 // BYTE
#define EE_ADDR_system_useSpeaker 0x12 // BYTE
#define EE_ADDR_system_interfaceSensorLimit 0x14 // BYTE
// EEPROM Addreses for interval mode config
#define EE_ADDR_intervalMode_autofocusTime 0x20 // WORD
#define EE_ADDR_intervalMode_shutterLagTime 0x22 // WORD
#define EE_ADDR_intervalMode_useFlash1 0x24 // BYTE
#define EE_ADDR_intervalMode_preFlash1Time 0x26 // WORD
#define EE_ADDR_intervalMode_useFlash2 0x28 // BYTE
#define EE_ADDR_intervalMode_preFlash2Time 0x2A // WORD
#define EE_ADDR_intervalMode_preCloseTime 0x2C // WORD
#define EE_ADDR_intervalMode_intervalUnits 0x2E // BYTE
#define EE_ADDR_intervalMode_intervalValue 0x30 // WORD
#define EE_ADDR_intervalMode_numCicles 0x32 // WORD
// EEPROM Addreses for audio trigger mode config
#define EE_ADDR_audioTriggerMode_sensorLimit 0x40 // WORD
#define EE_ADDR_audioTriggerMode_shootingMode 0x42 // BYTE
#define EE_ADDR_audioTriggerMode_autofocusTime 0x44 // WORD
#define EE_ADDR_audioTriggerMode_shutterLagTime 0x46 // WORD
#define EE_ADDR_audioTriggerMode_preCloseTime 0x48 // WORD
#define EE_ADDR_audioTriggerMode_useFlash1 0x4A // BYTE
#define EE_ADDR_audioTriggerMode_preFlash1Time 0x4C // WORD
#define EE_ADDR_audioTriggerMode_useFlash2 0x4E // BYTE
#define EE_ADDR_audioTriggerMode_preFlash2Time 0x50 // WORD
#define EE_ADDR_audioTriggerMode_numCicles 0x52 // WORD
#define EE_ADDR_audioTriggerMode_interCicleTime 0x54 // WORD
// EEPROM Addreses for shock trigger mode config
#define EE_ADDR_shockTriggerMode_sensorLimit 0x60 // WORD
#define EE_ADDR_shockTriggerMode_shootingMode 0x62 // BYTE
#define EE_ADDR_shockTriggerMode_autofocusTime 0x64 // WORD
#define EE_ADDR_shockTriggerMode_shutterLagTime 0x66 // WORD
#define EE_ADDR_shockTriggerMode_preCloseTime 0x68 // WORD
#define EE_ADDR_shockTriggerMode_useFlash1 0x6A // BYTE
#define EE_ADDR_shockTriggerMode_preFlash1Time 0x6C // WORD
#define EE_ADDR_shockTriggerMode_useFlash2 0x6E // BYTE
#define EE_ADDR_shockTriggerMode_preFlash2Time 0x70 // WORD
#define EE_ADDR_shockTriggerMode_numCicles 0x72 // WORD
#define EE_ADDR_shockTriggerMode_interCicleTime 0x74 // WORD
// EEPROM Addreses for barrier mode config
#define EE_ADDR_barrierMode_sensorLimit 0x80 // WORD
#define EE_ADDR_barrierMode_shootingMode 0x82 // BYTE
#define EE_ADDR_barrierMode_autofocusTime 0x84 // WORD
#define EE_ADDR_barrierMode_shutterLagTime 0x86 // WORD
#define EE_ADDR_barrierMode_preCloseTime 0x88 // WORD
#define EE_ADDR_barrierMode_useFlash1 0x8A // BYTE
#define EE_ADDR_barrierMode_preFlash1Time 0x8C // WORD
#define EE_ADDR_barrierMode_useFlash2 0x8E // BYTE
#define EE_ADDR_barrierMode_preFlash2Time 0x90 // WORD
#define EE_ADDR_barrierMode_numCicles 0x92 // WORD
#define EE_ADDR_barrierMode_interCicleTime 0x94 // WORD
// EEPROM Addreses for flash slave config
#define EE_ADDR_flashSlave_sensorLimit 0xA0 // WORD
#define EE_ADDR_flashSlave_useFlash1 0xA2 // BYTE
#define EE_ADDR_flashSlave_preFlash1Time 0xA4 // WORD
#define EE_ADDR_flashSlave_useFlash2 0xA6 // BYTE
#define EE_ADDR_flashSlave_preFlash2Time 0xA8 // WORD
#ifdef LANGUAGE_ES
// Messages list "123456789012345"
#define MSG_PHOTODUINO_V "Photoduino v"
#define MSG_READY "Listo!"
#define MSG_MAIN_MENU "Menu principal"
#define MSG_SHOCK_TRIGGER "Sensor Choque"
#define MSG_BARRIER_MODE "Sensor Barrera"
#define MSG_INTERVAL_MODE "Intervalometro"
#define MSG_AUDIO_TRIGGER "Sensor Audio"
#define MSG_FLASH_SLAVE "Flash esclavo"
#define MSG_AUDIO_CONFIG "Config Audio"
#define MSG_SHOCK_CONFIG "Config Choque"
#define MSG_BARRIER_CONFIG "Config Barrera"
#define MSG_SYSTEM_CONFIG "Config Sistema"
#define MSG_CONFIG "Configurar"
#define MSG_RUN "Ejecutar"
#define MSG_RUN_AUDIO "Ejecuta audio"
#define MSG_RUN_INTERVAL "Ejecuta intervalo"
#define MSG_RUN_BARRIER "Ejecuta barrera"
#define MSG_RUN_SHOCK "Ejecuta choque"
#define MSG_RUN_FLASH_SLAVE "Ejecuta esclavo"
#define MSG_RESET_CONFIG "Borrar config"
#define MSG_AUTOFOCUS_TIME "Tiempo enfoque"
#define MSG_SHUTTERLAG_TIME "Retardo obturador"
#define MSG_USE_FLASH1 "Usar Flash1"
#define MSG_USE_FLASH2 "Usar Flash2"
#define MSG_FLASH1_PRETIME "Flash1 pretiempo"
#define MSG_FLASH2_PRETIME "Flash2 pretiempo"
#define MSG_CLOSE_PRETIME "Cerrar pretiempo"
#define MSG_INTERVAL_UNITS "Unid. Intervalo"
#define MSG_INTERVAL_VALUE "Valor Intervalo"
#define MSG_CICLES "Ciclos"
#define MSG_SENSOR_LIMIT "Limite sensor"
#define MSG_SENSOR ">Sensor :"
#define MSG_LIMIT ">Limite :"
#define MSG_SHOCK_LIMIT "Limite choque"
#define MSG_BARRIER_LIMIT "Limite barrera"*/
#define MSG_SHOOTING_MODE "Modo de disparo"
#define MSG_INTERCICLE_TIME "Tiempo ciclos"
#define MSG_BACKLIGHT "Luz LCD"
#define MSG_SPEAKER "Pitidos"
#define MSG_RESETTING "Reiniciando.."
#define MSG_ABORTING "Cancelando.."
#define MSG_YES "SI"
#define MSG_NO "NO"
#define MSG_UNITS_US "us"
#define MSG_UNITS_MS "ms"
#define MSG_UNITS_SECS "segundos"
#define MSG_UNITS_MINS "minutos"
#define MSG_UNITS_HOURS "horas"
#define MSG_UNITS_DAYS "dias"
#define MSG_UNITS_CICLES "ciclos"
#define MSG_SHOOTINGMODE_NORMAL "Normal"
#define MSG_SHOOTINGMODE_PREBULB "Bulb previo"
#define MSG_SHOOTINGMODE_MIRRORLOCKUP "Levanta espejo"
#define MSG_VISUAL_MODE "Visual"
#define MSG_NUMERIC_MODE "Numerico"
#define MSG_INTERFACE_SENSOR_MODE "Ajuste Sensores"
#else
// Messages list "123456789012345"
#define MSG_PHOTODUINO_V "Photoduino v"
#define MSG_READY "Ready!"
#define MSG_MAIN_MENU "Main menu"
#define MSG_SHOCK_TRIGGER "Shock trigger"
#define MSG_BARRIER_MODE "Barrier mode"
#define MSG_INTERVAL_MODE "Interval mode"
#define MSG_AUDIO_TRIGGER "Audio trigger"
#define MSG_FLASH_SLAVE "Flash slave"
#define MSG_AUDIO_CONFIG "Audio Config"
#define MSG_SHOCK_CONFIG "Shock Config"
#define MSG_BARRIER_CONFIG "Barrier Config"
#define MSG_SYSTEM_CONFIG "System config"
#define MSG_CONFIG "Config"
#define MSG_RUN "Run"
#define MSG_RUN_AUDIO "Run audio"
#define MSG_RUN_INTERVAL "Run interval"
#define MSG_RUN_BARRIER "Run barrier"
#define MSG_RUN_SHOCK "Run shock"
#define MSG_RUN_FLASH_SLAVE "Run flashslave"
#define MSG_RESET_CONFIG "Reset config"
#define MSG_AUTOFOCUS_TIME "Autofocus time"
#define MSG_SHUTTERLAG_TIME "Shutterlag time"
#define MSG_USE_FLASH1 "Use Flash1"
#define MSG_USE_FLASH2 "Use Flash2"
#define MSG_FLASH1_PRETIME "Flash1 pretime"
#define MSG_FLASH2_PRETIME "Flash2 pretime"
#define MSG_CLOSE_PRETIME "Close pretime"
#define MSG_INTERVAL_UNITS "Interval units"
#define MSG_INTERVAL_VALUE "Interval value"
#define MSG_CICLES "Cicles"
#define MSG_SENSOR_LIMIT "Sensor limit"
#define MSG_SENSOR ">Sensor :"
#define MSG_LIMIT ">Limit :"
#define MSG_SHOOTING_MODE "Shooting mode"
#define MSG_INTERCICLE_TIME "Intercicle time"
#define MSG_BACKLIGHT "Backlight"
#define MSG_SPEAKER "Speaker"
#define MSG_RESETTING "Resetting..."
#define MSG_ABORTING "Aborting..."
#define MSG_YES "YES"
#define MSG_NO "NO"
#define MSG_UNITS_US "us"
#define MSG_UNITS_MS "ms"
#define MSG_UNITS_SECS "seconds"
#define MSG_UNITS_MINS "minutes"
#define MSG_UNITS_HOURS "hours"
#define MSG_UNITS_DAYS "days"
#define MSG_UNITS_CICLES "cicles"
#define MSG_SHOOTINGMODE_NORMAL "Normal"
#define MSG_SHOOTINGMODE_PREBULB "Pre-Bulb Mode"
#define MSG_SHOOTINGMODE_MIRRORLOCKUP "Mirror Lock-up"
#define MSG_VISUAL_MODE "Visual"
#define MSG_NUMERIC_MODE "Numeric"
#define MSG_INTERFACE_SENSOR_MODE "Sensor tunning"
#endif
// LiquidCrystal LCD control object instance
LiquidCrystal lcd(PINS_LCD_RS, PINS_LCD_ENABLE, PINS_LCD_DB4, PINS_LCD_DB5, PINS_LCD_DB6, PINS_LCD_DB7);
// Variables used on interrupt mode
volatile boolean cancelFlag = false; // Flag used to abort interrupt mode
// Global variables
byte lastKey = NO_KEY; // Last key pressed
boolean flagHoldKey = false; // Flag to ignore keys after a hold key
// System config in ram
boolean system_useBacklight;
boolean system_useSpeaker;
byte system_interfaceSensorLimit;
// Interval mode config in ram
unsigned int intervalMode_autofocusTime;
unsigned int intervalMode_shutterLagTime;
boolean intervalMode_useFlash1;
unsigned int intervalMode_preFlash1Time;
boolean intervalMode_useFlash2;
unsigned int intervalMode_preFlash2Time;
unsigned int intervalMode_preCloseTime;
byte intervalMode_intervalUnits;
unsigned int intervalMode_intervalValue;
unsigned int intervalMode_numCicles;
// Audio trigger mode config in ram
unsigned int audioTriggerMode_sensorLimit;
byte audioTriggerMode_shootingMode;
unsigned int audioTriggerMode_autofocusTime;
unsigned int audioTriggerMode_shutterLagTime;
unsigned int audioTriggerMode_preCloseTime;
boolean audioTriggerMode_useFlash1;
unsigned int audioTriggerMode_preFlash1Time;
boolean audioTriggerMode_useFlash2;
unsigned int audioTriggerMode_preFlash2Time;
unsigned int audioTriggerMode_numCicles;
unsigned int audioTriggerMode_interCicleTime;
// Shock trigger mode config in ram
unsigned int shockTriggerMode_sensorLimit;
byte shockTriggerMode_shootingMode;
unsigned int shockTriggerMode_autofocusTime;
unsigned int shockTriggerMode_shutterLagTime;
unsigned int shockTriggerMode_preCloseTime;
boolean shockTriggerMode_useFlash1;
unsigned int shockTriggerMode_preFlash1Time;
boolean shockTriggerMode_useFlash2;
unsigned int shockTriggerMode_preFlash2Time;
unsigned int shockTriggerMode_numCicles;
unsigned int shockTriggerMode_interCicleTime;
// Barrier mode config in ram
unsigned int barrierMode_sensorLimit;
byte barrierMode_shootingMode;
unsigned int barrierMode_autofocusTime;
unsigned int barrierMode_shutterLagTime;
unsigned int barrierMode_preCloseTime;
boolean barrierMode_useFlash1;
unsigned int barrierMode_preFlash1Time;
boolean barrierMode_useFlash2;
unsigned int barrierMode_preFlash2Time;
unsigned int barrierMode_numCicles;
unsigned int barrierMode_interCicleTime;
// Flash slave config in ram
unsigned int flashSlave_sensorLimit;
boolean flashSlave_useFlash1;
unsigned int flashSlave_preFlash1Time;
boolean flashSlave_useFlash2;
unsigned int flashSlave_preFlash2Time;
// Setups at startup
void setup()
{
// Create custom LCD symbols
byte char_arrow_down[8] = { B00000, B00100, B00100, B00100, B00100, B10101, B01110, B00100 };
byte char_arrow_up[8] = { B00100, B01110, B10101, B00100, B00100, B00100, B00100, B00000 };
// LCD initialize
lcd.begin( LCD_COLS, LCD_ROWS);
lcd.createChar(SYMBOL_DOWN, char_arrow_down);
lcd.createChar(SYMBOL_UP, char_arrow_up);
// Pinmode inputs
pinMode(PINS_BTN_A, INPUT);
pinMode(PINS_BTN_B, INPUT);
pinMode(PINS_SENSOR_SHOCK, INPUT);
pinMode(PINS_SENSOR_BARRIER, INPUT);
pinMode(PINS_SENSOR_MIC, INPUT);
// Pinmode outputs
pinMode(PINS_SHUTTER, OUTPUT);
pinMode(PINS_AUTOFOCUS, OUTPUT);
pinMode(PINS_FLASH1, OUTPUT);
pinMode(PINS_FLASH2, OUTPUT);
pinMode(PINS_LCD_LED, OUTPUT);
pinMode(PINS_LCD_RS, OUTPUT);
pinMode(PINS_LCD_ENABLE, OUTPUT);
pinMode(PINS_LCD_DB4, OUTPUT);
pinMode(PINS_LCD_DB5, OUTPUT);
pinMode(PINS_LCD_DB6, OUTPUT);
pinMode(PINS_LCD_DB7, OUTPUT);
pinMode(PINS_BUZZER, OUTPUT);
pinMode(PINS_RESERVED, OUTPUT);
// Initialize config
config_init();
// Init backlight
digitalWrite(PINS_LCD_LED, system_useBacklight);
// Turn off laser
laser_turnOff();
}
// Run manager
void loop(){
controller_run();
}