Page 1 sur 1

Stepduino à partir du Photoduino

MessagePosté: 27 Déc 2011 14:08
de Fredlab
Bonjour.

Comme je suis incapable d'aligner des lignes de code à partir d'une feuille blanche (j'ai su le faire avec du HTML, mais là, ça me dépasse - je manque aussi de temps), j'essaye d'adapter le code du "Photoduino" dont les morceaux sont téléchargeables ICI

Une fois dézippé, le dossier contient plusieurs fichiers au format ".pde"

Image

Visiblement, il y a des incompatibilités entre les ".pde" et le soft d'Arduino sur mon Mac (qui sauvegarde les "skecth" au format ".ino"
Bref, j'ouvre ces fichiers ".pde" avec un éditeur de texte, je copie et je colle dans un nouveau sketch.
Je modifie (je stepduinise) le code et j'enregistre.

Re: Stepduino à partir du Photoduino

MessagePosté: 27 Déc 2011 14:16
de Fredlab
Les différents fichiers correspondent à différentes parties du programme.
Je suppose qu'il faut les mettre bout à bout puis tout envoyer à l'Arduino pour que le tout fonctionne.

Le Photoduino présente de nombreuses fonctions, il gère des entrées, des sorties, il se paramètre via des menus (en deux langues) sur un écran LCD (16 colonnes, deux rangs) via deux boutons "A" et "B" (selon la pression sur les boutons, on passe d'un item à un autre ou on valide un item ce qui permet de passer à des sous-menus, ou entrer des valeurs - c'est ce que j'ai compris à partir des excellentes videos proposées sur le site)

Le Stepduino gère des entrées (d'eventuels microrupteurs), des sorties (commande d'un moteur pap et d'un appareil photo... Christian rajoutera un module Solarox). Il se paramètre via des menus qui s'affichent sur un écran LCD (nous avons tous le modèle DFrobot) et grâce à cinq boutons.

Re: Stepduino à partir du Photoduino

MessagePosté: 27 Déc 2011 14:26
de Fredlab
En ouvrant le fichier "Photoduino.pde", il me semble reconnaitre ce qu'il doit y avoir au début du sketche, à savoir la définition des variables (valeurs par défaut, texte des menus...)

Le voici

Code: Tout sélectionner
/**
*
* - 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();
}


J'ai viré une bonne partie des trucs qui ne devraient pas servir pour le Stepduino, j'ai modifié des noms de variables, changé le texte des menus... a priori, j'ai défini l'usage des 5 boutons du LCD... etc...
Ca ressemble à ça

Code: Tout sélectionner
/**
*
* - Stepduino
* - code repris sur le projet photoduino
* - http://code.google.com/p/photoduino/
*
* This file is part of Stepduino.
*/

/* ------------------------------------------------------------------------------------------- *
*                                                                                             *
*                                      CONFIGURATION VALUES:                                  *
*                             You can set the next configuration values                       *
*                              before compile and upload this sketch                          *
*                                                                                             *
* ------------------------------------------------------------------------------------------- */

//
// choix des menus :
//
#define MENUS               
//
// Default intercicle time: -> temps de déplacement du chariot et de stabilisation
// - 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          5000
//
// taille du pas -> selon les capacités du moteur et de la vis
// Valid values:
// - Number between 0 and 59999 in micrometre
//
#define DEFAULT_TAILLE_PAS           1

/* ------------------------------------------------------------------------------------------- *
*                                                                                             *
*                                     IMPORTANT NOTE:                                         *
*                        You don't need to modify the code below this lines                   *
*                                                                                             *
* ------------------------------------------------------------------------------------------- */


// Import libraries
#include <LiquidCrystal.h> 
#include <EEPROM.h>

// Default system config
#define DEFAULT_system_useBacklight                   true
#define DEFAULT_system_useSpeaker                     false

// Valeur du délai par défaut
#define DEFAULT_intervalMode_numCicles                0

// Valeurs par défaut nombre de pas - mode "empirique" - 10 pas à faire par défaut
#define DEFAULT_nbre_pas_cent                         0
#define DEFAULT_nbre_pas_dix                          1
#define DEFAULT_nbre_pas_unit                         0

// Valeurs par défaut des distances
// Valeurs par défaut taile du pas - mode "empirique" - 10 micromètres par défaut
#define DEFAULT_taille_pas_10_000_0                   0
#define DEFAULT_taille_pas_01_000_0                   0
#define DEFAULT_taille_pas_00_100_0                   0
#define DEFAULT_taille_pas_00_010_0                   1
#define DEFAULT_taille_pas_00_001_0                   0
#define DEFAULT_taille_pas_00_000_1                   0
// Valeurs par défaut épaisseur du sujet (micromètre) - mode "calcul" + 1000 micromètres par défaut
#define DEFAULT_epaisseur_sujet_100_000               0
#define DEFAULT_epaisseur_sujet_010_000               0
#define DEFAULT_epaisseur_sujet_001_000               1
#define DEFAULT_epaisseur_sujet_000_100               0
#define DEFAULT_epaisseur_sujet_000_010               0
#define DEFAULT_epaisseur_sujet_000_001               0

// Valeurs par défaut du rapport - mode "calcul" - rapport de 1 par défaut
#define DEFAULT_rapport_dix                           0
#define DEFAULT_rapport_unit                          1
#define DEFAULT_rapport_dixieme                       0

// Valeurs par défaut du diaphragme - mode "calcul" - f/1 par défaut
#define DEFAULT_diaph_dix                          0
#define DEFAULT_diaph_unit                         1
#define DEFAULT_diaph_dixieme                      0

// Valeurs par défaut du delai (en secondes) - à voir avec numcicle - 5 secondes par défaut
#define DEFAULT_delai_cent                         0
#define DEFAULT_delai_dix                          0
#define DEFAULT_delai_unit                         5

////////// Définir les broches du LCD (pins)  /////////////////////////
LiquidCrystal lcd(8, 9, 4, 5, 6, 7, 10);

////////////////// Définition des E/S  ////////////////
int PinBouton = 0; // broche analogique (A0) utilisée pour les 5 boutons
int PinMicrorupteur_avant = 1 // broche analogique (A1) utilisée pour le microrupteur à l'avant de la platine
int PinMicrorupteur_arriere = 2 // broche analogique (A2) utilisée pour le microrupteur à l'arrière de la platine

// Pinout settings - cette façon de coder est équivalente à celle juste au-dessus
#define PINS_SHUTTER1          2  //(pwm6 pin)
#define PINS_SHUTTER2          3  //(pwm6 pin - en réserve)
#define PINS_BUZZER            1  //(pwm6 pin)
#define PINS_MOTOR1            11  //(digital pin)
#define PINS_MOTOR2            12  //(digital pin)
#define PINS_MOTOR3            13  //(digital pin)

// Measure units
#define UNITS_MS             0  // miliseconds
#define UNITS_SECS           1  // seconds
#define UNITS_UM             2  // micrometres
#define UNITS_CICLES         3 // cicles

// define some values used by the panel and buttons
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// EEPROM size in bytes
#define EEPROM_SIZE         512

// EEPROM Addreses for system config
#define EE_ADDR_system_useBacklight                 0x10 // BYTE
#define EE_ADDR_system_useSpeaker                   0x12 // BYTE

// EEPROM Addreses for menu step1
#define EE_ADDR_nbre_pas_cent                       0x20 // WORD
#define EE_ADDR_nbre_pas_dix                        0x22 // WORD
#define EE_ADDR_nbre_pas_unit                       0x24 // WORD
#define EE_ADDR_taille_pas_10_000_0                 0x26 // WORD
#define EE_ADDR_taille_pas_01_000_0                 0x28 // WORD
#define EE_ADDR_taille_pas_00_100_0                 0x2A // WORD
#define EE_ADDR_taille_pas_00_010_0                 0x2C // WORD
#define EE_ADDR_taille_pas_00_000_0                 0x2E // WORD
#define EE_ADDR_taille_pas_00_000_1                 0x30 // WORD
#define EE_ADDR_epaisseur_sujet_100_000              0x32 // WORD
#define EE_ADDR_epaisseur_sujet_010_000              0x34 // WORD
#define EE_ADDR_epaisseur_sujet_001_000              0x36 // WORD
#define EE_ADDR_epaisseur_sujet_000_100              0x38 // WORD
#define EE_ADDR_epaisseur_sujet_000_010              0x3A // WORD
#define EE_ADDR_epaisseur_sujet_000_001              0x3C // WORD
#define EE_ADDR_rapport_dix                      0x3E // WORD
#define EE_ADDR_rapport_unit                     0x40 // WORD
#define EE_ADDR_rapport_dixieme                  0x42 // WORD
#define EE_ADDR_diaph_dix                          0x44 // WORD
#define EE_ADDR_diaph_unit                         0x46 // WORD
#define EE_ADDR_diaph_dixieme                      0x48 // WORD
#define EE_ADDR_delai_cent                            0x4A // WORD
#define EE_ADDR_delai_dix                             0x4C // WORD
#define EE_ADDR_delai_unit                            0x4E // WORD

/////// textes des menus                        "123456789012345"/////
  #define MSG_CONFIG                  "<MENU CONFIG>"
  // items du menu config
  #define MSG_RETRO             "<RETROECLAIRAGE>"
  #define MSG_BIP                  "<BIP>"
  #define MSG_YES                  "<OUI>"
  #define MSG_NO                   "<NON>"
  // Messages menu step1
  #define MSG_STEP1                     "<MENU STEP1>"
  // Messages calculs empiriques
  #define MSG_EMPIR                  "<EMPIRIQUE>"
  #define MSG_NBRPAS                 "<NBRE PAS>"
  #define MSG_TAILLE_PAS              "<TAILLE PAS>"
  #define MSG_DELAI_EMPIR              "<DELAI>"
  // Unités entrées empiriques - ajouter les variables avant
  #define MSG_UNITE_PAS_virgule               ","
  #define MSG_UNITE_PAS                  " um"
  #define MSG_UNITE_DELAI_EMPIR                    " sec"
  // Messages calculs empiriques
  #define MSG_CALCUL                  "<CALCUL>"
  #define MSG_RAPPORT                      "<RAPPORT>"
  #define MSG_DIAPH                 "<DIAPHRAGME>"
  #define MSG_EPAIS                 "<EPAISSEUR>"
  #define MSG_DELAI_CALC              "<DELAI>"
  // Unités entrées pour calculs - ajouter les variables avant
  #define MSG_UNITE_DIAPH              "f/ "
  #define MSG_UNITE_DIAPH_virgule      ","
  #define MSG_UNITE_EPAIS              " um"
  #define MSG_UNITE_DELAI_CALC                   " sec"
  // Messages "run" pour "step1"
  #define MSG_RUNEMPIR                         "<RUN EMPIR>"
  #define MSG_RUNCALC                         "<RUN CALC>"
  #define MSG_OK                    "OK"
  // Messages menu step2
  #define MSG_STEP2                    "<MENU STEP2>"
  // Messages menu step3
  #define MSG_STEP3                     "<MENU STEP3>"
  // Messages menu reset
  #define MSG_RESET                  "<RESET>"
  // Messages menu reset - avance et retour rapide automatique de la platine - utilisation des microrupteurs
  #define MSG_AVANCE                            "<AVANCE AUTO>"
  #define MSG_RETOUR                            "<RETOUR AUTO>"
 

// 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 nbre_pas_cent;
unsigned int nbre_pas_dix;
unsigned int nbre_pas_unit;
unsigned int taille_pas_10_000_0;
unsigned int taille_pas_01_000_0;
unsigned int taille_pas_00_100_0;
unsigned int taille_pas_00_010_0;
unsigned int taille_pas_00_001_0;
unsigned int taille_pas_00_000_1;
unsigned int epaisseur_sujet_100_000;
unsigned int epaisseur_sujet_010_000;
unsigned int epaisseur_sujet_001_000;
unsigned int epaisseur_sujet_000_100;
unsigned int epaisseur_sujet_000_010;
unsigned int epaisseur_sujet_000_001;
unsigned int rapport_dix;
unsigned int rapport_unit;
unsigned int rapport_dixieme;
unsigned int diaph_dix;
unsigned int diaph_unit;
unsigned int diaph_dixieme;
unsigned int delai_cent;
unsigned int delai_dix;
unsigned int delai_unit;

///////// SETUP ////////////////
// Setups at startup
void setup()
{
  lcd.begin(16, 2);        // initialiser la LCD library, 16 caractères, 2 lignes
   
  // LCD initialize
  lcd.setCursor(0,0);      // placer le curseur à la première ligne, première position

  // Pinmode inputs
  pinMode(PINS_BTN_A, INPUT);     
  pinMode(PINS_BTN_B, INPUT);
  pinMode(PinBouton, INPUT);
  pinMode(PinMicrorupteur_avant, INPUT);     
  pinMode(PinMicrorupteur_arriere, INPUT); 
 
  // Pinmode outputs
  pinMode(PINS_SHUTTER1, OUTPUT);
  pinMode(PINS_SHUTTER2, OUTPUT);
  pinMode(PINS_MOTOR1, OUTPUT);
  pinMode(PINS_MOTOR2, OUTPUT);
  pinMode(PINS_MOTOR3, OUTPUT);
  pinMode(PINS_BUZZER, OUTPUT);
 
  // Initialize config
  config_init();
 
  // Init backlight
  digitalWrite(10, system_useBacklight);
 
}

// Run manager
void loop(){
   controller_run();
}

///////////////// FONCTIONS ////////////////////

//  Lire la valeur A/D retournée selon le bouton choisi
int read_LCD_buttons()
{
  adc_key_in = analogRead(PinBouton);   
  // Mes boutons me donnent ces résultats :
  // Gauche = 500
  // Droite = 0
  // Haut = 140-141
  // Bas = 323-324
  // Select = 736-737
  // ** Code source : my buttons when read are centered at these valies: 0, 144, 329, 504, 741
  // ** we add approx 50 to those values and check to see if we are close
  if (adc_key_in > 1000) return btnNONE; // On commence par la valeur la plus probable : Aucun appui sur bouton !
  if (adc_key_in < 50)   return btnRIGHT;
  if (adc_key_in < 195)  return btnUP;
  if (adc_key_in < 380)  return btnDOWN;
  if (adc_key_in < 555)  return btnLEFT;
  if (adc_key_in < 790)  return btnSELECT;   
  return btnNONE;  // si aucun appui sur bouton, on retoune la constante btnNONE ...
}


De ce que j'en ai compris, il va y avoir des trucs stockés dans l'EEPROM.
J'ai cru voir dans d'autres partie du programmes que ces données étaient récupérées puis écrites en RAM.

Autrement, il me semble que le fichier qui irait après correspond à "controller_manager.pde"

Re: Stepduino à partir du Photoduino

MessagePosté: 28 Déc 2011 09:20
de Christian
Hello Fred,
Juste un avis, mais il n'engage que moi.
Tu devrais déjà bien voir ce qui se passe avec chaque module séparément : LCD, boutons, déclenchement reflex, moteur, etc ...
Ensuite créer des menus simples qui commencent à associer ces modules, puis ajouter par la suite des fonctions plus compliquées.
Essayer de transformer un programme abouti et bien complexe comme le Photoduino en Stepduino n'est pas gagné d'avance ! :roll:
(mais récupérer des morceaux de code bien précis, ça oui c'est pratique, faut il encore bien comprendre leurs implications)

Re: Stepduino à partir du Photoduino

MessagePosté: 28 Déc 2011 09:56
de Fredlab
Hello

Christian, je conçois bien que cette démarche n'est pas simple (et elle risque fort de ne pas aller au bout), mais elle permet d'avoir des lignes et des lignes de code à interpréter.
En fait, par rapport à nos besoins, il y a surtout beaucoup de lignes à virer.

Définir des constantes, comme c'est le cas dans ce que j'ai posté hier, ça ne mange pas de pain et ça permet aussi de poser les bases d'un travail.
(accessoirement, après lecture de site de référence, j'ai modifié #define par "const")
Si je me débrouille bien, je devrais placer ces constantes dans d'autres morceaux de code, notamment ceux qui tu amènes par petites touches et qui règlent un problème à la fois.

Re: Stepduino à partir du Photoduino

MessagePosté: 28 Déc 2011 22:49
de pierre4fun
Fred,

Merci pour ces bouts de code: il y a de bonnes idées :geek: